Installazione

git clone <https://github.com/ffuf/ffuf>
cd ffuf
go get
go build

Raccolta di dizionari utili durante le fasi di scoperta e penetrazione dei servizi (git clone):

Comandi

Individuazione nuove funzionalità


Attacco a dizionario su nomi di pagine Web:

ffuf -w /path/to/SecLists/Discovery/Web-Content/raft-medium-files.txt:FUZZ 
-u <http://127.0.0.1:7777/FUZZ>
-fc 403

Attacco a dizionario su nomi di directory:

ffuf -w /path/to/SecLists/Discovery/Web-Content/raft-medium-directories.txt:FUZZ
-u <http://127.0.0.1:7777/FUZZ>
-fc 403

Uguale a prima ma con dizionario contenente nomi di directory.

Dizionario più grande:

ffuf -w /path/to/SecLists/Discovery/Web-Content/raft-large-files.txt:FUZZ
-u <http://127.0.0.1:7777/commandexec/FUZZ>
-fc 403

Trova la seguente nuova funzionalità: http://127.0.0.1:7777/commandexec/example1.php

Si crea un dizionario personalizzato d.txt per tentare di scoprire funzionalità simili. Per ogni riga si scrive example1.php, example2.php, …, example9.php.

ffuf -w /path/to/d.txt:FUZZ
-u <http://127.0.0.1:7777/commandexec/FUZZ>
-fc 403

Una volta individuata una funzionalità, si ricercano possibili parametri validi. Esistono due strategie

  1. Si richiede l’URL senza passare alcun parametro nella speranza che il messaggio di errore evidenzi il parametro mancante

    Si utilizza il client HTTP da linea di comando curl:

    	curl <http://127.0.0.1:7777/commandexec/example1.php>
    

    Si scopre dal messaggio di errore che viene richiesto un parametro ip.

  2. Si effettua il fuzzing sul nome del parametro

    ffuf -w /path/to/SecLists/Discovery/Web-Content/burp-parameter-names.txt:FUZZ
    -u <http://127.0.0.1:7777/commandexec/example1.php?FUZZ=value>
    -fc 403
    

    Il valore del parametro è irrilevante.

    La maggior parte dei risultati ha dimensione 1534 byte. A tale dimensioni si ipotizza possa corrispondere un messaggio di errore tipo “parametro ip mancante”. Si omettono tali risultati:

    ffuf -w /path/to/SecLists/Discovery/Web-Content/burp-parameter-names.txt:FUZZ
    -u <http://127.0.0.1:7777/commandexec/example1.php?FUZZ=value>
    -fs 1534
    

Classificazione degli input e output


Per trovare un distinguisher tra input validi e invalidi del parametro ip, si costruisce un dizionario ip.txt con una serie di input validi e invalidi. Si esegue il fuzzing con tale dizionario:

ffuf -w /path/to/ip.txt:FUZZ -u <http://127.0.0.1:7777/commandexec/example1.php?ip=FUZZ>

Il codice di stato è sempre 200 → Non si può usare come distinguisher.

Le dimensioni delle risposte HTTP variano → Candidato distinguisher.

Si produce un istogramma delle dimensioni delle risposte HTTP (script plot-sizes1.py) e si verifica l’effettiva separazione.

Verificando l’output si nota che un input valido genera un div HTML grigio con l’output prodotto, in caso di input invalido invece si ha un div HTML grigio vuoto. → Distinguisher.

Lo stesso processo è applicabile alla ricerca di un distinguisher per input leciti e illeciti. Si costruisce un dizionario payload.txt, con una serie di input leciti e illeciti.