
Un fuzzer de línea de comandos para el Protocolo Apache JServ (ajp13)
AJPFuzzer es un fuzzer rudimentario para el Protocolo Apache JServ (ajp13).
Construido sobre libajp13, la herramienta te permite crear y enviar mensajes AJP usando una interfaz de línea de comandos fácil de usar. AJPFuzzer puede elaborar mensajes AJP13 correctamente formateados (todos los tipos de mensajes) así como mutaciones (por ejemplo, bit flipping, mensajes con tipo incorrecto, etc.), lo que facilita los esfuerzos de pruebas de seguridad dirigidos a servicios basados en AJP como módulos AJP de servidores web, contenedores J2EE y muchos otros.
Descarga el archivo jar de AJPFuzzer más reciente desde la página de lanzamientos
Ejecuta el jar descargado usando:
$ java -jar ajpfuzzer_v0.7.jar
La herramienta mostrará un shell. Escribiendo ?list, es posible listar todos los comandos disponibles. En este punto, puedes conectarte al objetivo usando:
AJPFuzzer> connect 127.0.0.1 8009
Luego, puedes enviar un mensaje CPing (tipo 10) simplemente escribiendo '10' (no se necesitan argumentos para este mensaje)
AJPFuzzer/127.0.0.1:8009> 10
La siguiente captura de pantalla ilustra la ejecución completa:
Obviamente, es posible enviar mensajes más complejos especificando el caso de prueba y los argumentos adecuados. Consulta ?list para todos los detalles sobre un comando específico.
Por ejemplo, podemos enviar un mensaje de tipo ForwardRequest completamente personalizado usando:
> forwardrequest 2 "HTTP/1.1" "/api/" 127.0.0.1 localhost porto 8009 false "Cookie:AAAA=BBBB" ""
También es posible enviar un mensaje ForwardRequest fuzzeando elementos arbitrarios:
> 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
Hasta la fecha, AJPFuzzer proporciona los siguientes casos de prueba:
Se pueden agregar nuevos casos de prueba extendiendo la clase AJPTestCases.java. Usando la anotación @Command, la herramienta reconocerá el comando adicional y lo hará disponible desde la CLI.
| Id | Nombre | Descripción |
|---|
| 1 | body | Enviar un mensaje de cuerpo desde el servidor web al contenedor J2EE |
| 2 | forwardrequest | Iniciar el ciclo de procesamiento de solicitudes desde el servidor web al contenedor J2EE |
| 3 | sendbodychunk | Enviar un fragmento del cuerpo desde el contenedor J2EE al servidor web |
| 4 | sendheaders | Enviar los encabezados de respuesta desde el contenedor J2EE al servidor web |
| 5 | endresponse | Marcar el final de la respuesta, desde el contenedor J2EE al servidor web |
| 6 | getbodychunk | Obtener datos adicionales del solicitante. Mensaje desde el contenedor J2EE al servidor web |
| 7 | shutdown | Enviar un paquete AJP13 de apagado estándar |
| 8 | ping | Enviar un paquete AJP13 de ping (ping != CPing) |
| 9 | cpong | Enviar un paquete AJP13 CPong |
| 10 | cping | Enviar un paquete AJP13 CPing |
| 11 | forwardreqalltypes | Enviar un paquete AJP13 ForwardRequest, con todos los tipos de paquete posibles |
| 12 | verbtampering | Enviar múltiples solicitudes a través de AJP13 y realizar HTTP Verb Tampering, para detectar posibles fallos de omisión de autenticación |
| 13 | jettyleak | Enviar un paquete AJP13 estilo JettyLeak |
| 14 | hugelengthsmallbody | Enviar mensajes ForwardRequest+Body, con un Content-Length grande y Body pequeño |
| 15 | hugeheader | Enviar dos paquetes AJP13 ForwardRequest con longitud de encabezado mayor que 0x9999 (ej. A010) |
| 16 | fuzzbit | Crear un AJP13 ForwardRequest complejo e iniciar bit flipping |
| 17 | fuzzslice | Crear un AJP13 ForwardRequest, SendHeaders, ShutDown, 0xFF, 0x00. Segmentar y enviar. |
| 18 | servletpath | Crear un AJP13 ForwardRequest con el atributo 'servlet_path' arbitrario |
| 19 | bypassauthnull | Crear dos AJP13 ForwardRequest con auth_type establecido a 'null' |
| 20 | envars | Crear un AJP13 ForwardRequest con req_attribute_code (10) para establecer variables de entorno arbitrarias |
| 21 | hugepacketsize | Crear dos solicitudes AJP13 con tamaño > 8192 bytes |
| 22 | genericfuzz | Crear un AJP13 ForwardRequest (GET) que permite fuzzear elementos arbitrarios del mensaje usando la palabra clave FUZZ |