IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Requête SQL basic et problème de privilège [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2012
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Octobre 2012
    Messages : 21
    Par défaut Requête SQL basic et problème de privilège
    Bonjour tout le monde,

    J'ai créé un petit site en local pour faire du pentest (un tp d'SQLi pour mon association en ce qui concerne ce petit exercice).
    J'ai donc aucun soucis concernant le bypass de login.
    Cependant, lorsque je cherche à récupérer des données ou agir sur une table, il y a un soucis.
    J'injecte la requête suivante :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT * 
    FROM users 
    WHERE login='zzz' 
    UNION 
    SELECT passwd 
    FROM users 
    WHERE login='Administrateur' 
    LIMIT 1,1

    Et j'ai un retour :
    Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\wamp\www\test_SQLi\index.php on line 13
    Le soucis viens donc pas de mysql_fetch_array() mais du mysql-query qui le précède.

    D'après ce que je sais, mysql_query retourne false (et donc valeur booléenne, d'où le soucis) si l'user n'a pas les privilèges pour agir sur la table.

    Mon soucis, j'utilise un user au quel j'ai donné la totalité des droits sur toute mes bases de données.

    Si quelqu'un a une piste pour régler ce soucis...

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 814
    Billets dans le blog
    14
    Par défaut
    Il vaut mieux éviter la guerre des étoiles !
    En l'occurrence, ici, tu rapatries toutes les colonnes de la table dans la première requête de l'UNION et seulement une colonne dans la seconde donc ça ne peut pas fonctionner.

    D'ailleurs, je trouve le sens de la requête bizarre !
    Elle signifie, en gros :
    "Sélectionner l'utilisateur de login 'zzz' et le mot de passe de l'administrateur."

    Concernant le message d'erreur, rien ne dit que ce soit un problème de privilège. Quel utilisateur MySQL l'application utilise t-elle pour se connecter à la BDD ? C'est de cet utilisateur là dont il faut s'occuper des privilèges sur la BDD.

    Pour pouvoir analyser le problème, il faudrait donner le code PHP de la connexion à la BDD (en masquant bien sûr le mot de passe et l'URL) et le code de soumission de la requête à MySQL ainsi que le code de son exploitation jusqu'au mysql_fetch-array.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre averti
    Inscrit en
    Octobre 2012
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Octobre 2012
    Messages : 21
    Par défaut
    Tout d'abord, merci d'avoir rectifié mes erreurs !

    Pour le contexte :
    Il s'agit d'une exploitation de faille SQL exclusivement en local, je peux donc donner le code php sans soucis.

    Ma requête à pour but de récupérer le contenu de la table passwd du login Administrateur.

    Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    <?php
     
    if (isset($_GET['login'])) {
     
    $db = mysql_connect("localhost","pentest1","*****");  // Connexion à la base de données. (on va masquer le mot de passe pour la forme ! )
                mysql_select_db("pentest1");       // Sélection de la base de données utilisée.
     
    $pwd=md5($_GET['pass']);
    $sql="SELECT * FROM users WHERE login ='".$_GET['login']." ' AND passwd='".$pwd."';";
    echo $sql.'<br/>';
    $req=mysql_query($sql)or die(mysql_error());
    $data=mysql_fetch_array($req);
    if (is_array($data) ) 
    {
    ?>
    	Bienvenue <?php echo $data['login']; ?><br/><br/>Cle : <?php echo '"'.$data['key'].'"'; ?>
    <?php
    }
    else
    {
    echo "LOGIN / PASSWORD INVALIDE <br/>";
    ?>
    Oui, c'est un code bien moche mais c'est le but dans ce contexte ! ^^
    Après réflexion, ce n'est pas un soucis de privilège, j'ai ajouter un or die(mysql_error() pour connaitre le soucis.. ça vient au niveau de ma requête SQL.. qui marchait pourtant sur une autre plateforme.

    Mon Wamp utilise la version 5.5.24 de MySQL

    PS : Merci pour la guerre des étoiles, je ne connaissais absolument pas cette optimisation.

  4. #4
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 814
    Billets dans le blog
    14
    Par défaut
    ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre averti
    Inscrit en
    Octobre 2012
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Octobre 2012
    Messages : 21
    Par défaut
    Non, ce n'est pas résolu, je ne vois toujours pas pourquoi ma requête n'est pas exécuté sur cette plateforme.. Ma requête étant pourtant correct il me semble pour ce que je cherche à faire.

  6. #6
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 814
    Billets dans le blog
    14
    Par défaut
    Symptômes ?
    - message d'erreur ?
    - pas de résultat en retour ?
    - résultat erroné ?

    Puisque tu fais un echo $sql, quelle est la requête réellement envoyée ?
    Les variables $_GET sont-elles bien valorisées ?

    Je vois quand même un petit truc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE login ='".$_GET['login']." ' AND
    Tu as un espace entre le login et l'apostrophe de fin de chaîne, du coup, si le login réel est 'Severrakh', tu soumets à la requête la recherche du login 'Severrakh ' et il ne trouve pas l'utilisateur !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Requête SQL qui pose problème
    Par berko dans le forum Langage SQL
    Réponses: 11
    Dernier message: 29/11/2013, 14h02
  2. [SQL] Problème de requête SQL de plus de 8060 caractères ?
    Par webtheque dans le forum MS SQL Server
    Réponses: 13
    Dernier message: 06/04/2005, 15h07
  3. [SQLserver2000][SQLServer CE] problème de requête SQL
    Par JBernn dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 27/01/2005, 09h29
  4. Problème de requète SQL dans un Requery
    Par Keraccess dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 22/10/2004, 14h58
  5. Réponses: 8
    Dernier message: 23/10/2003, 16h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo