【CVE-2025-24813】Tomcat 2025最新RCE复现

2025-07-26 06:00:40 9 614 1

1:漏洞详情

🚩 CVE-2025-24813 简要要点:

  • 漏洞点就是 Tomcat 处理 PersistentManager + FileStore 写文件时,没有正确过滤 Session ID 路径。
  • 攻击者可以通过特制的 Session ID(带有目录穿越字符,比如 ../../../webapps/ROOT/shell.jsp),让 Tomcat 把 Session 文件写到 Web 目录里!
  • 因为 .session 文件内容是可控的(只要构造反序列化链或写 JSP 内容),就能 RCE。

典型利用链

1️⃣ 访问站点 → Tomcat 分配 Session ID
2️⃣ 攻击者伪造特制 Session ID,带目录穿越(../../webapps/ROOT/shell.jsp
3️⃣ Session 被持久化写盘 → 写到 webapps/ROOT/shell.jsp
4️⃣ 访问 /shell.jsp,执行恶意代码。

CVE详情 参考文章1 参考文章2

2:环境准备

Tomcat下载 这里我下载的是Windows64位的压缩包.

修改配置

修改conf文件夹中的web.xml文件,添加以下配置,==授予服务器写操作==

        <init-param>
            <param-name>readonly</param-name>
            <param-value>false</param-value>
        </init-param>

修改conf文件夹中的server.xml文件,添加以下配置

  <Manager className="org.apache.catalina.session.PersistentManager">
    <Store className="org.apache.catalina.session.FileStore" />
  </Manager>
</Context>

默认如果没有写 <Manager>,Tomcat 用 StandardManager,就是最简单的内存 Session,Tomcat 一关就没了,不会落盘。

这个配置会让 Tomcat 在什么情况下把 Session 落到硬盘?

PersistentManager 会在这些场景触发写文件:

  • Session 空闲到达阈值。
  • Tomcat 正常关闭时,保存所有内存 Session。
  • 重启时再读回来,保证用户登录态不丢。

它默认会把 Session 序列化为 .session 文件,放到 work/Catalina/localhost/你的ContextName/sessions/ 目录下。

下载CommonsCollections

将下载好的CommonsCollections复制到Root文件夹中

3:漏洞复现

  1. 使用Yakit的CommonsCollectionK1这条漏洞利用链.
  2. 填写命令(这里是以打开计算器为漏洞利用标志)
  3. 复制经过Base64编码的代码

构造一个PUT 请求,请求名字为xxxxx/session

在请求体中插入相关代码,这里使用Yakit标签

  1. 选择Base64解码标签
  2. 点击插入
  3. 插入标签所在位置

将利用链生成的payload复制到刚刚插入的标签中.

  1. 点击发送请求

这时候查看work目录下会有刚刚发送的请求会话.打开session文件,可以从HEX文件中看到我们的Payload,start calc 这个Session文件也是Java的序列化文件.

接着构造一个新的请求触发Payload执行.注意这里的JESSSIONID(xxxxx)就是刚刚PUT到服务器上的session文件的名字. 点击发送请求,顺利的话会打开计算器,至此漏洞利用成功. 这里需要注意的点:

  1. 如果发送第二个触发请求没有计算器弹出,需要检查session文件是否自动被删除,因为Tomcat服务器默认有会话时效时间.
  2. 这时候只需要重新发送第一个请求即可.

关于作者

JackChen14篇文章142篇回复

评论9次

要评论?请先  登录  或  注册