Torna agli aggiornamenti
New releaseJul 28, 2026

ffuf v2.2.1

Web fuzzer ad alte prestazioni per la scoperta di contenuti, l'enumerazione di virtual host e il fuzzing dei parametri. Supporta scansione ricorsiva, modalità multi-wordlist e configurazione in tempo reale di filtri/matcher.

Condividi

ffuf mascot

ffuf - Fuzz Faster U Fool

Un veloce web fuzzer scritto in Go.

Installazione

  • Scarica un binario precompilato dalla pagina delle release, estrai ed esegui!

    oppure

  • Se sei su Windows con Scoop, ffuf può essere installato con: scoop install ffuf

    oppure

  • Se sei su Windows con Winget, ffuf può essere installato con: winget install ffuf.ffuf

    oppure

  • Se sei su macOS con homebrew, ffuf può essere installato con: brew install ffuf

    oppure

  • Se hai un compilatore Go recente installato: go install github.com/ffuf/ffuf/v2@latest (lo stesso comando funziona per l'aggiornamento)

    oppure

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

  1. Ffuf dipende da Go 1.20 o superiore.
  2. Una build Go da un checkout mostra git-<date>-<commit> invece del tag. Una build locale non è una release ufficiale anche quando ci si trova su un tag, e le informazioni di build incorporate di Go ci danno il commit ma non il nome del tag — quindi mostriamo il commit esatto da cui è stato costruito. I binari versionati autorevoli sono quelli sulla pagina delle release.

Esempio di utilizzo

Gli esempi di utilizzo qui sotto mostrano solo i compiti più semplici che puoi realizzare usando ffuf.

La documentazione più approfondita che illustra molte funzionalità con molti esempi è disponibile nel wiki di ffuf su https://github.com/ffuf/ffuf/wiki

Per una documentazione più estesa, con esempi di utilizzo reale e suggerimenti, assicurati di dare un'occhiata all'ottima guida: "Everything you need to know about FFUF" di Michael Skelton (@codingo).

Puoi anche esercitarti con le tue scansioni ffuf contro un host live con diverse lezioni e casi d'uso, localmente usando il container Docker https://github.com/adamtlangley/ffufme o contro la versione hosted live su http://ffuf.me creata da Adam Langley @adamtlangley.

Scoperta tipica di directory

asciicast

Utilizzando la parola chiave FUZZ alla fine dell'URL (-u):

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

Scoperta di virtual host (senza record DNS)

asciicast

Supponendo che la dimensione della risposta del virtualhost predefinito sia 4242 byte, possiamo filtrare tutte le risposte di quella dimensione (-fs 4242) mentre fuzziamo l'header Host:

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

Fuzzing di parametri GET

Il fuzzing dei nomi dei parametri GET è molto simile alla scoperta di directory e funziona definendo la parola chiave FUZZ come parte dell'URL. Questo assume anche una dimensione della risposta di 4242 byte per un nome di parametro GET non valido.

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

Se il nome del parametro è noto, i valori possono essere fuzzati allo stesso modo. Questo esempio assume un valore di parametro errato che restituisce codice di risposta HTTP 401.

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

Fuzzing di dati POST

Questa è un'operazione molto semplice, ancora una volta utilizzando la parola chiave FUZZ. Questo esempio fuzza solo una parte della richiesta POST. Stiamo di nuovo filtrando le risposte 401.

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

Tempo massimo di esecuzione

Se non vuoi che ffuf venga eseguito indefinitamente, puoi usare -maxtime. Questo ferma l'intero processo dopo un certo tempo (in secondi).

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

Quando si lavora con la ricorsione, puoi controllare il maxtime per job usando -maxtime-job. Questo fermerà il job corrente dopo un certo tempo (in secondi) e continuerà con il successivo. Nuovi job vengono creati quando la funzionalità di ricorsione rileva una sottodirectory.

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

È anche possibile combinare entrambi i flag per limitare il tempo massimo di esecuzione per job e il tempo complessivo. Se non usi la ricorsione, entrambi i flag si comportano allo stesso modo.

Utilizzo di un mutator esterno per produrre casi di test

Per questo esempio, fuzzeremo dati JSON inviati tramite POST. Radamsa viene usato come mutator.

Quando si usa --input-cmd, ffuf mostrerà le corrispondenze come posizioni. Questo stesso valore di posizione sarà disponibile per il chiamato come variabile d'ambiente $FFUF_NUM. Useremo questo valore di posizione come seed per il mutator. I file example1.txt e example2.txt contengono payload JSON validi. Stiamo facendo match di tutte le risposte, ma filtrando il codice di risposta 400 - Bad request:

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

Ovviamente non è molto efficiente chiamare il mutator per ogni payload, quindi possiamo anche pre-generare i payload, sempre usando Radamsa come esempio:

# 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

File di configurazione

Quando si esegue ffuf, controlla prima se esiste un file di configurazione predefinito. Il percorso predefinito per un file ffufrc è $XDG_CONFIG_HOME/ffuf/ffufrc. Puoi configurare una o più opzioni in questo file, e verranno applicate su ogni job ffuf successivo. Un esempio di file ffufrc si trova qui.

Una descrizione più dettagliata sulle posizioni dei file di configurazione si trova nel wiki: https://github.com/ffuf/ffuf/wiki/Configuration

Categorie