AJPFuzzer 是一个针对 Apache JServ 协议 (ajp13) 的基础模糊测试工具。
该工具基于 libajp13,通过易用的命令行界面让您创建和发送 AJP 消息。AJPFuzzer 可以构建格式正确的 AJP13 消息(所有消息类型),以及变异消息(例如位翻转、类型不匹配等),从而便于针对基于 AJP 的服务(如 Web 服务器的 AJP 模块、J2EE 容器等)进行安全测试。
从 发布页面 下载最新的 AJPFuzzer jar 文件
使用以下命令运行下载的 jar 文件:
$ java -jar ajpfuzzer_v0.7.jar
工具会启动一个 shell。输入 ?list 可以列出所有可用命令。此时,您可以使用以下命令连接到目标:
AJPFuzzer> connect 127.0.0.1 8009
然后,您只需输入 '10' 即可发送 CPing 消息(类型 10)(此消息不需要参数)
AJPFuzzer/127.0.0.1:8009> 10
以下截图展示了完整的执行过程:
显然,您可以通过指定相应的测试用例和参数来发送更复杂的消息。有关特定命令的详细信息,请参阅 ?list 。
例如,我们可以使用以下命令发送一个完全自定义的 ForwardRequest 类型消息:
> forwardrequest 2 "HTTP/1.1" "/api/" 127.0.0.1 localhost porto 8009 false "Cookie:AAAA=BBBB" ""
也可以发送一个变异任意元素的 ForwardRequest 消息:
> 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
截至目前,AJPFuzzer 提供以下测试用例:
可以通过扩展 AJPTestCases.java 类来添加新的测试用例。使用 @Command 注解,工具将识别新增命令并在 CLI 中提供。
| Id | Name | Description |
|---|
| 1 | body | 从 Web 服务器向 J2EE 容器发送一条 body 消息 |
| 2 | forwardrequest | 启动从 Web 服务器到 J2EE 容器的请求处理周期 |
| 3 | sendbodychunk | 从 J2EE 容器向 Web 服务器发送 body 的一个分块 |
| 4 | sendheaders | 从 J2EE 容器向 Web 服务器发送响应头 |
| 5 | endresponse | 标记响应结束,从 J2EE 容器到 Web 服务器 |
| 6 | getbodychunk | 从请求方获取更多数据。消息从 J2EE 容器到 Web 服务器 |
| 7 | shutdown | 发送标准的 AJP13 关闭数据包 |
| 8 | ping | 发送 AJP13 ping 数据包(ping != CPing) |
| 9 | cpong | 发送 AJP13 CPong 数据包 |
| 10 | cping | 发送 AJP13 CPing 数据包 |
| 11 | forwardreqalltypes | 发送一个包含所有可能数据包类型的 ForwardRequest AJP13 数据包 |
| 12 | verbtampering | 通过 AJP13 发送多个请求并执行 HTTP 动词篡改,以检测潜在的身份验证绕过缺陷 |
| 13 | jettyleak | 发送一个 JettyLeak 风格的 AJP13 数据包 |
| 14 | hugelengthsmallbody | 发送 ForwardRequest+Body 消息,包含大的 Content-Length 和小的 Body |
| 15 | hugeheader | 发送两个 AJP13 ForwardRequest 数据包,其头部长度大于 0x9999(例如 A010) |
| 16 | fuzzbit | 创建一个复杂的 AJP13 ForwardRequest 并开始位翻转 |
| 17 | fuzzslice | 创建一个 AJP13 ForwardRequest、SendHeaders、ShutDown、0xFF、0x00。切片并发送。 |
| 18 | servletpath | 创建一个带有任意 'servlet_path' 属性的 AJP13 ForwardRequest |
| 19 | bypassauthnull | 创建两个 AJP13 ForwardRequest,并将 auth_type 设置为 'null' |
| 20 | envars | 创建一个 AJP13 ForwardRequest,使用 req_attribute_code (10) 设置任意的环境变量 |
| 21 | hugepacketsize | 创建两个大小大于 8192 字节的 AJP13 请求 |
| 22 | genericfuzz | 创建一个 AJP13 ForwardRequest (GET),允许使用 FUZZ 关键字对任意消息元素进行模糊测试 |