hacktricks/pentesting-web/web-tool-wfuzz.md

302 lines
18 KiB
Markdown
Raw Normal View History

2023-06-03 13:10:46 +00:00
# Outil Web - WFuzz
2022-04-28 16:01:33 +00:00
<details>
2023-04-25 18:35:28 +00:00
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
2022-04-28 16:01:33 +00:00
2023-06-03 13:10:46 +00:00
- Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
2022-04-28 16:01:33 +00:00
2023-06-03 13:10:46 +00:00
- Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
2022-04-28 16:01:33 +00:00
2023-06-03 13:10:46 +00:00
- Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
2022-04-28 16:01:33 +00:00
2023-06-03 13:10:46 +00:00
- **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
2022-04-28 16:01:33 +00:00
2023-06-03 13:10:46 +00:00
- **Partagez vos astuces de piratage en soumettant des PR au [repo hacktricks](https://github.com/carlospolop/hacktricks) et au [repo hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
2022-04-28 16:01:33 +00:00
</details>
2023-06-03 13:10:46 +00:00
Un outil pour FUZZ les applications web n'importe où.
2023-06-03 13:10:46 +00:00
> 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.
2022-08-07 12:55:22 +00:00
## Installation
2023-06-03 13:10:46 +00:00
Installé dans Kali
2023-06-03 13:10:46 +00:00
Github : [https://github.com/xmendez/wfuzz](https://github.com/xmendez/wfuzz)
2022-08-07 12:55:22 +00:00
```
pip install wfuzz
```
2023-06-03 13:10:46 +00:00
## Options de filtrage
```bash
--hs/ss "regex" #Hide/Show
#Simple example, match a string: "Invalid username"
#Regex example: "Invalid *"
--hc/sc CODE #Hide/Show by code in response
2022-08-07 12:55:22 +00:00
--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
```
2023-06-03 13:10:46 +00:00
## Options de sortie
```bash
wfuzz -e printers #Prints the available output formats
-f /tmp/output,csv #Saves the output in that location in csv format
```
2023-06-03 13:10:46 +00:00
### Options d'encodeurs
2023-06-03 13:10:46 +00:00
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 :
2023-06-03 13:10:46 +00:00
- **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.
```bash
wfuzz -e encoders #Prints the available encoders
#Examples: urlencode, md5, base64, hexlify, uri_hex, doble urlencode
```
2023-06-03 13:10:46 +00:00
Pour utiliser un encodeur, vous devez l'indiquer dans l'option **"-w"** ou **"-z"**.
2023-06-03 13:10:46 +00:00
Exemples :
2020-12-01 15:32:24 +00:00
```bash
-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
```
2023-06-03 13:10:46 +00:00
## Fiche de référence
2023-06-03 13:10:46 +00:00
### Bruteforce de formulaire de connexion
2023-06-03 13:10:46 +00:00
#### **POST, Liste unique, filtre de chaîne (caché)**
```bash
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
```
2023-06-03 13:10:46 +00:00
#### **POST, 2 listes, code de filtre (montrer)**
2023-06-03 13:10:46 +00:00
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.
2023-06-03 13:10:46 +00:00
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.
```bash
2020-12-01 15:37:13 +00:00
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
```
2023-06-03 13:10:46 +00:00
#### **GET, 2 listes, filtre de chaîne (show), proxy, cookies**
2023-06-03 13:10:46 +00:00
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.
2023-06-03 13:10:46 +00:00
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"
2020-12-01 15:55:38 +00:00
```bash
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"
```
2023-06-03 13:10:46 +00:00
### Bruteforce de répertoires/Bruteforce RESTful
[Liste de mots de passe de paramètres Arjun](https://raw.githubusercontent.com/s0md3v/Arjun/master/arjun/db/params.txt)
```
wfuzz -c -w /tmp/tmp/params.txt --hc 404 https://domain.com/api/FUZZ
```
### Brute-Force des Paramètres de Chemin
2023-06-03 13:10:46 +00:00
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.
2023-06-03 13:10:46 +00:00
Wfuzz peut être utilisé pour effectuer une attaque de brute-force sur les paramètres de chemin en utilisant la syntaxe suivante :
2022-08-07 12:55:22 +00:00
```
2023-06-03 13:10:46 +00:00
wfuzz -c -z file,/path/to/wordlist.txt http://example.com/FUZZ
```
2023-06-03 13:10:46 +00:00
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.
2020-12-01 15:55:38 +00:00
2023-06-03 13:10:46 +00:00
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é.
2020-12-01 15:55:38 +00:00
```bash
wfuzz -c -w ~/git/Arjun/db/params.txt --hw 11 'http://example.com/path%3BFUZZ=FUZZ'
```
2023-06-03 13:10:46 +00:00
### Authentification d'en-tête
2020-12-01 15:55:38 +00:00
2023-06-03 13:10:46 +00:00
#### **Basique, 2 listes, chaîne de filtre (show), proxy**
2020-12-11 18:40:49 +00:00
```bash
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"
```
2023-06-03 13:10:46 +00:00
#### **NTLM, 2 listes, chaîne de filtre (show), proxy**
2023-06-03 13:10:46 +00:00
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.
2023-06-03 13:10:46 +00:00
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.
2020-12-11 18:40:49 +00:00
```bash
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"
```
2023-06-03 13:10:46 +00:00
### Bruteforce de Cookie/Header (brute vhost)
2023-06-03 13:10:46 +00:00
#### **Cookie, code de filtre (afficher), proxy**
2020-12-11 18:40:49 +00:00
```bash
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"
```
2023-06-03 13:10:46 +00:00
#### **User-Agent, code de filtre (masquer), proxy**
2023-06-03 13:10:46 +00:00
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é.
2023-06-03 13:10:46 +00:00
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.
2020-12-11 18:40:49 +00:00
```bash
wfuzz -c -w user-agents.txt -p 127.0.0.1:8080:HTTP --ss "Welcome " -H "User-Agent: FUZZ" "http://example.com/index.php"
```
2023-06-03 13:10:46 +00:00
#### **Hôte**
2020-12-11 18:40:49 +00:00
```bash
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
```
2023-06-03 13:10:46 +00:00
#### **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.
2023-06-03 13:10:46 +00:00
##### **Syntaxe**
2023-06-03 13:10:46 +00:00
```
wfuzz -c -z file,<http_methods_file> --hc <response_code> --hc-r <http_method>:<response_code> <url>
```
##### **Exemple**
2023-06-03 13:10:46 +00:00
```
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.
2020-12-11 18:40:49 +00:00
```bash
wfuzz -c -w methods.txt -p 127.0.0.1:8080:HTTP --sc 200 -X FUZZ "http://example.com/index.php"
```
2023-06-03 13:10:46 +00:00
#### **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.
---
2023-06-03 13:10:46 +00:00
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}
```
2023-06-03 13:10:46 +00:00
---
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.
2020-12-11 18:40:49 +00:00
```bash
$ wfuzz -z list,GET-HEAD-POST-TRACE-OPTIONS -X FUZZ http://testphp.vulnweb.com/
```
2023-06-03 13:10:46 +00:00
### 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.
2023-06-03 13:10:46 +00:00
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.
2023-06-03 13:10:46 +00:00
Voici un exemple de configuration DirBuster pour tester les répertoires et les fichiers sur une cible :
![DirBuster Example](https://raw.githubusercontent.com/Hackplayers/hackplayers.github.io/master/_posts/dirbuster/dirbuster1.png)
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.
2020-12-01 15:55:38 +00:00
```bash
#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
```
2023-06-03 13:10:46 +00:00
## Outil pour contourner les sites Web
[https://github.com/carlospolop/fuzzhttpbypass](https://github.com/carlospolop/fuzzhttpbypass)
2022-04-28 16:01:33 +00:00
<details>
2023-04-25 18:35:28 +00:00
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
2022-04-28 16:01:33 +00:00
2023-06-03 13:10:46 +00:00
- Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
2022-04-28 16:01:33 +00:00
2023-06-03 13:10:46 +00:00
- Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
2022-04-28 16:01:33 +00:00
2023-06-03 13:10:46 +00:00
- Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
2022-04-28 16:01:33 +00:00
2023-06-03 13:10:46 +00:00
- **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
2022-04-28 16:01:33 +00:00
2023-06-03 13:10:46 +00:00
- **Partagez vos astuces de piratage en soumettant des PR au [repo hacktricks](https://github.com/carlospolop/hacktricks) et au [repo hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
2022-04-28 16:01:33 +00:00
</details>