Introduction
Dans ce laboratoire, vous acquerrez une expérience pratique avec sqlmap, un outil open-source de test d'intrusion qui automatise le processus de détection et d'exploitation des failles d'injection SQL et de prise de contrôle des serveurs de bases de données. Plus précisément, vous vous concentrerez sur la réalisation d'un scan de base sur le paramètre GET d'une application web pour identifier les vulnérabilités potentielles d'injection SQL. Comprendre comment initier un scan et interpréter sa sortie initiale est une compétence fondamentale pour toute personne impliquée dans la sécurité web ou les tests d'intrusion. Ce laboratoire vous guidera à travers les étapes nécessaires, de la configuration d'un environnement vulnérable à l'exécution de votre première commande sqlmap et à l'analyse des résultats.
Identifier une URL cible avec un paramètre GET
Dans cette étape, vous allez identifier l'URL cible qui contient un paramètre GET, que sqlmap utilisera pour tester les vulnérabilités d'injection SQL. Un paramètre GET se trouve généralement dans l'URL après un point d'interrogation (?), suivi de paires clé-valeur séparées par des esperluettes (&). Pour ce laboratoire, nous avons configuré une application PHP vulnérable simple qui accepte un paramètre id via GET.
Tout d'abord, ouvrez le navigateur web dans l'environnement LabEx. Vous pouvez accéder au navigateur en cliquant sur l'icône "Web Browser" dans l'environnement de bureau.
Naviguez vers l'URL suivante : http://localhost/index.php?id=1
Observez le contenu de la page. Vous devriez voir une sortie simple indiquant que l'application affiche des données basées sur le paramètre id. Cela confirme que le paramètre id est une cible appropriée pour notre scan sqlmap.
Construire la commande de scan de base avec l'option -u
Dans cette étape, vous apprendrez à construire la commande sqlmap de base pour cibler une URL spécifique avec un paramètre GET. L'option principale pour spécifier l'URL cible est -u (ou --url).
Ouvrez un terminal dans l'environnement LabEx. L'utilisateur par défaut est labex, et le répertoire de travail par défaut est ~/project.
La syntaxe de base pour sqlmap afin de scanner une URL avec un paramètre GET est :
sqlmap -u "http://example.com/page.php?param=value"
Remplacez http://example.com/page.php?param=value par notre URL cible.
Pour notre laboratoire, l'URL cible est http://localhost/index.php?id=1. Par conséquent, la commande que vous utiliserez est :
sqlmap -u "http://localhost/index.php?id=1"
Cette commande indique à sqlmap de commencer à scanner l'URL spécifiée et de tester le paramètre GET id pour les vulnérabilités d'injection SQL.
Exécuter le scan sur l'URL cible
Maintenant que vous avez construit la commande sqlmap, il est temps de l'exécuter dans le terminal. Cela lancera le scan automatisé d'injection SQL.
Dans votre terminal, exécutez la commande sqlmap que vous avez construite à l'étape précédente :
sqlmap -u "http://localhost/index.php?id=1"
sqlmap commencera à envoyer divers payloads au paramètre id pour tester différents types de vulnérabilités d'injection SQL. Pendant le scan, sqlmap pourrait vous poser quelques questions. Pour ce scan de base, vous pouvez généralement accepter les options par défaut en appuyant sur Entrée ou en tapant y pour oui lorsque vous y êtes invité.
Par exemple, sqlmap pourrait demander :
[INFO] le SGBD back-end est MySQL. Voulez-vous ignorer les payloads de test spécifiques aux autres SGBD ? [Y/n]
Tapez Y et appuyez sur Entrée.
Il pourrait également demander :
pour l'URL 'http://localhost/index.php?id=1', le paramètre 'id' semble injectable. Voulez-vous continuer à tester les autres (le cas échéant) ? [y/N]
Tapez N et appuyez sur Entrée pour vous concentrer sur le paramètre injectable identifié.
Le scan se poursuivra, et vous verrez divers messages indiquant la progression et les tests effectués.
_
___ ___ ___ ___
|_ -| . | . | . |
|___|_ |_ |_ |
|_| |_| |_| 3.7#stable
[INFO] starting @ 12:34:56 /2023-01-01/
[INFO] testing connection to the target URL
[INFO] checking if the target is protected by some kind of WAF/IPS
[INFO] the back-end DBMS is MySQL. Do you want to skip test payloads specific for other DBMSs? [Y/n] Y
[INFO] for the URL 'http://localhost/index.php?id=1', parameter 'id' appears to be injectable. Do you want to keep testing others (if any)? [y/N] N
[INFO] GET parameter 'id' is vulnerable.
... (sortie tronquée) ...
Analyser la sortie du scan initial pour les points d'injection
Une fois le scan sqlmap terminé, il fournira un résumé de ses découvertes. Dans cette étape, vous analyserez la sortie initiale pour identifier les points d'injection SQL confirmés.
Examinez la sortie dans votre terminal. Recherchez les lignes indiquant que sqlmap a trouvé un paramètre vulnérable. Un indicateur clé est un message similaire à :
[INFO] GET parameter 'id' is vulnerable.
Ce message confirme que sqlmap a identifié avec succès une vulnérabilité d'injection SQL dans le paramètre GET id de l'URL cible. La sortie indiquera également généralement le type d'injection trouvé (par exemple, basé sur le booléen aveugle, basé sur les erreurs, basé sur le temps aveugle, requêtes empilées, etc.) et le système de gestion de base de données (SGBD) back-end identifié (par exemple, MySQL, PostgreSQL, etc.).
Comprendre cette sortie initiale est crucial car elle vous indique où se situe la vulnérabilité et avec quel type de base de données vous avez affaire, ce qui peut éclairer les étapes d'exploitation ultérieures.
... (sortie précédente) ...
[INFO] GET parameter 'id' is vulnerable.
[INFO] the back-end DBMS is MySQL.
[INFO] fetched data:
[INFO] retrieved: 'ID: 1'
[INFO] retrieved: 'ID: 2'
... (sortie tronquée) ...
Localiser le fichier de session dans le répertoire de sortie
sqlmap enregistre automatiquement tous les résultats de scan, y compris les vulnérabilités identifiées, les données récupérées et les informations de session, dans un répertoire de sortie dédié. Dans cette étape, vous apprendrez comment localiser ce fichier de session.
Par défaut, sqlmap stocke sa sortie dans le répertoire ~/.sqlmap/output/. À l'intérieur de ce répertoire, vous trouverez des sous-répertoires nommés d'après l'hôte cible.
Naviguez vers le répertoire de sortie de sqlmap :
cd ~/.sqlmap/output/localhost/
Ensuite, listez le contenu de ce répertoire pour voir les fichiers de session et d'autres données liées au scan :
ls -l
Vous devriez voir un répertoire nommé d'après l'URL spécifique ou un hash de celle-ci, et à l'intérieur, des fichiers comme session.sqlite, log, et potentiellement des répertoires dump si des données ont été extraites. Le fichier session.sqlite contient les données de session, ce qui permet à sqlmap de reprendre les scans ou de revoir les découvertes précédentes sans re-scanner.
labex@labex-ubuntu:~/project$ cd ~/.sqlmap/output/localhost/
labex@labex-ubuntu:~/.sqlmap/output/localhost$ ls -l
total 12
drwxr-xr-x 2 labex labex 4096 Jan 1 12:35 http%3A%2F%2Flocalhost%2Findex.php%3Fid%3D1
labex@labex-ubuntu:~/.sqlmap/output/localhost$ cd http%3A%2F%2Flocalhost%2Findex.php%3Fid%3D1/
labex@labex-ubuntu:~/.sqlmap/output/localhost/http%3A%2F%2Flocalhost%2Findex.php%3Fid%3D1$ ls -l
total 12
-rw-r--r-- 1 labex labex 1234 Jan 1 12:35 log
-rw-r--r-- 1 labex labex 8192 Jan 1 12:35 session.sqlite
Cette étape est importante pour comprendre où sqlmap stocke ses données persistantes, ce qui est utile pour examiner les scans passés ou poursuivre des opérations complexes.
Résumé
Dans ce laboratoire, vous avez réussi à effectuer un scan d'injection SQL de base sur un paramètre GET à l'aide de sqlmap. Vous avez appris à identifier une URL cible, à construire la commande sqlmap avec l'option -u, à exécuter le scan et à interpréter la sortie initiale pour confirmer un point d'injection. De plus, vous avez localisé le fichier de session et le répertoire de sortie où sqlmap stocke ses résultats. Ces connaissances fondamentales sont cruciales pour quiconque souhaite approfondir les tests de sécurité des applications web et les capacités de sqlmap.



