Apache Tomcat RCE漏洞复现(CVE-2025-24813)
漏洞描述
该漏洞的核心在于不完整PUT请求上传时 Tomcat 会使用了一个基于用户提供的文件名和路径生成的临时文件,且路径分隔符被替换为 .
。
若同时满足以下条件,攻击者可执行任意代码:
默认 Servlet 启用了写权限(默认禁用)
启用了部分PUT请求支持(默认启用)
应用程序使用 Tomcat 的基于文件的会话持久化(默认存储位置)
应用程序包含可被利用于反序列化攻击的库
受影响版本
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
根据里利用条件描述:
- 需要在conf/web.xml中,将DefaultServlet的readonly配置为false,启用写入功能
<init-param>
<param-name>readonly</param-name>
<param-value>false</param-value>
</init-param>
- 需要在conf/context.xml中,开启File文件会话存储
<Manager className="org.apache.catalina.session.PersistentManager">
<Store className="org.apache.catalina.session.FileStore"/>
</Manager>
PUT方法默认是启用状态
在项目包含可被利用于反序列化攻击的库(例如 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×tamp__1384=Wqmx0D2DnDBGQ7KDsKo4Cw4xROjhiHqQkF4D
若有错误,欢迎指正!o( ̄▽ ̄)ブ
Apache Tomcat RCE漏洞复现(CVE-2025-24813)的更多相关文章
- 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 ...
- CVE-2019-0232:Apache Tomcat RCE复现
CVE-2019-0232:Apache Tomcat RCE复现 0X00漏洞简介 该漏洞是由于Tomcat CGI将命令行参数传递给Windows程序的方式存在错误,使得CGIServlet被命令 ...
- Apache Solr Velocity模板注入RCE漏洞复现
Apache Solr Velocity模板注入RCE漏洞复现 一.Apache Solr介绍 Solr是一个独立的企业级搜索应用服务器,它对外提供类似于web-service的API接口,用户可以通 ...
- Apache Solr JMX服务 RCE 漏洞复现
Apache Solr JMX服务 RCE 漏洞复现 ps:Apache Solr8.2.0下载有点慢,需要的话评论加好友我私发你 0X00漏洞简介 该漏洞源于默认配置文件solr.in.sh中的EN ...
- TomCat中间件漏洞复现总汇
TomCat中间件漏洞复现 前言 在渗透测试过程中,遇到php的站相对多一点,所以对apache了解的也多一点.TomCat中间件的站了解的比较少一点,这是自己第一次搭建环境测试漏洞,所以在自己摸索的 ...
- Joomla 3.0.0 -3.4.6远程代码执行(RCE)漏洞复现
Joomla 3.0.0 -3.4.6远程代码执行(RCE)漏洞复现 一.漏洞描述 Joomla是一套内容管理系统,是使用PHP语言加上MYSQL数据库所开发的软件系统,最新版本为3.9.12,官网: ...
- Apache Shiro反序列化漏洞复现
Apache Shiro反序列化漏洞复现 0x01 搭建环境 获取docker镜像 Docker pull medicean/vulapps:s_shiro_1 重启docker system res ...
- 【Vulhub】CVE-2019-3396 Confluence RCE漏洞复现
CVE-2019-3396 Confluence RCE漏洞复现 一.环境搭建 选择的vulhub里的镜像,进入vulhub/Confluence/CVE-2019-3396目录下,执行 docker ...
- Apache Tomcat RCE(CVE-2017-12615 )漏洞案例分析
首先搭建tomcat环境: 下载当前项目的版本的tomcat
- Apache Flink 任意 Jar 包上传致 RCE 漏洞复现
0x00 简介 Flink核心是一个流式的数据流执行引擎,其针对数据流的分布式计算提供了数据分布.数据通信以及容错机制等功能.基于流执行引擎,Flink提供了诸多更高抽象层的API以便用户编写分布式任 ...
随机推荐
- Swagger注解-@ApiModel 和 @ApiModelProperty
@ApiModel 使用场景 在实体类上边使用,标记类时swagger的解析类 概述 提供有关swagger模型的其它信息,类将在操作中用作类型时自动内省 属性 属性名称 数据类型 默认值 说明 va ...
- Qt/C++音视频开发68-检查是否含有B帧/转码推流/拉流显示/监控拉流推流/海康大华宇视监控
一.前言 为什么需要判断视频文件是否含有B帧,这个在推流的时候很容易遇到这个问题,一般来说,没有B帧的视频文件,解码后的数据帧pts和dts都是顺序递增的,而有B帧的则未必,可能有些需要先解码后面显示 ...
- Qt编写可视化大屏电子看板系统19-横向柱状图
一.前言 横向柱状图的绘制这玩意当初还着实花费了一些时间,因为从v1版本开始,默认XY坐标轴是没有交换位置的处理的,也只有垂直的柱状图,要想换成横向的柱状图必须是自己拿到数据重新绘制,数据值的设置一般 ...
- 基于斜率-截距式参数方程的直线Hough变换
- 如何发现漏洞之我的多功能武器BurpSuite与全能插件
知识点 1.插件类-武装BurpSuite-漏洞检测&分析辅助 2.插件类-武装谷歌浏览器-信息收集&情报辅助 一.演示案例-插件类-武装BurpSuite-漏洞检测&分析辅助 ...
- UWP 系统通知测试
code: using System; using System.Collections.Generic; using System.IO; using System.Linq; using Syst ...
- 动图图解 | UDP就一定比TCP快吗?
学习&转载文章:"动图图解 | UDP就一定比TCP快吗?" UDP比TCP快吗? 相信就算不是八股文老手,也会下意识的脱口而出:"是". 这要追问为什 ...
- Java实现LDAP登录
LDAP的全称是Lightweight Directory Access Protocol(轻量级目录访问协议),是一种用于访问和管理分布式目录信息服务的应用协议.LDAP通常用于存储用户.组和其他组 ...
- 《SpringBoot》自动装配原理(简单易懂)
引入 先看SpringBoot的主配置类 @SpringBootApplication public class DemoApplication{ public static void main(St ...
- 对象流的序列化与反序列化:ObjectInputStream 和 ObjectOutputStream
1.对象流: ObjectInputStream 和 ObjectOutputStream2.作用:ObjectOutputStream:内存中的对象--->存储中的文件.通过网络传输出去:序列 ...