
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.

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 ffufoppure
-
Se sei su Windows con Winget, ffuf può essere installato con:
winget install ffuf.ffufoppure
-
Se sei su macOS con homebrew, ffuf può essere installato con:
brew install ffufoppure
-
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
- Ffuf dipende da Go 1.20 o superiore.
- 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
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)
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

