在了解了AJP协议的漏洞成因之后,我们只需要构造一个客户端就可以实现自己的攻击行为了。
AJP协议的请求和响应包结构在文档可以看到:https://tomcat.apache.org/connectors-doc/ajp/ajpv13a.html
实现过程这里不进行描述,代码放在如下位置,请自行观看:
javaweb-sec/javaweb-sec-source/javasec-test/javasec-tomcat-ajp
Web目录任意文件读取
任意文件读取需要满足的条件是:
- 访问的地址(target)是一个没有 Servlet 映射的地址
- request_uri 属性不为空
- servlet_path 和 path_info 拼接得到我们想要读取的文件
JSP文件包含
假设我们在web目录下具有可控的文件,比如我们上传了一个aaa.jpg
,文件里是一个执行whoami
命令并返回结果的jsp恶意文件。
这是我们需要控制的是访问的地址(target)是一个.jsp
结尾的文件,并且 servlet_path、path_info 拼接起来是我们可控的文件路径。
运行返回结果,可以看到我们的 jpg 文件以 jsp 解析并执行成功: