在了解了AJP协议的漏洞成因之后,我们只需要构造一个客户端就可以实现自己的攻击行为了。
AJP协议的请求和响应包结构在文档可以看到:https://tomcat.apache.org/connectors-doc/ajp/ajpv13a.html
实现过程这里不进行描述,代码放在如下位置,请自行观看:

  1. javaweb-sec/javaweb-sec-source/javasec-test/javasec-tomcat-ajp

在这里进行漏洞两种利用方式的演示。

Web目录任意文件读取

任意文件读取需要满足的条件是:

  • 访问的地址(target)是一个没有 Servlet 映射的地址
  • request_uri 属性不为空
  • servlet_path 和 path_info 拼接得到我们想要读取的文件

如下图配置:
5. AJP客户端 - 图1
可以看到成功返回了文件内容:
5. AJP客户端 - 图2

JSP文件包含

假设我们在web目录下具有可控的文件,比如我们上传了一个aaa.jpg,文件里是一个执行whoami命令并返回结果的jsp恶意文件。
5. AJP客户端 - 图3
这是我们需要控制的是访问的地址(target)是一个.jsp结尾的文件,并且 servlet_path、path_info 拼接起来是我们可控的文件路径。
5. AJP客户端 - 图4
运行返回结果,可以看到我们的 jpg 文件以 jsp 解析并执行成功:
5. AJP客户端 - 图5