Injection SQL : automatiser ses SQLi

To the non-french speaker, note that you can translate the articles using the Google Trad widget situated at the bottom of all pages.


Avant de commencer l’article sur sqlmap je tenais à vous rappeler qu’utiliser un logiciel de ce type sans savoir comment il fonctionne est à la fois stupide et dangereux. Je vous conseille donc vivement d’apprendre le SQL et les injections SQL manuelles.
Précédemment, je vous ai montré comment injecter du code SQL dans une URL manuellement. Nous avons vu qu’en modifiant un peu une URL, on pouvait duper le script PHP et récupérer des données censées confidentielles.

Cependant aujourd’hui il existe de nombreux outils qui permettent de faire la même chose en tapant deux lignes sur un invite de commande. Sqlmap est l’un d’entre eux, il est disponible sous Unix, MacOs et Windows, vous pouvez le télécharger ici pour Windows ou via apt sous Linux :

sudo apt install sqlmap

Sqlmap (tout comme Havij) est un outil automatisé d’injection SQL utilisé pour les audits de sécurité (pentest). Son utilisation basique est très simple, il suffit de lui fournir une URL avec l’option -u pour que ce dernier tente diverses injections :

Capture d’écran du 2019-09-13 10-25-38.png

Pour le coup nous n’aurons pas de résultats probant puisque mon site n’est pas vulnérable aux injections SQL, je voulais juste vous montrer un début d’output.

Comme on peut le voir, la première chose que va faire SQLmap c’est de vérifier que le site est joignable. Ensuite il va vérifier si le site est protégé par un IDS, un IPS ou encore un WAF. En effet suivant les technologies utilisées pour protéger l’application, SQLmap pourra transformer ses payloads afin de bypass les protections.

Enfin SQLmap va tester plusieurs payloads et analyser le comportement de l’application afin de trouver une potentielle injection SQL. Sur une application vulnérable on pourrait recevoir ce type d’output :

suite-rq1

On remarque que sqlmap utilise la close order by afin de trouver le bon nombre de colonne (tout comme nous l’avons fait manuellement). Il nous répond ensuite qu’il y a 3 colonnes dans la requête. Ce qui est encore une fois vrai. Puis il test une requête du type UNION (encore une fois comme nous manuellement) et nous indique que le paramètre idCategory est vulnérable.

Sqlmap va par la suite effectuer plusieurs tests afin de déterminer si l’URL est injectable ou non :

difmet

La première ligne nous indique que sqlmap a lancé 44 requêtes HTTP. Ça peut paraître anodin mais le nombre de requête est quand même très important notamment si ce que vous faites n’est pas très légal. En effet une activité trop important peut permettre à une personne qualifiée de comprendre qu’une attaque est en cours.

Le bloc suivant est en fait l’ensemble des méthodes qui ont permis à sqlmap de déterminer si l’URL est vulnérable :

  • Boolean Based : une injection de type boolean based va se baser sur un ensemble de comparaison afin d’extraire le contenu d’une base de données. Par exemple pour extraire le nom du premier utilisateur de l’utilisateur, SQLmap va envoyer une requête qui va demander si la première lettre du nom du premier utilisateur est un a puis un b puis c jusqu’à ce que la requête soit vraie auquel cas SQLmap passera à la seconde lettre du nom.
  • Error Based : SQLmap tentera d’extraire la base de données en se basant sur les erreurs émises par l’application.
  • Time based : SQLmap va se baser sur le temps de réponse de la requête afin de déterminer sur la requête émise est valide ou non.
  • Union Query : SQLmap va simplement crée une requête de type union et observé le résultat.

Il existe une dernière méthode de détection qui n’est pas utilisée ici, c’est la technique du Stack queries. Ici SQLmap va tout simplement stacker les requêtes SQL de cette manière :

http://localhost/test/injectionsql/formulaire.php?idCategory=2 ; SELECT..

Si l’une de ces méthodes est utilisable alors SQLmap commencera à extraire la base de données.


En plus de pouvoir dumper une base de données, SQLmap va aussi nous permettre d’effectuer plusieurs actions fort sympathiques.

On pourra par exemple déposer une backdoor directement sur le serveur en utilisant l’option –os-shell. Pour que cela soit possible il faudra que l’utilisateur courant de la base de données dispose des droits d’écriture sur le serveur. En effet SQLmap va se servir de l’option INTO OUTFILE (pour Mysql) afin d’écrire un webshell que l’on pourra ensuite utiliser afin de prendre le contrôle du serveur.

Avec l’option –sqlmap-shell on pourra requêter la base de données directement comme si nous avions ouvert un invité de commande mysql classique.

Enfin avec l’option –os-pwn on pourra directement tenter d’ouvrir une session distante meterpreter ce qui n’est clairement pas négligeable !


Personnellement j’utilise très souvent un feature assez pratique : l’option -r. Cette option va me permettre de spécifier un fichier contenant une requête HTTP qui sera utilisé par SQLmap.

Pour cela j’utilise Burpsuite afin de réceptionner la requête :

Capture d’écran du 2019-09-13 10-54-32.png

Il ne nous restera plus qu’à copier cette requête dans un fichier quelconque puis indiquer les champs à injecter en y ajoutant un « * » (attention à bien supprimer les * du header Accept). Et voilà :

Capture d’écran du 2019-09-13 10-57-22.png

Voilà pour les fonctionnalités basiques de SQLmap !

3 commentaires

  1. très intéressant, mais comme tu la dis au début du tuto c’est un tool qui attire beaucoup plus les script kiddies ^^ ils aiment tout ce qui est suspicieux lol.
    Autre chose, je pense que SQLmap n’est pas assez pertinent, vaux mieux bidouiller manuellement.
    MERCI.

    Aimé par 1 personne

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 )

Photo Google

Vous commentez à l'aide de votre compte Google. 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 )

Connexion à %s