Fuzzing des paramètres GET avec Gobuster

Beginner
Pratiquer maintenant

Introduction

Dans la sécurité des applications web, la découverte de paramètres GET cachés ou non documentés est cruciale pour identifier les vulnérabilités potentielles. Ces paramètres peuvent parfois conduire à des divulgations d'informations, des injections SQL ou d'autres failles de sécurité s'ils ne sont pas correctement gérés par l'application. Gobuster, un outil populaire de brute-force de répertoires et de fichiers, offre également un mode "fuzz" qui peut être utilisé pour découvrir des paramètres GET.

Ce laboratoire vous guidera à travers le processus d'utilisation du mode fuzz de Gobuster pour identifier les paramètres GET. Vous apprendrez comment construire une URL avec le mot-clé FUZZ, utiliser une liste de mots contenant des noms de paramètres courants, exécuter le scan et analyser les résultats pour trouver des paramètres intéressants. À la fin de ce laboratoire, vous aurez une compréhension pratique de la manière d'effectuer du fuzzing de paramètres GET avec Gobuster, une compétence précieuse pour tout passionné ou professionnel de la cybersécurité.

Identifier un point de terminaison d'URL à tester

Dans cette étape, vous identifierez un point de terminaison d'URL cible que vous souhaitez tester pour des paramètres GET cachés. Pour ce laboratoire, nous utiliserons un serveur web simple qui simule une application vulnérable. Nous allons démarrer un serveur HTTP Python pour servir un fichier HTML de base.

Naviguez d'abord vers votre répertoire de projet :

cd ~/project

Ensuite, créez un fichier HTML simple nommé index.html que nous utiliserons comme cible. Ce fichier simulera une page web qui pourrait accepter des paramètres GET.

nano index.html

Ajoutez le contenu suivant à index.html :

<!DOCTYPE html>
<html>
  <head>
    <title>Test Page</title>
  </head>
  <body>
    <h1>Welcome to the Test Page!</h1>
    <p>This page is for testing GET parameters.</p>
  </body>
</html>

Enregistrez le fichier en appuyant sur Ctrl+X, puis Y, et Entrée.

Maintenant, démarrez un serveur HTTP Python simple pour servir ce fichier. Ce serveur fonctionnera sur le port 8000.

python3 -m http.server 8000 &

Le & à la fin exécute le serveur en arrière-plan, vous permettant de continuer à utiliser le terminal. Vous devriez voir une sortie similaire à celle-ci :

Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...

Le point de terminaison d'URL cible pour notre fuzzing sera http://127.0.0.1:8000/index.html.

Construire une URL avec un mot-clé FUZZ comme nom de paramètre

Dans cette étape, vous apprendrez comment construire l'URL que Gobuster utilisera pour le fuzzing. Le mode fuzz de Gobuster nécessite un mot-clé FUZZ dans l'URL pour indiquer où les entrées de la liste de mots doivent être insérées. Lors du fuzzing de paramètres GET, le mot-clé FUZZ remplace le nom du paramètre.

Le format de base d'une requête GET avec un paramètre est http://example.com/path?parameter=value. Pour faire du fuzzing sur le nom du paramètre, nous remplacerons parameter par FUZZ. La valeur peut être n'importe quoi, car nous nous intéressons uniquement à la découverte du nom du paramètre lui-même. Une pratique courante consiste à utiliser une valeur simple comme 1 ou test.

Pour notre laboratoire, l'URL cible est http://127.0.0.1:8000/index.html. Pour faire du fuzzing sur les noms de paramètres GET, l'URL sera construite comme suit :

http://127.0.0.1:8000/index.html?FUZZ=test

Ici :

  • http://127.0.0.1:8000/index.html est notre URL de base.
  • ? indique le début de la chaîne de requête.
  • FUZZ est le placeholder où Gobuster insérera les mots de notre liste de mots.
  • =test est une valeur statique pour le paramètre. La valeur spécifique n'a pas d'importance pour la découverte du nom du paramètre, mais elle est requise pour un format de paramètre valide.

Vous n'avez pas besoin d'exécuter de commande dans cette étape, mais la compréhension de cette construction d'URL est cruciale pour les étapes suivantes.

Utiliser une liste de mots de noms de paramètres courants

Dans cette étape, vous préparerez une liste de mots contenant des noms de paramètres GET courants. Gobuster itérera sur cette liste de mots, remplaçant le mot-clé FUZZ dans l'URL par chaque mot de la liste.

Bien que Gobuster dispose souvent de listes de mots par défaut, il est bon de savoir comment créer ou spécifier les vôtres. Pour ce laboratoire, nous allons créer une petite liste de mots personnalisée avec quelques noms de paramètres courants.

Assurez-vous d'abord d'être dans le répertoire ~/project :

cd ~/project

Maintenant, créez un nouveau fichier nommé params.txt qui servira de liste de mots :

nano params.txt

Ajoutez les noms de paramètres courants suivants à params.txt, chacun sur une nouvelle ligne :

id
name
user
page
search
query
file
data
token

Enregistrez le fichier en appuyant sur Ctrl+X, puis Y, et Entrée.

Ce fichier params.txt sera utilisé par Gobuster dans l'étape suivante pour faire du fuzzing sur les paramètres GET.

Exécuter le scan de fuzzing avec gobuster

Dans cette étape, vous exécuterez le scan de fuzzing de Gobuster en utilisant l'URL construite et la liste de mots.

La commande pour le mode fuzz de Gobuster est gobuster fuzz. Nous devons spécifier l'URL avec le mot-clé FUZZ en utilisant l'option -u et la liste de mots en utilisant l'option -w.

Ouvrez votre terminal et exécutez la commande suivante :

gobuster fuzz -u http://127.0.0.1:8000/index.html?FUZZ=test -w ~/project/params.txt

Analysons la commande :

  • gobuster fuzz : Lance Gobuster en mode fuzzing.
  • -u http://127.0.0.1:8000/index.html?FUZZ=test : Spécifie l'URL cible avec le placeholder FUZZ.
  • -w ~/project/params.txt : Spécifie le chemin vers notre liste de mots contenant les noms de paramètres.

Gobuster enverra maintenant des requêtes au serveur web, remplaçant FUZZ par chaque mot de params.txt. Comme notre index.html ne traite pas réellement ces paramètres, Gobuster signalera probablement le même code d'état et la même longueur de contenu pour toutes les requêtes. Cependant, dans un scénario réel, un changement de code d'état ou de longueur de contenu indiquerait qu'un paramètre pourrait être reconnu.

La sortie affichera chaque tentative ainsi que le code d'état et la longueur du contenu correspondants. Elle ressemblera à ceci :

===============================================================
Gobuster vX.X.X
===============================================================
[+] Url: http://127.0.0.1:8000/index.html?FUZZ=test
[+] Method: GET
[+] Threads: 10
[+] Wordlist: /home/labex/project/params.txt
[+] Status codes: 200,204,301,302,307,401,403,405
[+] User Agent: gobuster/X.X.X
[+] Timeout: 10s
===============================================================
200 (290)    - http://127.0.0.1:8000/index.html?id=test
200 (290)    - http://127.0.0.1:8000/index.html?name=test
200 (290)    - http://127.0.0.1:8000/index.html?user=test
200 (290)    - http://127.0.0.1:8000/index.html?page=test
200 (290)    - http://127.0.0.1:8000/index.html?search=test
200 (290)    - http://127.0.0.1:8000/index.html?query=test
200 (290)    - http://127.0.0.1:8000/index.html?file=test
200 (290)    - http://127.0.0.1:8000/index.html?data=test
200 (290)    - http://127.0.0.1:8000/index.html?token=test
===============================================================

Analyser les résultats pour les changements de longueur de réponse ou de statut

Dans cette étape, vous apprendrez à interpréter la sortie du scan de fuzzing de Gobuster. La clé pour identifier les paramètres GET potentiellement valides ou intéressants réside dans l'observation des changements dans la réponse HTTP.

Lorsque Gobuster s'exécute, il affiche le code d'état HTTP et la longueur du contenu (en octets) pour chaque requête qu'il effectue.

Par exemple, la sortie de l'étape précédente montrait :

200 (290)    - http://127.0.0.1:8000/index.html?id=test
200 (290)    - http://127.0.0.1:8000/index.html?name=test
...

Ici, 200 est le code d'état HTTP (OK), et 290 est la longueur du contenu de la réponse.

Ce qu'il faut rechercher :

  1. Codes d'état différents : Si une requête avec un nom de paramètre spécifique renvoie un code d'état HTTP différent (par exemple, 200 pour valide, 404 pour non trouvé, 500 pour erreur serveur, 302 pour redirection), cela peut indiquer que l'application a traité ou réagi à ce paramètre. Par exemple, un 200 OK pour un paramètre qui renvoie normalement 404 Not Found pourrait être significatif.
  2. Longueurs de contenu différentes : Même si le code d'état reste 200 OK, un changement dans la longueur du contenu peut être un indicateur fort. Cela signifie souvent que le corps de la réponse de l'application a changé, peut-être en incluant des données spécifiques liées au paramètre, un message d'erreur, ou une mise en page différente.
  3. Messages d'erreur : Parfois, un paramètre peut déclencher un message d'erreur (par exemple, erreur SQL, erreur d'application) qui se reflète dans le corps de la réponse, entraînant une longueur de contenu différente, voire un code d'état 500. C'est un signe fort d'une vulnérabilité potentielle.

Dans notre configuration de laboratoire actuelle, comme index.html est un fichier statique et que le serveur Python ne traite pas les paramètres GET, vous observerez que toutes les requêtes renvoient un code d'état 200 et la même longueur de contenu (290 octets). C'est le comportement attendu pour notre cas de test simple.

Dans un scénario réel, si vous faisiez du fuzzing sur une application web en direct et que vous voyiez une entrée comme :

200 (512)    - http://example.com/search?query=test

alors que d'autres paramètres renvoyaient 200 (290), le paramètre query mériterait une investigation plus approfondie en raison de la longueur de contenu différente.

Cette étape conclut le laboratoire. Vous avez appris avec succès à utiliser Gobuster pour faire du fuzzing sur les paramètres GET et à analyser les résultats.

Pour arrêter le serveur HTTP Python, vous pouvez trouver son identifiant de processus (PID) et le terminer. Tout d'abord, listez les processus Python en cours d'exécution :

ps aux | grep "python3 -m http.server 8000"

Vous verrez une sortie similaire à :

labex     1234  0.0  0.0  12345  6789 ?        S    HH:MM   0:00 python3 -m http.server 8000

Notez le PID (par exemple, 1234 dans cet exemple) puis terminez le processus :

kill 1234

Remplacez 1234 par le PID réel que vous avez trouvé.

Résumé

Dans ce laboratoire, vous avez appris avec succès à effectuer du fuzzing de paramètres GET à l'aide de Gobuster. Vous avez commencé par configurer un serveur web local et créer un fichier HTML cible. Vous avez ensuite construit une URL avec le mot-clé FUZZ, préparé une liste de mots personnalisée de noms de paramètres courants et exécuté le scan de fuzzing de Gobuster. Enfin, vous avez appris à analyser les résultats du scan, en vous concentrant sur les changements de codes d'état HTTP et de longueurs de contenu, qui sont des indicateurs clés des paramètres reconnus.

Cette technique est une partie fondamentale de la reconnaissance des applications web et peut aider à découvrir des fonctionnalités cachées ou des vulnérabilités potentielles. En maîtrisant cette compétence, vous êtes mieux équipé pour identifier et enquêter sur les surfaces d'attaque des applications web.