mirror of
https://github.com/carlospolop/hacktricks
synced 2024-12-12 22:33:13 +00:00
301 lines
18 KiB
Markdown
301 lines
18 KiB
Markdown
# Outil Web - WFuzz
|
|
|
|
<details>
|
|
|
|
<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>
|
|
|
|
- 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) !
|
|
|
|
- Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
|
|
|
- Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
|
|
|
- **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)**.**
|
|
|
|
- **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)**.
|
|
|
|
</details>
|
|
|
|
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](https://github.com/xmendez/wfuzz)
|
|
```
|
|
pip install wfuzz
|
|
```
|
|
## 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
|
|
--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
|
|
```bash
|
|
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.
|
|
```bash
|
|
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 :
|
|
```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
|
|
```
|
|
## Fiche de référence
|
|
|
|
### Bruteforce de formulaire de connexion
|
|
|
|
#### **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
|
|
```
|
|
#### **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.
|
|
```bash
|
|
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"
|
|
```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"
|
|
```
|
|
### 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
|
|
|
|
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é.
|
|
```bash
|
|
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**
|
|
```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"
|
|
```
|
|
#### **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.
|
|
```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"
|
|
```
|
|
### Bruteforce de Cookie/Header (brute vhost)
|
|
|
|
#### **Cookie, code de filtre (afficher), proxy**
|
|
```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"
|
|
```
|
|
#### **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.
|
|
```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"
|
|
```
|
|
#### **Hôte**
|
|
```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
|
|
```
|
|
#### **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.
|
|
```bash
|
|
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.
|
|
```bash
|
|
$ 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](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.
|
|
```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
|
|
```
|
|
## Outil pour contourner les sites Web
|
|
|
|
[https://github.com/carlospolop/fuzzhttpbypass](https://github.com/carlospolop/fuzzhttpbypass)
|
|
|
|
<details>
|
|
|
|
<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>
|
|
|
|
- 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) !
|
|
|
|
- Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
|
|
|
- Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
|
|
|
- **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)**.**
|
|
|
|
- **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)**.
|
|
|
|
</details>
|