Tomcat put文件上传漏洞(CVE-2017-12615)
漏洞描述:
当Tomcat运行在Windows操作系统上,且启用了HTTP PUT请求方法(将 readonly 初始化参数由默认值设置为 false),攻击者将有可能可通过精心构造的攻击请求上传任意文件,包括JSP类型的木马。
影响范围:
Apache Tomcat 7.0.0 - 7.0.81
环境准备:
虚拟机: VMware
操作系统: Windows7
java环境(jdk 1.7.0-ea)
Tomcat版本(7.0.65)
漏洞复现
修改web.xml文件, 开启http的put方法(文件路径: tomcat\conf\web.xml):
修改完,重新启动tomcat,访问8080端口
用burp抓包, 拦截将GET改为PUT方法,尝试直接上传test.jsp文件:
上传失败返回404
原因: Tomcat在某种程度上检查了文件后缀(无法直接编写jsp)
利用文件上传绕过方式进行绕过
方式一: 利用Windows文件流(::DATA)绕过
返回409
响应状态码 409 Conflict 表示请求与服务器端目标资源的当前状态相冲突。
冲突最有可能发生在对 PUT 请求的响应中。例如,当上传文件的版本比服务器上已存在的要旧,从而导致版本冲突的时候,那么就有可能收到状态码为 409 的响应。
愿因: 这儿应该是版本冲突(猜测), 这个方式应该是可行的,参考时以实践结果为标准
方式二: 直接在上传文件后缀名后加/绕过(Tomcat存在去掉最后/
的特性,此方法影响所有的Apache Tomcat 版本)
返回201, 成功创建文件,访问文件,成功访问(这里可上传一句话木马)
方式三: 在上传文件后缀名后加上%20绕过
修复方案:
1.配置readonly为true(默认为true)
2.根据官方补丁升级最新版本