【CVE-2025-24813】Tomcat 2025最新RCE复现
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,执行恶意代码。
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复制到Root文件夹中
3:漏洞复现
- 使用Yakit的CommonsCollectionK1这条漏洞利用链.
- 填写命令(这里是以打开计算器为漏洞利用标志)
- 复制经过Base64编码的代码
构造一个PUT 请求,请求名字为xxxxx/session
在请求体中插入相关代码,这里使用Yakit标签
- 选择Base64解码标签
- 点击插入
- 插入标签所在位置
将利用链生成的payload复制到刚刚插入的标签中.
- 点击发送请求
这时候查看work目录下会有刚刚发送的请求会话.打开session文件,可以从HEX文件中看到我们的Payload,start calc 这个Session文件也是Java的序列化文件.
接着构造一个新的请求触发Payload执行.注意这里的JESSSIONID(xxxxx)就是刚刚PUT到服务器上的session文件的名字. 点击发送请求,顺利的话会打开计算器,至此漏洞利用成功. 这里需要注意的点:
- 如果发送第二个触发请求没有计算器弹出,需要检查session文件是否自动被删除,因为Tomcat服务器默认有会话时效时间.
- 这时候只需要重新发送第一个请求即可.















评论9次
感谢分享
前提条件时必须要有写权限白
往他自己目录写应该也是可以的,对目录没要求
前提条件时必须要有写权限白
现实中有碰见过吗 佬们
https://mp.weixin.qq.com/s/QmucqW06IF6tZNHGuGxs9w
等会复现的试试
感谢分享
感谢分享,刚好最近部署了tomcat
wx上看图都模糊的不行,还是看这舒服。