漏洞描述

该漏洞的核心在于不完整PUT请求上传时 Tomcat 会使用了一个基于用户提供的文件名和路径生成的临时文件,且路径分隔符被替换为 .

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

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

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

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

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

受影响版本

  • Apache Tomcat 11.0.0-M1 至 11.0.2

  • Apache Tomcat 10.1.0-M1 至 10.1.34

  • Apache Tomcat 9.0.0-M1 至 9.0.98

漏洞环境搭建

尝试使用 Tomcat 9.0.98 版本复现:https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.98/bin/apache-tomcat-9.0.98.zip

根据里利用条件描述:

  1. 需要在conf/web.xml中,将DefaultServlet的readonly配置为false,启用写入功能
<init-param>
<param-name>readonly</param-name>
<param-value>false</param-value>
</init-param>

  1. 需要在conf/context.xml中,开启File文件会话存储
<Manager className="org.apache.catalina.session.PersistentManager">
<Store className="org.apache.catalina.session.FileStore"/>
</Manager>

  1. PUT方法默认是启用状态

  2. 在项目包含可被利用于反序列化攻击的库(例如 Commons Collections 3.2.1)

    下载 commons-collections-3.2.1.jar(https://mvnrepository.com/artifact/commons-collections/commons-collections/3.2.1)

    将该 jar 包放入\webapps\ROOT\WEB-INF\lib目录下

利用条件准备完毕,启动 Tomcat 应用:.\bin\catalina.bat run(若是在 Liunx/Mac 环境下改用 catalina.sh 启动),浏览器访问本地8080端口查看是否成功启动。

漏洞复现

参照@jweny大佬文章:https://forum.butian.net/article/674

使用 partial PUT 请求将恶意的序列化数据写入到会话文件中,在开启文件会话持久化(默认存储位置),并且在文件上传未完成的情况下,内容会被临时存储在Tomcat的工作目录work/Catalina/localhost/ROOT

在 HTTP 协议中,Content-Range 字段用于表示客户端通过分段传输的方式上传或下载文件。Content-Range: bytes 0-1000/1200 表示文件总大小是1200字节,本次上传的是前1001字节(0-1000),后续上传剩余部分(1001-1200)。

所以利用这个特点,可以分段上传覆盖或注入敏感文件(如会话文件),尝试下向默认存储位置 work/Catalina/localhost/ROOT 注入文件:

PUT /poc/session HTTP/1.1
Host: localhost:8080
Content-Range: bytes 0-1000/1200 {{(paylaod...)}}

注意看ROOT目录下成功写入了文件(.poc.session):Tomcat 对不完整PUT请求上传时的文件名处理机制:文件路径中的分隔符 / 会被转换为 .

生成一个恶意的序列化文件上传,推荐使用 Java Chains 快速生成一个base64编码的cc链反序列化payload:

准备好第一个请求包,这里需要注意Content-Range的分块值需要与Length保持一致,且大于当前文件的长度。这里用yakit,需要先使用base64dec()标签对payload进行解码上传,直接上传raw格式paylaod是不可用的。

当文件被上传成功后,大概30s之内payload会被自动触发,随之文件会被清除。

也可以使用以下PoC直接触发:

GET / HTTP/1.1
Host: localhost:8080
Cookie: JSESSIONID=.poc

参考文章

https://forum.butian.net/article/674

https://lists.apache.org/thread/j5fkjv2k477os90nczf2v9l61fb0kkgq

https://www.bilibili.com/video/BV14dQjYcEc5/?spm_id_from=333.1007.top_right_bar_window_default_collection.content.click&vd_source=4558613fd07f85f0f4c56e4f927f88ee

https://avd.aliyun.com/detail?id=AVD-2025-24813&timestamp__1384=Wqmx0D2DnDBGQ7KDsKo4Cw4xROjhiHqQkF4D


若有错误,欢迎指正!o( ̄▽ ̄)ブ

Apache Tomcat RCE漏洞复现(CVE-2025-24813)的更多相关文章

  1. Apache Tomcat Ajp-CVE-2020-1938漏洞复现

    环境搭建: sudo docker pull duonghuuphuc/tomcat-8.5.32 sudo docker run -d -it -p 8080:8080 -p 8009:8009  ...

  2. CVE-2019-0232:Apache Tomcat RCE复现

    CVE-2019-0232:Apache Tomcat RCE复现 0X00漏洞简介 该漏洞是由于Tomcat CGI将命令行参数传递给Windows程序的方式存在错误,使得CGIServlet被命令 ...

  3. Apache Solr Velocity模板注入RCE漏洞复现

    Apache Solr Velocity模板注入RCE漏洞复现 一.Apache Solr介绍 Solr是一个独立的企业级搜索应用服务器,它对外提供类似于web-service的API接口,用户可以通 ...

  4. Apache Solr JMX服务 RCE 漏洞复现

    Apache Solr JMX服务 RCE 漏洞复现 ps:Apache Solr8.2.0下载有点慢,需要的话评论加好友我私发你 0X00漏洞简介 该漏洞源于默认配置文件solr.in.sh中的EN ...

  5. TomCat中间件漏洞复现总汇

    TomCat中间件漏洞复现 前言 在渗透测试过程中,遇到php的站相对多一点,所以对apache了解的也多一点.TomCat中间件的站了解的比较少一点,这是自己第一次搭建环境测试漏洞,所以在自己摸索的 ...

  6. Joomla 3.0.0 -3.4.6远程代码执行(RCE)漏洞复现

    Joomla 3.0.0 -3.4.6远程代码执行(RCE)漏洞复现 一.漏洞描述 Joomla是一套内容管理系统,是使用PHP语言加上MYSQL数据库所开发的软件系统,最新版本为3.9.12,官网: ...

  7. Apache Shiro反序列化漏洞复现

    Apache Shiro反序列化漏洞复现 0x01 搭建环境 获取docker镜像 Docker pull medicean/vulapps:s_shiro_1 重启docker system res ...

  8. 【Vulhub】CVE-2019-3396 Confluence RCE漏洞复现

    CVE-2019-3396 Confluence RCE漏洞复现 一.环境搭建 选择的vulhub里的镜像,进入vulhub/Confluence/CVE-2019-3396目录下,执行 docker ...

  9. Apache Tomcat RCE(CVE-2017-12615 )漏洞案例分析

    首先搭建tomcat环境: 下载当前项目的版本的tomcat

  10. Apache Flink 任意 Jar 包上传致 RCE 漏洞复现

    0x00 简介 Flink核心是一个流式的数据流执行引擎,其针对数据流的分布式计算提供了数据分布.数据通信以及容错机制等功能.基于流执行引擎,Flink提供了诸多更高抽象层的API以便用户编写分布式任 ...

随机推荐

  1. 【杂谈】Kafka的无锁设计

    前言 在分布式消息队列系统中,Kafka 的无锁设计是其高吞吐量和高并发的核心优势之一.通过避免锁的竞争,Kafka 能够在高并发和大规模的生产环境中保持高效的性能.为了更好地理解 Kafka 的无锁 ...

  2. 编译Sophus报错: error: implicitly-declared 的参考解决方法

    一.问题描述 自己在编译Sophus时遇到如下错误: /home/wong/Datum/third_party/Sophus-1.0.0-template/Sophus-1.0.0/test/core ...

  3. vue 路由警告 Duplicate named routes definition

    今天在开发的时候,项目报了一个警告  Duplicate named routes definition ,这里记录一下解决方式和思路. 警告产生的原因根据提示内容,我们大概猜测是和路由的name有关 ...

  4. [转]基于GMap.Net的地图解决方案

    一 地图的加载与显示 关于GMap的介绍与使用可以看我以前的文章: GMap.Net开发之在WinForm和WPF中使用GMap.Net地图插件 GMap.Net是.Net下一个地图控件,可以基于Ht ...

  5. 比较IDEA与Eclipse

    在IDEA的项目中,聚合工程或普通的根目录是工程(Project).它的每一个子模块(Module),都可以使用独立的JDK和Maven.下面的子工程称为模块(Module),子模块(Module)之 ...

  6. java中基于swing库自定义分页组件

    一个swing的分页组件,代码见附件. //用法如下:  Class Test{      JTable table ;      StatusBar statusBar ;      Test(){ ...

  7. Pytorch Utils 总结

    Utils 从torch.nn.utils模块 clip_grad_norm_ 裁剪参数迭代的梯度范数. clip_grad_value_ 在指定值处剪辑可迭代参数的梯度. parameters_to ...

  8. 接口(interface):实例化时要覆盖所有抽象方法,否则仍为抽象类

    概述 /* * 接口的使用 * 1.接口使用interface来定义 * 2.Java中,接口和类是并列的两个结构 * 3.如何定义接口:定义接口中的成员 * * 3.1 JDK7及以前:只能定义全局 ...

  9. 2024年春秋杯网络安全联赛冬季赛部分wp

    部分附件下载地址: https://pan.baidu.com/s/1Q6FjD5K-XLI-EuRLhxLq1Q 提取码: jay1 Misc day1-简单算术 根据提示应该是异或 下载文件是一个 ...

  10. Nodify学习 四:预先连接

    前置 预先连接 可以从连接器创建预先连接,并可以放置在ItemContainer或Connector上(如果AllowOnlyConnectors为false). 预先连接的Content可以使用Co ...