Partage
  • Partager sur Facebook
  • Partager sur Twitter

Correction annales concours

besoin d'aide

    3 novembre 2020 à 2:29:19

    Bonjour,

    je prépare un concours et comme beaucoup je me sers des annales des années passées.

    voici un des exercices :

    Voici une requête SQL qui a subi une attaque

    SELECT nom, prenom, date_naissance
    FROM PERSONNE
    WHERE PERSONNE.nom = ‘UNION
    SELECT password, nom
    FROM PERSONNE
    WHERE PERSONNE.role = ‘Admin’; -‘;


    a) Recopier la partie correspondant à l’injection

    b) Expliquer les raisons pour lesquelles elle n’aboutit pas ?

    Pour la a) j'avoue galérer un peu et je serais donc preneur de la solution avec des explications si possible.

    Pour la b) je pense que c'est dû au fait qu'il n' y a que  champs demandés dans le deuxième SELECT contre trois dans le premier.

    Merci de votre aide :)

    • Partager sur Facebook
    • Partager sur Twitter
      3 novembre 2020 à 9:06:33

      Bonjour,

      Une injection SQL consiste à injecter du code SQL "non prévu" dans une requête SQL existante.

      Ici la requête initiale est prévue pour rechercher dans la table PERSONNE les enregistrements dont la colonne nom est égale à une variable saisie par l'utilisateur.

      La requête initiale est donc :

      SELECT nom, prenom, date_naissance
      FROM PERSONNE
      WHERE PERSONNE.nom = 'nom recherché'

      Dans ce cas, l'injection a consisté à injecter, à la place de "nom recherché", un code SQL cherchant à récupérer le password et le nom d'une personne dont le role est "Admin".

      La requête injectée est donc :

      UNION
      SELECT password, nom
      FROM PERSONNE
      WHERE PERSONNE.role = "Admin"; -

      Toutefois, si l'on reprend la requête, avec une coloration syntaxique, on voit que la requête ne peut aboutir :

      SELECT nom, prenom, date_naissance
      FROM PERSONNE
      WHERE PERSONNE.nom = 'UNION
          SELECT password, nom
          FROM PERSONNE
          WHERE PERSONNE.role = 'Admin'; -';

      Avant le problème évoqué du nombre de colonnes différents entre les deux SELECT, on se rend compte ici que par le jeu des guillemets, un erreur de syntaxe doit être retournée au niveau du mot "Admin".

      Le mieux c'est d'exécuter cette requête sur une base de test pour s'en rendre compte : http://sqlfiddle.com/#!9/7821e4/2

      Une meilleure façon de faire l'injection aurait été : http://sqlfiddle.com/#!9/7821e4/3

      En injectant la chaîne :

      1' UNION
      SELECT password, nom, date_naissance
      FROM PERSONNE
      WHERE PERSONNE.role = 'Admin'

      -
      Edité par Benzouye 3 novembre 2020 à 9:10:36

      • Partager sur Facebook
      • Partager sur Twitter
      Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
        6 novembre 2020 à 19:29:31

        Bonjour,

        merci beaucoup de tes explications et des liens avec du concret ça aide à mieux comprendre.

        Bonne journée.

        • Partager sur Facebook
        • Partager sur Twitter

        Correction annales concours

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown