
Um fuzzer de linha de comando para o Apache JServ Protocol (ajp13)
AJPFuzzer é um fuzzer rudimentar para o Apache JServ Protocol (ajp13).
Construído sobre libajp13, a ferramenta permite criar e enviar mensagens AJP usando uma interface de linha de comando fácil de usar. O AJPFuzzer pode criar mensagens AJP13 formatadas corretamente (todos os tipos de mensagem), bem como mutações (por exemplo, inversão de bits, mensagens com incompatibilidade de tipo, etc.), o que facilita os esforços de teste de segurança direcionados a serviços baseados em AJP, como módulos AJP de servidores web, contêineres J2EE e muitos outros.
Baixe o último JAR do AJPFuzzer na página de lançamentos
Execute o JAR baixado usando:
$ java -jar ajpfuzzer_v0.7.jar
A ferramenta exibirá um shell. Digitando ?list, é possível listar todos os comandos disponíveis. Neste ponto, você pode conectar ao alvo usando:
AJPFuzzer> connect 127.0.0.1 8009
Então, você pode enviar uma mensagem CPing (tipo 10) simplesmente digitando '10' (nenhum argumento é necessário para esta mensagem)
AJPFuzzer/127.0.0.1:8009> 10
A seguinte captura de tela ilustra toda a execução:
Obviamente, é possível enviar mensagens mais complexas especificando o caso de teste e os argumentos apropriados. Consulte ?list para todos os detalhes de um comando específico.
Por exemplo, podemos enviar uma mensagem do tipo ForwardRequest totalmente personalizada usando:
> forwardrequest 2 "HTTP/1.1" "/api/" 127.0.0.1 localhost porto 8009 false "Cookie:AAAA=BBBB" ""
Também é possível enviar uma mensagem ForwardRequest fuzzing elementos arbitrários:
> 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
Atualmente, o AJPFuzzer fornece os seguintes casos de teste:
Novos casos de teste podem ser adicionados estendendo a classe AJPTestCases.java. Usando a anotação @Command, a ferramenta reconhecerá o comando adicional e o disponibilizará na CLI.
| Id | Name | Description |
|---|
| 1 | body | Envia uma mensagem de corpo do servidor web para o contêiner J2EE |
| 2 | forwardrequest | Inicia o ciclo de processamento da requisição do servidor web para o contêiner J2EE |
| 3 | sendbodychunk | Envia um pedaço do corpo do contêiner J2EE para o servidor web |
| 4 | sendheaders | Envia os cabeçalhos de resposta do contêiner J2EE para o servidor web |
| 5 | endresponse | Marca o fim da resposta, do contêiner J2EE para o servidor web |
| 6 | getbodychunk | Obtém mais dados do solicitante. Mensagem do contêiner J2EE para o servidor web |
| 7 | shutdown | Envia um pacote AJP13 de desligamento padrão |
| 8 | ping | Envia um pacote AJP13 ping (ping != CPing) |
| 9 | cpong | Envia um pacote AJP13 CPong |
| 10 | cping | Envia um pacote AJP13 CPing |
| 11 | forwardreqalltypes | Envia um pacote AJP13 ForwardRequest, com todos os tipos de pacote possíveis |
| 12 | verbtampering | Envia múltiplas requisições via AJP13 e realiza HTTP Verb Tampering, para detectar potenciais falhas de contorno de autenticação |
| 13 | jettyleak | Envia um pacote AJP13 estilo JettyLeak |
| 14 | hugelengthsmallbody | Envia mensagens ForwardRequest+Body, com um Content-Length grande e Body pequeno |
| 15 | hugeheader | Envia dois pacotes AJP13 ForwardRequest com comprimento de cabeçalho maior que 0x9999 (ex.: A010) |
| 16 | fuzzbit | Cria um ForwardRequest AJP13 complexo e inicia inversão de bits |
| 17 | fuzzslice | Cria um ForwardRequest AJP13, SendHeaders, ShutDown, 0xFF, 0x00. Divide e envia. |
| 18 | servletpath | Cria um ForwardRequest AJP13 com atributo 'servlet_path' arbitrário |
| 19 | bypassauthnull | Cria dois ForwardRequest AJP13 com auth_type definido como 'null' |
| 20 | envars | Cria um ForwardRequest AJP13 com req_attribute_code (10) para definir variáveis ambientais arbitrárias |
| 21 | hugepacketsize | Cria duas requisições AJP13 com tamanho > 8192 bytes |
| 22 | genericfuzz | Cria um ForwardRequest AJP13 (GET) que permite fuzzing de elementos arbitrários da mensagem usando a palavra-chave FUZZ |