
Ein schneller HTTP-Downgrade-Schmuggel-Scanner, geschrieben in Go.
SmuggleFuzz, ein konfigurierbarer und schneller Scanner für HTTP-Downgrade-Smuggling. Es befähigt Benutzer mit anpassbaren Gadget-Listen und bietet tiefere Einblicke in die Gründe für fehlgeschlagene Smuggling-Angriffe. Ich bin überzeugt, dass zahlreiche auf HTTP-Downgrade basierende Smuggling-Schwachstellen noch unentdeckt sind. Leider brechen viele ihre Erkundung nach einer oberflächlichen Überprüfung ab. Mit SmuggleFuzz können Sie Smuggling-Schwachstellen aufdecken, die andere übersehen.
Weitere Informationen finden Sie unter https://moopinger.github.io/blog/smugglefuzz/fuzzing/smuggling/2024/01/31/SmuggleFuzz.html
Laden Sie eine Kopie von der Releases-Seite herunter: https://github.com/Moopinger/smugglefuzz/releases
go install github.com/moopinger/smugglefuzz@latest
Oder so:
git clone https://github.com/moopinger/smugglefuzz.git
cd smugglefuzz
go build .
./smugglefuzz
Es gibt drei Befehle für 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.
Dadurch werden die Standard-Smuggle-Gadgets ausgegeben. Derzeit funktioniert die integrierte Bestätigung nur für H2.CL und H2.TE. Dennoch ist es möglich, H2.0-Angriffe über Timeouts (–filter TIMEOUT) oder OAST auf einer Ihrer Domains zu erkennen. (Siehe den Abschnitt zu Pseudo-Headern weiter unten)
SmuggleFuzz ermöglicht Benutzern die vollständige Kontrolle über Anfragen durch benutzerdefinierte Wortlisten. Diese Listen haben eine grundlegende Struktur, die für eine optimale Anfrageverarbeitung eingehalten werden sollte. Beispielsweise werden Header und ihre Werte durch ein Semikolon und ein Leerzeichen (; ) getrennt – anstelle des üblichen Doppelpunkts –, um die Einbindung von Doppelpunktwerten in Smuggling-Anfragen zu erleichtern. Dies eröffnet auch Möglichkeiten für verschiedene Mutationen und kreative Ansätze. Eine ausführliche Anleitung zur Erstellung eigener Payloads finden Sie unter: James Kettle's HTTP/2 Research.
Das Tool enthält eine einsatzbereite Liste von 125 Smuggling-Gadgets, aber es gibt immer Raum für Erweiterungen. Diese Gadgets können mit dem Befehl 'output' angezeigt werden, was Einblicke in die Abfragestruktur gibt. Benutzer können Scans mit benutzerdefinierten Wortlisten über das Flag 'w' ausführen. Die Liste unterstützt URL-Kodierung (%00) für nicht druckbare Byte-Werte, wie Carriage Return und Line Feed, dargestellt als '%0d%0a' oder '\r\n'. Obwohl die mitgelieferte Liste umfassend ist, kann das Erstellen eigener Gadgets die Erfolgsrate erheblich steigern.
Benötigen Sie h2c-Unterstützung? Schauen Sie sich den Branch "experimental-h2c" von SmuggleFuzz an.
Pseudo-Header werden vollständig unterstützt und können mit der Syntax ":name" angepasst werden:
:authority:scheme:methodDiese Header sind besonders nützlich beim Testen von H2.0-Angriffsvektoren. Beispielsweise können bei H2.0-Smuggling mit OAST-basierten Methoden Wortlisteneinträge wie die folgenden effektiv sein:
Ab v0.1.8 kann [HOSTNAME] als Platzhalter verwendet werden. SmuggleFuzz ersetzt diesen zur Laufzeit durch den Hostnamen.
:authority; [HOSTNAME]\r\n\r\nGET / HTTP/1.1\r\nHost: uniqid.oastify.com\r\nX-HEADER:%20oder
:authority; [HOSTNAME]\r\n\r\nGET https://uniqid.oastify.com/ HTTP/1.1\r\nHost: [HOSTNAME]\r\nX-HEADER:%20Die in SmuggleFuzz verwendete Erkennungsmethode ähnelt der von Albinowax in seiner HTTP/1-Smuggling-Forschung und defparams Smuggler, jedoch mit Anpassungen für HTTP/2. Glücklicherweise kann bei diesen Angriffen, da es sich um Downgrades handelt, der gleiche Anforderungstext/DATA-Payload sowohl für H2.CL- als auch für H2.TE-Erkennung verwendet werden.
Eine wichtige Richtlinie für Wortlisten ist, dass erfolgreich eingeschleuste Header die folgenden Werte für einen bestätigenden Angriff enthalten sollten:
CL: 13
TE: chunked
Jede Anfrage enthält einen "Body"/DATA-Frame mit dem Wert "99\r\n". Wenn ein TE-Header eingeschleust wird, wird er vom Server bei erfolgreicher Einschleusung als Chunked-Content-Länge von 153 (0x99) interpretiert, was zu einem Timeout führt. Ebenso führt das Einschleusen eines CL-Headers mit einer Content-Länge von 13 zu einem Timeout aufgrund der nicht erfüllten Länge.
Der Bestätigungsangriff sendet erneut dieselbe Abfrage, die zum Timeout geführt hat, jedoch mit Data: "3\r\nABC\r\n0\r\n\r\n". Dies erfüllt sowohl ein Chunked-TE als auch ein CL von 13, löst eine erfolgreiche Antwort aus und deutet möglicherweise auf eine Smuggling-Schwachstelle hin.