# Web-Tool - WFuzz
Lernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert) !
Andere Möglichkeiten, HackTricks zu unterstützen:
* Wenn Sie Ihr **Unternehmen in HackTricks bewerben möchten** oder **HackTricks als PDF herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merchandise**](https://peass.creator-spring.com)
* Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **GitHub-Repositories** senden.
Ein Tool zum FUZZEN von Webanwendungen überall.
> [Wfuzz](https://github.com/xmendez/wfuzz) wurde entwickelt, um die Aufgabe bei der Bewertung von Webanwendungen zu erleichtern und basiert auf einem einfachen Konzept: Es ersetzt jede Verwendung des Schlüsselworts FUZZ durch den Wert einer bestimmten Nutzlast.
## Installation
In Kali installiert
Github: [https://github.com/xmendez/wfuzz](https://github.com/xmendez/wfuzz)
```
pip install wfuzz
```
## Filteroptionen
### -c, --code \
Filtert die Antwortcodes, die als gültig betrachtet werden sollen. Mehrere Codes können durch Kommas getrennt angegeben werden.
### -w, --wordlist \
Filtert die Antwortkörper, um nur diejenigen zu behalten, die ein bestimmtes Wort oder eine bestimmte Zeichenkette enthalten. Die Wortliste sollte in einer Datei mit einem Wort pro Zeile angegeben werden.
### -r, --regex \
Filtert die Antwortkörper, um nur diejenigen zu behalten, die mit einem bestimmten regulären Ausdruck übereinstimmen.
### -s, --size \
Filtert die Antwortkörper, um nur diejenigen zu behalten, die eine bestimmte Größe haben. Die Größe kann in Bytes (B), Kilobytes (K), Megabytes (M) oder Gigabytes (G) angegeben werden.
### -e, --exclude \
Schließt die Antwortcodes, Wörter, regulären Ausdrücke oder Größen aus, die nicht berücksichtigt werden sollen. Mehrere Werte können durch Kommas getrennt angegeben werden.
### -z, --status
Filtert die Antwortcodes, um nur diejenigen zu behalten, die einen bestimmten Status haben. Die möglichen Status sind: "success" (2xx), "redirect" (3xx), "client_error" (4xx) und "server_error" (5xx).
### -x, --redirect
Filtert die Antwortcodes, um nur diejenigen zu behalten, die eine Weiterleitung enthalten.
### -y, --unredirect
Filtert die Antwortcodes, um nur diejenigen zu behalten, die keine Weiterleitung enthalten.
### -t, --time \
Filtert die Antwortcodes, um nur diejenigen zu behalten, die eine bestimmte Antwortzeit haben. Die Zeit kann in Millisekunden (ms), Sekunden (s), Minuten (m) oder Stunden (h) angegeben werden.
### -d, --delay \
Filtert die Antwortcodes, um nur diejenigen zu behalten, die eine bestimmte Verzögerung haben. Die Verzögerung kann in Millisekunden (ms), Sekunden (s), Minuten (m) oder Stunden (h) angegeben werden.
### -g, --grep \
Filtert die Antwortkörper, um nur diejenigen zu behalten, die mit einem bestimmten regulären Ausdruck übereinstimmen.
```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
```
## Ausgabeoptionen
Wfuzz provides several options to control the output format and verbosity of the results. These options can be useful for customizing the output to suit your needs.
### Quiet mode
The `-q` or `--quiet` option can be used to suppress all output except for the final results. This is useful when you only want to see the final output and not the intermediate progress or other information.
### Verbose mode
On the other hand, the `-v` or `--verbose` option can be used to increase the verbosity of the output. This will provide more detailed information about the requests and responses, including headers and status codes.
### Output format
Wfuzz supports multiple output formats, including plain text, JSON, XML, and HTML. The `-o` or `--output` option can be used to specify the desired output format. For example, `-o json` will generate the output in JSON format.
### Output file
By default, Wfuzz prints the output to the console. However, you can use the `-o` or `--output` option followed by a file name to save the output to a file instead. For example, `-o output.txt` will save the output to a file named "output.txt".
### Output coloring
Wfuzz also supports output coloring to make the results more visually appealing. The `--output-color` option can be used to enable or disable output coloring. By default, output coloring is enabled.
### Output filtering
If you only want to see specific results, you can use the `--filter` option to filter the output based on specific criteria. For example, `--filter "status_code=200"` will only display the results with a status code of 200.
These output options can be combined to customize the output according to your requirements.
```bash
wfuzz -e printers #Prints the available output formats
-f /tmp/output,csv #Saves the output in that location in csv format
```
### Encoder-Optionen
#### URL-Encoding
URL-Encoding ist eine Methode, um Sonderzeichen in einer URL zu kodieren, damit sie sicher übertragen werden können. Es ersetzt Sonderzeichen durch eine Kombination aus Prozentzeichen (%) und Hexadezimalwerten. Zum Beispiel wird das Leerzeichen durch "%20" ersetzt.
#### HTML-Encoding
HTML-Encoding wird verwendet, um Sonderzeichen in HTML-Dokumenten zu kodieren, um sicherzustellen, dass sie korrekt angezeigt werden. Es ersetzt Sonderzeichen durch eine Kombination aus dem Ampersand-Zeichen (&) und einem speziellen Code. Zum Beispiel wird das Zeichen "<" durch "<" ersetzt.
#### Base64-Encoding
Base64-Encoding ist eine Methode, um binäre Daten in eine ASCII-Zeichenkette zu kodieren. Es wird häufig verwendet, um Daten zu übertragen oder in Textformaten zu speichern, die nur ASCII-Zeichen akzeptieren. Base64-Encoding verwendet eine Tabelle von 64 Zeichen, um die binären Daten zu repräsentieren.
#### Hex-Encoding
Hex-Encoding ist eine Methode, um binäre Daten in eine Zeichenkette von Hexadezimalzahlen zu kodieren. Jedes Byte der binären Daten wird durch zwei Hexadezimalzahlen dargestellt. Zum Beispiel wird der Wert 255 als "FF" kodiert.
#### Unicode-Encoding
Unicode-Encoding ist eine Methode, um Zeichen in Unicode-Zeichen zu kodieren. Es verwendet eine Kombination aus dem Präfix "\u" und einer Hexadezimalzahl, um das Unicode-Zeichen darzustellen. Zum Beispiel wird das Zeichen "A" als "\u0041" kodiert.
#### URL-Unicode-Encoding
URL-Unicode-Encoding ist eine Kombination aus URL-Encoding und Unicode-Encoding. Es kodiert Sonderzeichen in einer URL mit Unicode-Zeichen. Zum Beispiel wird das Zeichen "ä" als "%C3%A4" kodiert.
#### HTML-Unicode-Encoding
HTML-Unicode-Encoding ist eine Kombination aus HTML-Encoding und Unicode-Encoding. Es kodiert Sonderzeichen in HTML-Dokumenten mit Unicode-Zeichen. Zum Beispiel wird das Zeichen "ä" als "ä" kodiert.
```bash
wfuzz -e encoders #Prints the available encoders
#Examples: urlencode, md5, base64, hexlify, uri_hex, doble urlencode
```
Um einen Encoder zu verwenden, müssen Sie ihn in der Option **"-w"** oder **"-z"** angeben.
Beispiele:
```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
```
## Spickzettel
### Anmeldeformular-Bruteforce
#### **POST, Einzelne Liste, Filterzeichenfolge (verstecken)**
```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 Listen, Filtercode (anzeigen)**
```plaintext
wfuzz -c -z file,wordlist/general/common.txt --hc 404 http://example.com/FUZZ
```
Dieses Beispiel zeigt, wie Sie den `wfuzz`-Befehl verwenden, um eine POST-Anforderung an die URL `http://example.com/FUZZ` zu senden. Der Befehl verwendet eine Wortliste (`wordlist/general/common.txt`), um den Platzhalter `FUZZ` zu ersetzen. Der `-c`-Schalter gibt an, dass der Inhalt der Antwort überprüft werden soll, und der `--hc 404`-Schalter gibt an, dass nur Antworten mit dem HTTP-Statuscode 404 (Seite nicht gefunden) ignoriert werden sollen.
```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 Listen, Filterzeichenfolge (anzeigen), Proxy, Cookies**
Wfuzz ist ein flexibles Web-Anwendungstestwerkzeug, das zum Testen von Webanwendungen verwendet wird. Es kann verwendet werden, um verschiedene Angriffe wie Brute-Force, Fuzzing und Filterung durchzuführen. In diesem Abschnitt werden wir uns auf die Verwendung von Wfuzz für GET-Anfragen konzentrieren.
##### **GET-Anfragen**
Um eine GET-Anfrage mit Wfuzz durchzuführen, verwenden Sie den folgenden Befehl:
```
wfuzz -c -z file, -u
```
- `-c` gibt an, dass Wfuzz die Antwortcodes überprüfen soll.
- `-z file,` gibt an, dass Wfuzz eine Wortliste verwenden soll.
- `-u ` gibt die Ziel-URL an.
##### **2 Listen**
Manchmal möchten Sie zwei verschiedene Wortlisten verwenden, um eine GET-Anfrage durchzuführen. Sie können dies tun, indem Sie die Option `-z` zweimal verwenden:
```
wfuzz -c -z file, -z file, -u
```
##### **Filterzeichenfolge anzeigen**
Um nur die Antworten anzuzeigen, die eine bestimmte Zeichenfolge enthalten, verwenden Sie die Option `-f`:
```
wfuzz -c -z file, -u -f
```
##### **Proxy verwenden**
Wenn Sie eine Proxy-Verbindung verwenden möchten, geben Sie die Proxy-URL mit der Option `-x` an:
```
wfuzz -c -z file, -u -x
```
##### **Cookies**
Um Cookies in Ihre GET-Anfrage einzufügen, verwenden Sie die Option `-b`:
```
wfuzz -c -z file, -u -b ""
```
Das waren die grundlegenden Funktionen von Wfuzz für GET-Anfragen. Sie können diese Funktionen kombinieren und anpassen, um Ihre spezifischen Anforderungen zu erfüllen.
```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 Verzeichnis/RESTful Bruteforce
[Arjun Parameter-Wortliste](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
```
### Pfadparameter BF
Path-Parameter-Brute-Force (BF) ist eine Technik, bei der ein Angreifer versucht, gültige Werte für Pfadparameter zu erraten, um auf versteckte Ressourcen oder Funktionen zuzugreifen. Diese Technik wird häufig verwendet, um Sicherheitslücken in Webanwendungen zu identifizieren.
Der BF-Angriff erfolgt, indem der Angreifer eine Liste möglicher Werte für den Pfadparameter erstellt und diese nacheinander ausprobiert. Wenn ein gültiger Wert gefunden wird, kann der Angreifer auf die entsprechende Ressource oder Funktion zugreifen.
Um den BF-Angriff durchzuführen, können verschiedene Tools wie WFuzz verwendet werden. WFuzz ist ein leistungsstarkes Werkzeug, das speziell für das Brute-Forcing von Webanwendungen entwickelt wurde. Es ermöglicht dem Angreifer, benutzerdefinierte Wörterbücher zu erstellen und verschiedene Angriffsvektoren auszuprobieren.
Es ist wichtig zu beachten, dass der BF-Angriff eine illegale Aktivität darstellt und nur mit ausdrücklicher Genehmigung des Eigentümers der Webanwendung durchgeführt werden sollte.
```bash
wfuzz -c -w ~/git/Arjun/db/params.txt --hw 11 'http://example.com/path%3BFUZZ=FUZZ'
```
### Header-Authentifizierung
#### **Basic, 2 Listen, Filterzeichenfolge (anzeigen), 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 Listen, Filterzeichenfolge (anzeigen), Proxy**
---
##### **NTLM**
NTLM (NT LAN Manager) ist ein Authentifizierungsprotokoll, das von Microsoft entwickelt wurde und in Windows-Betriebssystemen verwendet wird. Es wird häufig für die Authentifizierung von Benutzern in Netzwerken verwendet.
##### **2 Listen**
Die Verwendung von 2 Listen in WFuzz ermöglicht es uns, zwei verschiedene Wörterbuchdateien zu verwenden, um Angriffe durchzuführen. Dies kann nützlich sein, um verschiedene Benutzernamen und Passwörter auszuprobieren.
##### **Filterzeichenfolge (anzeigen)**
Die Filterzeichenfolge in WFuzz ermöglicht es uns, die Ausgabe zu filtern und nur die Ergebnisse anzuzeigen, die der angegebenen Zeichenfolge entsprechen. Dies kann hilfreich sein, um die relevanten Ergebnisse zu identifizieren und den Überblick zu behalten.
##### **Proxy**
Ein Proxy ist ein Vermittler zwischen einem Client und einem Server. In WFuzz können wir einen Proxy verwenden, um den gesamten Datenverkehr zwischen dem Client und dem Server abzufangen und zu überwachen. Dies kann uns helfen, den Datenverkehr zu analysieren und potenzielle Schwachstellen zu identifizieren.
```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"
```
### Cookie/Header-Bruteforce (vhost brute)
#### **Cookie, Filter-Code (anzeigen), 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, Filtercode (verstecken), Proxy**
Ein User-Agent ist eine Zeichenfolge, die von einem Webbrowser oder einem anderen Client verwendet wird, um sich gegenüber einem Webserver zu identifizieren. Es ist möglich, den User-Agent zu ändern, um sich als ein anderer Client auszugeben und so bestimmte Einschränkungen zu umgehen.
Ein Filtercode ist ein Stück Code, der verwendet wird, um bestimmte Inhalte zu filtern oder zu verbergen. Dies kann nützlich sein, um sensible Informationen zu schützen oder unerwünschte Inhalte auszublenden.
Ein Proxy ist ein Server, der als Vermittler zwischen einem Client und einem Zielserver fungiert. Durch die Verwendung eines Proxys kann der Datenverkehr umgeleitet und die eigene IP-Adresse verborgen werden. Dies kann hilfreich sein, um die Anonymität zu wahren oder auf blockierte Inhalte zuzugreifen.
```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"
```
#### **Host**
```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
```
#### **Verwendung einer Datei**
Wenn Sie eine große Anzahl von HTTP-Verben (Methoden) bruteforcen möchten, können Sie die Datei-Methode verwenden. Diese Methode ermöglicht es Ihnen, eine Datei mit einer Liste von Verben zu erstellen und diese dann mit dem Tool wfuzz zu verwenden.
Um die Datei-Methode zu verwenden, müssen Sie zuerst eine Textdatei erstellen und die gewünschten Verben in separate Zeilen schreiben. Speichern Sie die Datei und geben Sie den Pfad zur Datei als Argument an, wenn Sie wfuzz ausführen.
Hier ist ein Beispiel für eine solche Datei:
```plaintext
GET
POST
PUT
DELETE
```
Sie können die Datei mit beliebigen Verben anpassen, die Sie bruteforcen möchten. Stellen Sie sicher, dass jeder Verb in einer separaten Zeile steht.
Um die Datei-Methode mit wfuzz zu verwenden, verwenden Sie den folgenden Befehl:
```plaintext
wfuzz -w
```
Ersetzen Sie `` durch den tatsächlichen Pfad zur Datei mit den Verben und `` durch die URL des Ziels, auf das Sie die Verben bruteforcen möchten.
Das Tool wfuzz wird dann jeden Verb in der Datei nacheinander ausprobieren und die Antworten des Servers anzeigen.
```bash
wfuzz -c -w methods.txt -p 127.0.0.1:8080:HTTP --sc 200 -X FUZZ "http://example.com/index.php"
```
#### **Verwendung einer Inline-Liste**
```bash
$ wfuzz -z list,GET-HEAD-POST-TRACE-OPTIONS -X FUZZ http://testphp.vulnweb.com/
```
### Verzeichnis- und Dateibruteforce
Der Verzeichnis- und Dateibruteforce ist eine Technik, bei der ein Angreifer versucht, gültige Verzeichnisse und Dateien auf einer Website zu identifizieren, indem er systematisch verschiedene Kombinationen von Verzeichnis- und Dateinamen ausprobiert.
#### Werkzeug: wfuzz
`wfuzz` ist ein leistungsstarkes Werkzeug, das für den Verzeichnis- und Dateibruteforce verwendet werden kann. Es ermöglicht das Durchsuchen von Verzeichnissen und das Testen von Dateinamen auf einer Website.
##### Installation
```bash
pip install wfuzz
```
##### Verwendung
```bash
wfuzz -c -z file,/path/to/wordlist.txt http://example.com/FUZZ
```
- `-c` gibt an, dass wfuzz den HTTP-Statuscode überprüfen soll.
- `-z file` gibt an, dass wfuzz eine Wortliste aus einer Datei verwenden soll.
- `/path/to/wordlist.txt` ist der Pfad zur Wortliste, die verwendet werden soll.
- `http://example.com/FUZZ` ist die URL, bei der `FUZZ` durch die zu testenden Verzeichnis- oder Dateinamen ersetzt wird.
##### Beispiel
```bash
wfuzz -c -z file,/usr/share/wordlists/dirb/common.txt http://example.com/FUZZ
```
Dieses Beispiel verwendet die Wortliste `common.txt` aus dem Verzeichnis `/usr/share/wordlists/dirb/` und testet alle Verzeichnisse und Dateien auf `http://example.com/`. Der `-c`-Schalter überprüft den HTTP-Statuscode und gibt nur die Ergebnisse zurück, die einen gültigen Statuscode haben.
##### Ergebnisinterpretation
Die Ergebnisse von wfuzz werden in einem Format wie folgt angezeigt:
```
********************************************************
* Wfuzz 2.4.5 - The Web Fuzzer *
********************************************************
Target: http://example.com/FUZZ
Total requests: 4612
===================================================================
ID Response Lines Word Chars Payload
===================================================================
000000001: 200 1 L 4 W 33 Ch "admin"
000000002: 200 1 L 4 W 33 Ch "backup"
000000003: 404 0 L 0 W 0 Ch "config"
000000004: 200 1 L 4 W 33 Ch "index"
000000005: 200 1 L 4 W 33 Ch "login"
000000006: 200 1 L 4 W 33 Ch "test"
...
```
- `ID` ist die eindeutige ID des Requests.
- `Response` ist der HTTP-Statuscode der Antwort.
- `Lines` gibt die Anzahl der Zeilen in der Antwort an.
- `Word` gibt die Anzahl der Wörter in der Antwort an.
- `Chars` gibt die Anzahl der Zeichen in der Antwort an.
- `Payload` ist der getestete Verzeichnis- oder Dateiname.
Die Ergebnisse können verwendet werden, um gültige Verzeichnisse und Dateien auf der Website zu identifizieren, die möglicherweise anfällig für Angriffe sind.
```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
```
## Werkzeug zum Umgehen von Webseiten
[https://github.com/carlospolop/fuzzhttpbypass](https://github.com/carlospolop/fuzzhttpbypass)
Lernen Sie AWS-Hacking von Null auf Heldenniveau mit htARTE (HackTricks AWS Red Team Expert) !
Andere Möglichkeiten, HackTricks zu unterstützen:
* Wenn Sie Ihr **Unternehmen in HackTricks bewerben möchten** oder **HackTricks als PDF herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merchandise**](https://peass.creator-spring.com)
* Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repositories senden.