Zurück zu den Updates
New releaseJul 28, 2026

ffuf v2.2.1

Schneller Web-Fuzzer, geschrieben in Go

Teilen

ffuf Maskottchen

ffuf - Fuzz Faster U Fool

Ein schneller Web-Fuzzer, geschrieben in Go.

Installation

  • Lade eine vorkompilierte Binärdatei von der Releases-Seite herunter, entpacke sie und führe sie aus!

    oder

  • Wenn du Windows mit Scoop verwendest, kann ffuf mit folgendem Befehl installiert werden: scoop install ffuf

    oder

  • Wenn du Windows mit Winget verwendest, kann ffuf mit folgendem Befehl installiert werden: winget install ffuf.ffuf

    oder

  • Wenn du macOS mit homebrew verwendest, kann ffuf mit folgendem Befehl installiert werden: brew install ffuf

    oder

  • Wenn du einen aktuellen Go-Compiler installiert hast: go install github.com/ffuf/ffuf/v2@latest (derselbe Befehl funktioniert auch zum Aktualisieren)

    oder

  • git clone https://github.com/ffuf/ffuf ; cd ffuf ; go get ; go build

  1. Ffuf benötigt Go 1.20 oder höher.
  2. Ein Go-Build aus einem Checkout zeigt git-<date>-<commit> anstelle des Tags. Ein lokaler Build ist keine offizielle Release-Version, selbst wenn du auf einem Tag sitzt, und die eingebetteten Build-Informationen von Go liefern uns den Commit, aber nicht den Tag-Namen – daher zeigen wir den genauen Commit an, aus dem er erstellt wurde. Die maßgeblichen versionierten Binärdateien sind die auf der Releases-Seite.

Beispielverwendung

Die folgenden Verwendungsbeispiele zeigen nur die einfachsten Aufgaben, die du mit ffuf erledigen kannst.

Ausführlichere Dokumentation, die viele Funktionen mit zahlreichen Beispielen behandelt, ist im ffuf-Wiki unter https://github.com/ffuf/ffuf/wiki verfügbar.

Für eine umfangreichere Dokumentation mit realen Anwendungsbeispielen und Tipps solltest du dir unbedingt den großartigen Leitfaden ansehen: „Everything you need to know about FFUF" von Michael Skelton (@codingo).

Du kannst deine ffuf-Scans auch gegen einen Live-Host mit verschiedenen Lektionen und Anwendungsfällen üben, entweder lokal mit dem Docker-Container https://github.com/adamtlangley/ffufme oder gegen die gehostete Live-Version unter http://ffuf.me, erstellt von Adam Langley @adamtlangley.

Typische Verzeichnisermittlung

asciicast

Indem du das FUZZ-Schlüsselwort am Ende der URL (-u) verwendest:

ffuf -w /path/to/wordlist -u https://target/FUZZ

Vhost-Ermittlung (ohne DNS-Einträge)

asciicast

Angenommen, die Standardantwortgröße des virtuellen Hosts beträgt 4242 Bytes, können wir alle Antworten dieser Größe (-fs 4242) herausfiltern, während wir den Host-Header fuzzen:

ffuf -w /path/to/vhost/wordlist -u https://target -H "Host: FUZZ" -fs 4242

GET-Parameter-Fuzzing

Das Fuzzing von GET-Parameternamen ist der Verzeichnisermittlung sehr ähnlich und funktioniert, indem das FUZZ-Schlüsselwort als Teil der URL definiert wird. Dabei wird ebenfalls eine Antwortgröße von 4242 Bytes für einen ungültigen GET-Parameternamen angenommen.

ffuf -w /path/to/paramnames.txt -u https://target/script.php?FUZZ=test_value -fs 4242

Wenn der Parametername bekannt ist, können die Werte auf dieselbe Weise gefuzzt werden. Dieses Beispiel geht von einem falschen Parameterwert aus, der den HTTP-Antwortcode 401 zurückgibt.

ffuf -w /path/to/values.txt -u https://target/script.php?valid_name=FUZZ -fc 401

POST-Daten-Fuzzing

Dies ist eine sehr einfache Operation, wiederum mit dem FUZZ-Schlüsselwort. Dieses Beispiel fuzzt nur einen Teil der POST-Anfrage. Wir filtern erneut die 401-Antworten heraus.

ffuf -w /path/to/postdata.txt -X POST -d "username=admin\&password=FUZZ" -u https://target/login.php -fc 401

Maximale Ausführungszeit

Wenn du nicht möchtest, dass ffuf unbegrenzt läuft, kannst du -maxtime verwenden. Dies stoppt den gesamten Prozess nach einer bestimmten Zeit (in Sekunden).

ffuf -w /path/to/wordlist -u https://target/FUZZ -maxtime 60

Wenn du mit Rekursion arbeitest, kannst du die Maximalzeit pro Job mit -maxtime-job steuern. Dadurch wird der aktuelle Job nach einer bestimmten Zeit (in Sekunden) gestoppt und mit dem nächsten fortgefahren. Neue Jobs werden erstellt, wenn die Rekursionsfunktion ein Unterverzeichnis erkennt.

ffuf -w /path/to/wordlist -u https://target/FUZZ -maxtime-job 60 -recursion -recursion-depth 2

Es ist auch möglich, beide Flags zu kombinieren, um sowohl die maximale Ausführungszeit pro Job als auch die Gesamtausführungszeit zu begrenzen. Wenn du keine Rekursion verwendest, verhalten sich beide Flags gleich.

Verwendung eines externen Mutators zur Erzeugung von Testfällen

Für dieses Beispiel fuzzen wir JSON-Daten, die per POST gesendet werden. Radamsa wird als Mutator verwendet.

Wenn --input-cmd verwendet wird, zeigt ffuf Übereinstimmungen als ihre Position an. Dieser Positionswert steht dem Aufgerufenen als Umgebungsvariable $FFUF_NUM zur Verfügung. Wir verwenden diesen Positionswert als Seed für den Mutator. Die Dateien example1.txt und example2.txt enthalten gültige JSON-Payloads. Wir matchen alle Antworten, filtern aber den Antwortcode 400 - Bad request heraus:

ffuf --input-cmd 'radamsa --seed $FFUF_NUM example1.txt example2.txt' -H "Content-Type: application/json" -X POST -u https://ffuf.io.fi/FUZZ -mc all -fc 400

Es ist natürlich nicht sehr effizient, den Mutator für jede Payload aufzurufen. Daher können wir die Payloads auch vorab generieren, wiederum mit Radamsa als Beispiel:

# Generate 1000 example payloads
radamsa -n 1000 -o %n.txt example1.txt example2.txt

# This results into files 1.txt ... 1000.txt
# Now we can just read the payload data in a loop from file for ffuf

ffuf --input-cmd 'cat $FFUF_NUM.txt' -H "Content-Type: application/json" -X POST -u https://ffuf.io.fi/ -mc all -fc 400

Konfigurationsdateien

Wenn ffuf ausgeführt wird, prüft es zuerst, ob eine Standardkonfigurationsdatei existiert. Der Standardpfad für eine ffufrc-Datei ist $XDG_CONFIG_HOME/ffuf/ffufrc. Du kannst eine oder mehrere Optionen in dieser Datei konfigurieren, und sie werden bei jedem nachfolgenden ffuf-Job angewendet. Ein Beispiel für eine ffufrc-Datei findest du hier.

Kategorien