
Un rapido scanner per HTTP downgrade smuggling scritto in Go.
SmuggleFuzz, uno scanner di smuggling HTTP di downgrade configurabile e rapido. Consente agli utenti di personalizzare le liste di gadget, offrendo approfondimenti sulle cause degli attacchi di smuggling falliti. Sono convinto che molte vulnerabilità di smuggling basate su downgrade HTTP rimangano ancora scoperte. Sfortunatamente, molti individui interrompono la loro esplorazione dopo una scansione superficiale. Usando SmuggleFuzz, puoi scoprire vulnerabilità di smuggling che altri potrebbero trascurare.
Per maggiori informazioni vedi https://moopinger.github.io/blog/smugglefuzz/fuzzing/smuggling/2024/01/31/SmuggleFuzz.html
Scarica una copia dalla pagina delle release: https://github.com/Moopinger/smugglefuzz/releases
go install github.com/moopinger/smugglefuzz@latest
Un altro modo:
git clone https://github.com/moopinger/smugglefuzz.git
cd smugglefuzz
go build .
./smugglefuzz
Ci sono tre comandi per SmuggleFuzz:
Usage:
smugglefuzz scan [flags]
Examples:
smugglefuzz scan -u https://example.com/ --confirm
smugglefuzz scan -u https://example.com/ --filter TIMEOUT --confirm
smugglefuzz scan -u https://example.com/ -w wordlist.txt -t 10 --confirm --filter TIMEOUT
smugglefuzz scan --dc -u https://example.com/ -w wordlist.txt -x PUT --confirm
//Multiple targets? just use -f instead of -u and provide a file with the targets in it:
smugglefuzz scan -f multiple_targets.txt --confirm -t 10
smugglefuzz scan -f multiple_targets.txt -w wordlist.txt --confirm -s ./save-success.txt --filter TIMEOUT
smugglefuzz scan -f multiple_targets.txt -w wordlist.txt -H "Cookie: date=...; session=...;" -s ./save-success.txt -x PUT --filter TIMEOUT
Flags:
-c, --confirm Enable this flag to send a confirmation to the target when a timeout is encountered. Helps confirm if the target is vulnerable.
-d, --data string HTTP/2 Data frame to send. eg: 99\r\n (default "99\r\n")
--dc Disable colour in the output. This is useful when you want to save the output to a file.
-f, --file string A file containing multiple targets in url format. One target per line.
--filter string Filter responses by string or frame type, etc. For example: 405, 200, 502, TIMEOUT, RST, GOAWAY, etc.
-H, --header string Insert a custom header. It should be provided in the regular header format: "Cookie: date=...; session=...;"
-h, --help help for scan
-i, --interval int The timeout interval in seconds. (default 5)
-x, --method string The HTTP request method to be used. (default "POST")
-s, --save-success string If a request is confirmed to be successful (via the --confirm flag), it will be saved to a file. This is useful when dealing with lots of targets.
-t, --threads int The number of threads to run. Smugglefuzz can go fast, so set the desired number. However, too many may upset any WAFs. (default 4)
-u, --url string The target URL to be scanned.
-w, --wordlist string Provide a custom list of gadgets to use. If not provided, the default list will be used.
Usage:
smugglefuzz request [flags]
Examples:
smugglefuzz request -u https://www.example.com/ -a "content-length\t; 13"
smugglefuzz request -u https://www.example.com/ -a "content-length\t; 13" -x PUT
smugglefuzz request -u https://www.example.com/ -a "content-length\t; 13" -H "Cookie: date=...; session=...;" --data "223\r\n"
Flags:
-a, --attack string Attack Header, separated by (; ) like the wordlist in 'scan' mode.
-d, --data string HTTP/2 Data frame content to send. (default "99\r\n")
--dc Disable colour in the output.
-H, --header string Insert custom header. eg "Cookie: values"
-h, --help help for request
-i, --interval int Detection timeout interval in seconds. (default 5)
-x, --method string The method to use. (default "POST")
-u, --url string The target URL to submit the request to.
Questo comando si limita a mostrare i gadget predefiniti di smuggle. Attualmente la conferma integrata funziona solo per H2.CL e H2.TE. Ma è comunque possibile rilevare attacchi H2.0 tramite timeout (–filter TIMEOUT) o OAST su un tuo dominio. (Vedi la sezione sugli pseudo-header più avanti)
SmuggleFuzz permette agli utenti il controllo completo sulle richieste tramite liste di parole personalizzate. Queste liste hanno una struttura di base da seguire per una gestione ottimale delle richieste. Ad esempio, le intestazioni e i loro valori vengono separati usando un punto e virgola e uno spazio (; ) invece del solito colon, facilitando l'inclusione di valori con due punti nelle richieste di smuggling. Questo apre anche possibilità per varie mutazioni e approcci creativi. Per una guida dettagliata sulla creazione dei tuoi payload, consulta: Ricerca HTTP/2 di James Kettle.
Lo strumento include una lista pronta all'uso di 125 gadget di smuggling, anche se c'è sempre spazio per espansioni. Questi gadget possono essere visualizzati usando il comando 'output', fornendo informazioni sulla struttura delle query. Gli utenti possono eseguire scansioni con liste di parole personalizzate usando il flag 'w'. La lista supporta la codifica URL (%00) per valori di byte non stampabili, come il ritorno a capo e l'avanzamento riga rappresentati come '%0d%0a' o '\r\n'. Sebbene la lista fornita sia completa, creare i propri gadget può aumentare significativamente il tasso di successo.
Hai bisogno del supporto h2c? Dai un'occhiata al ramo "experimental-h2c" di SmuggleFuzz.
Gli pseudo-header sono completamente supportati e possono essere personalizzati usando la sintassi ":name":
:authority:scheme:methodQueste intestazioni sono particolarmente utili quando si testano vettori di attacco H2.0. Ad esempio, nel testare lo smuggling H2.0 usando metodi basati su OAST, le voci della lista di parole come le seguenti possono essere efficaci:
A partire da v0.1.8, [HOSTNAME] può essere usato come segnaposto. SmuggleFuzz lo sostituirà con il nome host in fase di esecuzione.
:authority; [HOSTNAME]\r\n\r\nGET / HTTP/1.1\r\nHost: uniqid.oastify.com\r\nX-HEADER:%20oppure
:authority; [HOSTNAME]\r\n\r\nGET https://uniqid.oastify.com/ HTTP/1.1\r\nHost: [HOSTNAME]\r\nX-HEADER:%20Il metodo di rilevamento impiegato in SmuggleFuzz è simile a quelli usati da Albinowax nella sua ricerca sullo smuggling HTTP/1 e da defparam con Smuggler, sebbene con adattamenti per HTTP/2. Fortunatamente, poiché questi attacchi coinvolgono downgrade, lo stesso corpo della richiesta/payload DATA può essere utilizzato sia per il rilevamento H2.CL che H2.TE.
Una linea guida cruciale per le liste di parole è che le intestazioni contrabbandate con successo dovrebbero includere i seguenti valori per un attacco di conferma:
CL: 13
TE: chunked
Ogni richiesta include un "Body"/DATA-Frame con il valore "99\r\n". Se un'intestazione TE viene contrabbandata, viene interpretata come una lunghezza del contenuto chunked di 153 (0x99) dal server se contrabbandata con successo, portando a un timeout. Allo stesso modo, contrabbandare un'intestazione CL con una lunghezza del contenuto di 13 causa anche un timeout a causa della lunghezza non soddisfatta.
La richiesta di conferma invia di nuovo la stessa query che ha portato al timeout, ma con Data: "3\r\nABC\r\n0\r\n\r\n". Questo soddisfa sia un TE chunked che un CL di 13, ottenendo una risposta di successo e potenzialmente indicando una vulnerabilità di smuggling.