
Ein Kommandozeilen-Fuzzer für das Apache JServ Protocol (ajp13)
AJPFuzzer ist ein rudimentärer Fuzzer für das Apache JServ Protocol (ajp13).
Aufbauend auf libajp13 ermöglicht Ihnen das Tool, AJP-Nachrichten über eine benutzerfreundliche Kommandozeilenoberfläche zu erstellen und zu senden. AJPFuzzer kann sowohl korrekt formatierte AJP13-Nachrichten (alle Nachrichtentypen) als auch Mutationen erzeugen (z.B. Bit-Flipping, Nachrichten mit Typenkonflikten usw.), was Sicherheitstests für AJP-basierte Dienste wie AJP-Module von Webservern, J2EE-Container und viele andere erleichtert.
Laden Sie das neueste AJPFuzzer-JAR von der Releases-Seite herunter.
Führen Sie das heruntergeladene JAR mit folgendem Befehl aus:
$ java -jar ajpfuzzer_v0.7.jar
Das Tool öffnet eine Shell. Durch Eingabe von ?list können alle verfügbaren Befehle aufgelistet werden. Anschließend können Sie eine Verbindung zum Ziel herstellen mit:
AJPFuzzer> connect 127.0.0.1 8009
Dann können Sie eine CPing-Nachricht (Typ 10) senden, indem Sie einfach '10' eingeben (für diese Nachricht sind keine Argumente erforderlich):
AJPFuzzer/127.0.0.1:8009> 10
Der folgende Screenshot zeigt die gesamte Ausführung:
Selbstverständlich ist es möglich, komplexere Nachrichten zu senden, indem man den entsprechenden Testfall und die Argumente angibt. Bitte beachten Sie ?list für alle Details zu einem bestimmten Befehl.
Zum Beispiel können wir eine vollständig angepasste ForwardRequest-Nachricht senden mit:
> forwardrequest 2 "HTTP/1.1" "/api/" 127.0.0.1 localhost porto 8009 false "Cookie:AAAA=BBBB" ""
Es ist auch möglich, eine ForwardRequest-Nachricht zu senden, die beliebige Elemente fuzzt:
> genericfuzz 2 "HTTP/1.1" "/test.html" "127.0.0.1" "127.0.0.1" "server.name.test" 8009 false "Cookie:AAAA=BBBB" "secret:FUZZ" /tmp/list.txt
Derzeit bietet AJPFuzzer die folgenden Testfälle:
Neue Testfälle können durch Erweiterung der Klasse AJPTestCases.java hinzugefügt werden. Mit der @Command-Annotation erkennt das Tool den zusätzlichen Befehl und stellt ihn über die CLI zur Verfügung.
| Id | Name | Beschreibung |
|---|
| 1 | body | Sendet eine Body-Nachricht vom Webserver an den J2EE-Container |
| 2 | forwardrequest | Beginnt den Anfrageverarbeitungszyklus vom Webserver zum J2EE-Container |
| 3 | sendbodychunk | Sendet einen Teil des Bodys vom J2EE-Container an den Webserver |
| 4 | sendheaders | Sendet die Antwort-Header vom J2EE-Container an den Webserver |
| 5 | endresponse | Markiert das Ende der Antwort, vom J2EE-Container zum Webserver |
| 6 | getbodychunk | Fordert weitere Daten vom Anforderer an. Nachricht vom J2EE-Container an den Webserver |
| 7 | shutdown | Sendet ein standardmäßiges Shutdown-AJP13-Paket |
| 8 | ping | Sendet ein Ping-AJP13-Paket (ping != CPing) |
| 9 | cpong | Sendet ein CPong-AJP13-Paket |
| 10 | cping | Sendet ein CPing-AJP13-Paket |
| 11 | forwardreqalltypes | Sendet ein ForwardRequest-AJP13-Paket mit allen möglichen Pakettypen |
| 12 | verbtampering | Sendet mehrere Anfragen über AJP13 und führt HTTP Verb Tampering durch, um potenzielle Authentifizierungsumgehungsfehler zu erkennen |
| 13 | jettyleak | Sendet ein JettyLeak-artiges AJP13-Paket |
| 14 | hugelengthsmallbody | Sendet ForwardRequest+Body-Nachrichten mit einer großen Content-Length und einem kleinen Body |
| 15 | hugeheader | Sendet zwei AJP13-ForwardRequest-Pakete mit einer Headerlänge größer als 0x9999 (z.B. A010) |
| 16 | fuzzbit | Erstellt ein komplexes AJP13-ForwardRequest und beginnt Bit-Flipping |
| 17 | fuzzslice | Erstellt ein AJP13-ForwardRequest, SendHeaders, ShutDown, 0xFF, 0x00. Schneidet und sendet. |
| 18 | servletpath | Erstellt ein AJP13-ForwardRequest mit einem beliebigen 'servlet_path'-Attribut |
| 19 | bypassauthnull | Erstellt zwei AJP13-ForwardRequest mit auth_type auf 'null' gesetzt |
| 20 | envars | Erstellt ein AJP13-ForwardRequest mit req_attribute_code (10), um beliebige Umgebungsvariablen zu setzen |
| 21 | hugepacketsize | Erstellt zwei AJP13-Anfragen mit einer Größe > 8192 Bytes |
| 22 | genericfuzz | Erstellt ein AJP13-ForwardRequest (GET), das das Fuzzen beliebiger Nachrichtenelemente mithilfe des Schlüsselworts FUZZ ermöglicht |