目录
一、漏洞产生
2017年9月19日,Apache Tomcat官方确认并修复了两个高危漏洞,漏洞CVE编号:CVE-2017-12615和CVE-2017-12616,其中 远程代码执行漏洞(CVE-2017-12615) 影响: Apache Tomcat 7.0.0 - 7.0.79(7.0.81修复不完全)
当 Tomcat 运行在 Windows 主机上,且启用了 HTTP PUT 请求方法(例如,将 readonly 初始化参数由默认值设置为 false),攻击者将有可能可通过精心构造的攻击请求向服务器上传包含任意代码的 JSP 文件。之后,JSP 文件中的代码将能被服务器执行。
二、漏洞基本信息
漏洞名称:Tomcat任意文件上传漏洞
漏洞编号:CVE-2017-12615
漏洞影响:上传包含任意代码的文件,并被服务器执行。
影响平台:Windows
影响版本:Apache Tomcat 7.0.0 - 7.0.81
三、漏洞复现过程
(1)利用docker搭建漏洞环境
进入漏洞文件夹路径后启动漏洞环境:Docker-compose up -d
访问http://your-ip:8080,即可看到Tomcat的Example页面。说明环境搭建成功
(2)攻击思路:
可以上传jSp文件(但不能解析),却不可上传jsp。 说明tomcat对jsp是做了一定处理的。那么就考虑是否可以使其处理过程中对文件名的识别存在差异性,前面的流程中 test.jsp/ 识别为非jsp文件,而后续保存文件的时候,文件名不接受/字符,故而忽略掉。
1.使用burpsuite抓取,发送到Repeater(重放器)进行文件上传操作
2.使用冰蝎进行连接:
找到冰蝎内自带的jsp脚本
将请求包GET方式改为PUT方式,上传shell.jsp,点击发送,发现服务器返回“201”上传成功
使用冰蝎连接shell,密码为“rebeyond”连接成功
连接完成
四、漏洞修复
由于存在去掉最后的 / 的特性,那么这个漏洞自然影响 Linux 以及 Windows 版本。而且经过测试,这个漏洞影响全部的 Tomcat 版本,从 5.x 到 9.x 无不中枪。目前来说,最好的解决方式是将 conf/web.xml 中对于 DefaultServlet 的 readonly 设置为 true,才能防止漏洞。
五、总结
以上就是对于Tomcat PUT方法任意写文件漏洞的全部介绍,希望可以帮助到你。