hacktricks/pentesting-web/web-tool-wfuzz.md
2024-02-10 15:36:32 +00:00

21 KiB

Web-Tool - WFuzz

Lernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Ein Tool zum FUZZEN von Webanwendungen überall.

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

pip install wfuzz

Filteroptionen

-c, --code <CODES>

Filtert die Antwortcodes, die als gültig betrachtet werden sollen. Mehrere Codes können durch Kommas getrennt angegeben werden.

-w, --wordlist <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 <REGEX>

Filtert die Antwortkörper, um nur diejenigen zu behalten, die mit einem bestimmten regulären Ausdruck übereinstimmen.

-s, --size <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 <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 <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 <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 <GREP>

Filtert die Antwortkörper, um nur diejenigen zu behalten, die mit einem bestimmten regulären Ausdruck übereinstimmen.

--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.

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.

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:

-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)

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)

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.

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,<wordlist> -u <target_url>
  • -c gibt an, dass Wfuzz die Antwortcodes überprüfen soll.
  • -z file,<wordlist> gibt an, dass Wfuzz eine Wortliste verwenden soll.
  • -u <target_url> 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,<wordlist1> -z file,<wordlist2> -u <target_url>
Filterzeichenfolge anzeigen

Um nur die Antworten anzuzeigen, die eine bestimmte Zeichenfolge enthalten, verwenden Sie die Option -f:

wfuzz -c -z file,<wordlist> -u <target_url> -f <filter_string>
Proxy verwenden

Wenn Sie eine Proxy-Verbindung verwenden möchten, geben Sie die Proxy-URL mit der Option -x an:

wfuzz -c -z file,<wordlist> -u <target_url> -x <proxy_url>
Cookies

Um Cookies in Ihre GET-Anfrage einzufügen, verwenden Sie die Option -b:

wfuzz -c -z file,<wordlist> -u <target_url> -b "<cookie_string>"

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.

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

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.

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

Header-Authentifizierung

Basic, 2 Listen, Filterzeichenfolge (anzeigen), 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 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.

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, 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.

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

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:

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:

wfuzz -w <Pfad zur Datei> <Ziel-URL>

Ersetzen Sie <Pfad zur Datei> durch den tatsächlichen Pfad zur Datei mit den Verben und <Ziel-URL> 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.

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

$ 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
pip install wfuzz
Verwendung
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
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.

#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

Lernen Sie AWS-Hacking von Null auf Heldenniveau mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen: