hacktricks/pentesting-web/web-tool-wfuzz.md
2023-06-03 13:10:46 +00:00

18 KiB

Outil Web - WFuzz

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

Un outil pour FUZZ les applications web n'importe où.

Wfuzz a été créé pour faciliter la tâche dans les évaluations des applications web et il est basé sur un concept simple : il remplace toute référence au mot-clé FUZZ par la valeur d'une charge utile donnée.

Installation

Installé dans Kali

Github : https://github.com/xmendez/wfuzz

pip install wfuzz

Options de filtrage

--hs/ss "regex" #Hide/Show
#Simple example, match a string: "Invalid username"
#Regex example: "Invalid *"

--hc/sc CODE #Hide/Show by code in response
--hl/sl NUM #Hide/Show by number of lines in response
--hw/sw NUM #Hide/Show by number of words in response
--hh/sh NUM #Hide/Show by number of chars in response
--hc/sc NUM #Hide/Show by response code

Options de sortie

wfuzz -e printers #Prints the available output formats
-f /tmp/output,csv #Saves the output in that location in csv format

Options d'encodeurs

Les encodeurs sont utilisés pour modifier les caractères d'une requête afin de contourner les filtres de sécurité. Voici les options d'encodeurs disponibles dans wfuzz :

  • URL encodeur (URL) : Encode les caractères spéciaux en utilisant le format d'encodage d'URL (%XX).
  • HTML encodeur (HTML) : Encode les caractères spéciaux en utilisant le format d'encodage HTML (&#xXX;).
  • Base64 encodeur (B64) : Encode les données en utilisant l'algorithme Base64.
  • Quoted Printable encodeur (QP) : Encode les données en utilisant l'algorithme Quoted Printable.
  • Hexadecimal encodeur (HEX) : Encode les données en utilisant l'algorithme Hexadecimal.
  • ASCII encodeur (ASCII) : Encode les données en utilisant l'algorithme ASCII.

Il est important de noter que l'utilisation d'encodeurs peut augmenter le temps de traitement de la requête.

wfuzz -e encoders #Prints the available encoders
#Examples: urlencode, md5, base64, hexlify, uri_hex, doble urlencode

Pour utiliser un encodeur, vous devez l'indiquer dans l'option "-w" ou "-z".

Exemples :

-z file,/path/to/file,md5 #Will use a list inside the file, and will transform each value into its md5 hash before sending it
-w /path/to/file,base64 #Will use a list, and transform to base64
-z list,each-element-here,hexlify #Inline list and to hex before sending values

Fiche de référence

Bruteforce de formulaire de connexion

POST, Liste unique, filtre de chaîne (caché)

wfuzz -c -w users.txt --hs "Login name" -d "name=FUZZ&password=FUZZ&autologin=1&enter=Sign+in" http://zipper.htb/zabbix/index.php
#Here we have filtered by line

POST, 2 listes, code de filtre (montrer)

Dans cette section, nous allons voir comment utiliser wfuzz pour envoyer une requête POST avec deux listes et filtrer le code de réponse.

La syntaxe de base est la suivante :

wfuzz -c -z file,<list1> -z file,<list2> --hs <response_code> <url> -d "<post_data>"

Explications :

  • -c : affiche la sortie en couleurs
  • -z file,<list1> : spécifie que la liste 1 est un fichier
  • -z file,<list2> : spécifie que la liste 2 est un fichier
  • --hs <response_code> : spécifie le code de réponse à filtrer
  • <url> : l'URL cible
  • -d "<post_data>" : les données POST à envoyer

Exemple :

wfuzz -c -z file,users.txt -z file,passwords.txt --hs 200 http://example.com/login.php -d "username=FUZZ&password=FUZ2Z"

Dans cet exemple, nous envoyons une requête POST à l'URL http://example.com/login.php avec les données POST username=FUZZ&password=FUZ2Z. Les valeurs FUZZ et FUZ2Z seront remplacées par les éléments des listes users.txt et passwords.txt, respectivement.

Nous filtrons également le code de réponse 200 pour ne voir que les réponses réussies.

Notez que les fichiers users.txt et passwords.txt doivent être dans le même répertoire que le fichier de commande wfuzz.

wfuzz.py -c -z file,users.txt -z file,pass.txt --sc 200 -d "name=FUZZ&password=FUZ2Z&autologin=1&enter=Sign+in" http://zipper.htb/zabbix/index.php
#Here we have filtered by code

GET, 2 listes, filtre de chaîne (show), proxy, cookies

Dans cette section, nous allons utiliser wfuzz pour envoyer des requêtes GET avec deux listes différentes et filtrer les résultats en utilisant une chaîne spécifique. Nous allons également utiliser un proxy et des cookies pour simuler une session authentifiée.

La commande suivante envoie des requêtes GET à l'URL spécifiée en utilisant deux listes différentes pour les paramètres "id" et "category". Nous filtrons ensuite les résultats pour n'afficher que ceux qui contiennent la chaîne "admin".

wfuzz -c -z file,/path/to/ids.txt -z file,/path/to/categories.txt -u "http://example.com/product.php?id=FUZZ&category=FUZ2Z" --hl 0 --hc 404 -H "Cookie: session=123456" -x http://localhost:8080 -s "admin"
  • -c : affiche les résultats en couleur
  • -z file : spécifie que nous utilisons une liste de fichiers pour les valeurs de paramètres
  • -u : spécifie l'URL cible avec les paramètres FUZZ et FUZ2Z qui seront remplacés par les valeurs des listes
  • --hl 0 : désactive l'affichage de la ligne d'en-tête
  • --hc 404 : ignore les réponses avec un code d'état 404
  • -H : spécifie les cookies de session
  • -x : spécifie le proxy à utiliser
  • -s : filtre les résultats pour n'afficher que ceux qui contiennent la chaîne "admin"
wfuzz -c -w users.txt -w pass.txt --ss "Welcome " -p 127.0.0.1:8080:HTTP -b "PHPSESSIONID=1234567890abcdef;customcookie=hey" "http://example.com/index.php?username=FUZZ&password=FUZ2Z&action=sign+in"

Bruteforce de répertoires/Bruteforce RESTful

Liste de mots de passe de paramètres Arjun

wfuzz -c -w /tmp/tmp/params.txt --hc 404 https://domain.com/api/FUZZ

Brute-Force des Paramètres de Chemin

Les paramètres de chemin sont des variables qui font partie de l'URL et qui sont utilisées pour identifier une ressource spécifique sur le serveur. Les attaquants peuvent utiliser des techniques de brute-force pour deviner les valeurs de ces paramètres et accéder à des ressources non autorisées.

Wfuzz peut être utilisé pour effectuer une attaque de brute-force sur les paramètres de chemin en utilisant la syntaxe suivante :

wfuzz -c -z file,/path/to/wordlist.txt http://example.com/FUZZ

Dans cet exemple, Wfuzz va remplacer le mot-clé FUZZ par chaque mot du fichier de liste de mots spécifié dans le chemin de l'URL. L'option -c est utilisée pour afficher les codes de réponse HTTP pour chaque requête.

Il est important de noter que l'utilisation de cette technique peut être détectée par les systèmes de détection d'intrusion et peut entraîner un blocage de l'adresse IP de l'attaquant. Il est donc recommandé d'utiliser des listes de mots spécifiques à la cible et de limiter le nombre de tentatives pour éviter d'être détecté.

wfuzz -c -w ~/git/Arjun/db/params.txt --hw 11 'http://example.com/path%3BFUZZ=FUZZ'

Authentification d'en-tête

Basique, 2 listes, chaîne de filtre (show), proxy

wfuzz -c -w users.txt -w pass.txt -p 127.0.0.1:8080:HTTP --ss "Welcome" --basic FUZZ:FUZ2Z "http://example.com/index.php"

NTLM, 2 listes, chaîne de filtre (show), proxy

NTLM est un protocole d'authentification utilisé par les systèmes d'exploitation Windows. Il est souvent utilisé pour l'authentification des utilisateurs dans les environnements Active Directory.

Lors de l'utilisation de WFuzz avec NTLM, il est possible d'utiliser deux listes de mots de passe différentes pour les tentatives d'authentification. Cela peut être fait en utilisant l'option --ntlm-file pour spécifier le chemin d'accès à la liste de mots de passe NTLM et l'option --pw-list pour spécifier le chemin d'accès à la liste de mots de passe standard.

Il est également possible de filtrer les résultats de WFuzz en utilisant une chaîne de filtre. Cela peut être fait en utilisant l'option --filter suivie de la chaîne de filtre. Par exemple, --filter='show="401"' affichera uniquement les résultats avec un code de réponse 401.

Enfin, si vous utilisez un proxy pour vous connecter à la cible, vous pouvez spécifier l'adresse du proxy en utilisant l'option --proxy. Par exemple, --proxy=http://127.0.0.1:8080 spécifiera un proxy sur le port 8080 de l'adresse IP 127.0.0.1.

wfuzz -c -w users.txt -w pass.txt -p 127.0.0.1:8080:HTTP --ss "Welcome" --ntlm 'domain\FUZZ:FUZ2Z' "http://example.com/index.php"
wfuzz -c -w users.txt -p 127.0.0.1:8080:HTTP --ss "Welcome " -H "Cookie:id=1312321&user=FUZZ"  "http://example.com/index.php"

User-Agent, code de filtre (masquer), proxy

Le header User-Agent est utilisé pour identifier le client HTTP utilisé pour effectuer une requête. Il est souvent utilisé pour différencier les requêtes provenant de navigateurs web et celles provenant d'outils automatisés tels que les scripts de fuzzing. Il est possible de modifier le User-Agent pour masquer l'outil utilisé et éviter d'être détecté.

Il est également possible de filtrer le code source de la réponse pour masquer les erreurs et les informations sensibles. Cela peut être fait en utilisant des outils tels que grep ou awk.

L'utilisation d'un proxy peut également aider à masquer l'adresse IP de l'attaquant et à éviter d'être détecté. Les proxies peuvent être configurés pour rediriger le trafic à travers des serveurs distants, ce qui rend plus difficile la détection de l'origine de la requête.

wfuzz -c -w user-agents.txt -p 127.0.0.1:8080:HTTP --ss "Welcome " -H "User-Agent: FUZZ"  "http://example.com/index.php"

Hôte

wfuzz -c -w /usr/share/wordlists/SecLists/Discovery/DNS/subdomains-
top1million-20000.txt --hc 400,404,403 -H "Host: FUZZ.example.com" -u 
http://example.com -t 100

Utilisation de fichier

Description

Lorsque vous utilisez l'option --hc pour spécifier le code de réponse attendu, vous pouvez utiliser l'option --hc-r pour spécifier une réponse différente pour chaque méthode HTTP. Cela peut être utile pour détecter les méthodes HTTP autorisées sur une cible.

Syntaxe
wfuzz -c -z file,<http_methods_file> --hc <response_code> --hc-r <http_method>:<response_code> <url>
Exemple
wfuzz -c -z file,/usr/share/wfuzz/wordlist/http_methods.txt --hc 200 --hc-r PUT:403 http://example.com/FUZZ

Dans cet exemple, wfuzz utilise le fichier http_methods.txt pour bruteforcer les méthodes HTTP sur l'URL http://example.com/FUZZ. Si wfuzz reçoit une réponse 200, il considère que la méthode HTTP est autorisée. Si wfuzz reçoit une réponse 403 pour la méthode HTTP PUT, il considère que la méthode HTTP PUT est interdite.

wfuzz -c -w methods.txt -p 127.0.0.1:8080:HTTP --sc 200 -X FUZZ "http://example.com/index.php"

Utilisation de la liste en ligne


The inline list is a very useful feature of wfuzz that allows you to specify a list of values for a parameter in a single line. This is particularly useful when you have a small list of values that you want to test.

La liste en ligne est une fonctionnalité très utile de wfuzz qui vous permet de spécifier une liste de valeurs pour un paramètre en une seule ligne. Cela est particulièrement utile lorsque vous avez une petite liste de valeurs que vous souhaitez tester.


To use the inline list, you simply need to specify the parameter name followed by the list of values enclosed in curly braces {} and separated by commas. For example, to test the parameter "id" with the values 1, 2, and 3, you would use the following syntax:

Pour utiliser la liste en ligne, vous devez simplement spécifier le nom du paramètre suivi de la liste de valeurs entre accolades {} et séparées par des virgules. Par exemple, pour tester le paramètre "id" avec les valeurs 1, 2 et 3, vous utiliseriez la syntaxe suivante :

wfuzz -u http://example.com/index.php?id={1,2,3}

This will send requests to the URL http://example.com/index.php?id=1, http://example.com/index.php?id=2, and http://example.com/index.php?id=3.

Cela enverra des requêtes aux URL http://example.com/index.php?id=1, http://example.com/index.php?id=2 et http://example.com/index.php?id=3.

$ wfuzz -z list,GET-HEAD-POST-TRACE-OPTIONS -X FUZZ http://testphp.vulnweb.com/

Bruteforce de répertoires et de fichiers


WFuzz

WFuzz est un outil de bruteforce très puissant qui peut être utilisé pour tester la sécurité des applications web. Il est capable de tester des répertoires et des fichiers en utilisant des listes de mots personnalisées pour trouver des pages cachées ou des fichiers sensibles.

Pour utiliser WFuzz, vous devez spécifier l'URL de la cible et la liste de mots à utiliser pour la bruteforce. WFuzz peut également être utilisé pour tester des paramètres de requête en utilisant des listes de valeurs personnalisées.

Voici un exemple de commande WFuzz pour tester les répertoires et les fichiers sur une cible :

wfuzz -c -z file,/path/to/wordlist.txt --hc 404 http://target.com/FUZZ

Dans cet exemple, WFuzz utilise le fichier /path/to/wordlist.txt pour tester les répertoires et les fichiers sur la cible http://target.com/. L'option --hc 404 indique à WFuzz d'ignorer les réponses HTTP avec le code d'erreur 404.

WFuzz peut également être utilisé pour tester les paramètres de requête en utilisant l'option -d pour spécifier les données de requête et l'option -z pour spécifier les listes de valeurs à tester.

DirBuster

DirBuster est un autre outil de bruteforce de répertoires et de fichiers qui peut être utilisé pour tester la sécurité des applications web. Il est capable de tester des répertoires et des fichiers en utilisant des listes de mots personnalisées pour trouver des pages cachées ou des fichiers sensibles.

Pour utiliser DirBuster, vous devez spécifier l'URL de la cible et la liste de mots à utiliser pour la bruteforce. DirBuster peut également être utilisé pour tester des paramètres de requête en utilisant des listes de valeurs personnalisées.

Voici un exemple de configuration DirBuster pour tester les répertoires et les fichiers sur une cible :

DirBuster Example

Dans cet exemple, DirBuster utilise le fichier /path/to/wordlist.txt pour tester les répertoires et les fichiers sur la cible http://target.com/. L'option Follow Redirects indique à DirBuster de suivre les redirections HTTP.

DirBuster peut également être utilisé pour tester les paramètres de requête en utilisant l'option Injection String pour spécifier les listes de valeurs à tester.

#Filter by whitelisting codes
wfuzz -c -z file,/usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt --sc 200,202,204,301,302,307,403 http://example.com/uploads/FUZZ

Outil pour contourner les sites Web

https://github.com/carlospolop/fuzzhttpbypass

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥