反序列化漏洞詳解

用途限制聲明,本文僅用于網絡安全技術研究、教育與知識分享。文中涉及的滲透測試方法與工具,嚴禁用于未經授權的網絡攻擊、數據竊取或任何違法活動。任何因不當使用本文內容導致的法律后果,作者及發布平臺不承擔任何責任。滲透測試涉及復雜技術操作,可能對目標系統造成數據損壞、服務中斷等風險。讀者需充分評估技術能力與潛在后果,在合法合規前提下謹慎實踐。

這次我們主要介紹反序列化漏洞,其中兩種比較常見的反序列化漏洞,Java反序列化漏洞和php反序列化漏洞,接下來著重介紹這兩種反序列化漏洞。

、Java 反序列化漏洞

Java 作為面向對象的編譯型語言,其序列化格式為二進制流(不可直接閱讀),漏洞觸發依賴readObject()方法(反序列化核心方法),且通常需要構造 “利用鏈(Gadget Chain)”—— 串聯多個類的方法,最終觸發惡意代碼執行,比 PHP 反序列化更復雜但危害范圍更廣。

1. 漏洞核心原理

(1)Java 序列化機制

Java 通過java.io.Serializable接口標記可序列化類,序列化由ObjectOutputStream.writeObject()完成(生成二進制流),反序列化由ObjectInputStream.readObject()完成(恢復對象)。
關鍵特性:若類重寫了readObject()方法,反序列化時會優先執行該方法中的邏輯—— 這是漏洞的核心觸發點。

(2)利用鏈(Gadget Chain)的必要性

Java 的安全設計較嚴謹,單個類的readObject()通常無法直接執行命令(如無Runtime.getRuntime().exec()這類危險代碼)。因此,攻擊者需要 “串聯多個合法類的方法”,形成一條 “利用鏈”:從readObject()出發,通過調用鏈觸發反射(Java 的反射機制可動態調用任意類的任意方法),最終執行惡意命令。
簡單理解:利用鏈 =?readObject()?→ 類 A 方法 → 類 B 方法 → ... → 反射執行命令。

(3)漏洞觸發流程

攻擊者分析目標 Java 程序依賴的第三方庫(如 Apache Commons Collections、Jackson)或框架(如 Struts2、WebLogic),尋找可串聯成利用鏈的類;

構造惡意對象:基于利用鏈,創建包含惡意邏輯的序列化對象(如通過反射執行calc.exe的對象);

將惡意二進制流通過請求(如 HTTP POST、T3 協議)傳入目標程序;

目標程序調用readObject()反序列化該流,觸發利用鏈,執行惡意代碼。

2. 典型代表案例

(1)里程碑漏洞:Apache Commons Collections 反序列化漏洞(CVE-2015-7501)

漏洞背景:2015 年披露,影響 Apache Commons Collections 3.1~3.2.1 版本(該庫是 Java 生態中最常用的工具庫之一,幾乎所有企業級 Java 項目都會依賴),是 Java 反序列化漏洞的 “開山之作”,直接推動了后續所有 Java 反序列化漏洞的研究。

漏洞原理(核心利用鏈):
關鍵類:TransformedMap( Commons Collections 中的映射類)、InvokerTransformer(實現Transformer接口,可通過反射調用方法)。

TransformedMap在反序列化時,會調用其transformValue()方法,而該方法會執行Transformer接口的transform()方法;

攻擊者將TransformedMap的Transformer設置為InvokerTransformer,并指定InvokerTransformer通過反射調用Runtime.getRuntime().exec()(執行系統命令);

當TransformedMap被反序列化時,transform()觸發InvokerTransformer的反射邏輯,最終執行命令。

利用方式:
攻擊者通過工具(如 ysoserial,專門生成 Java 反序列化利用鏈的工具)生成包含TransformedMap和InvokerTransformer的惡意二進制流,通過 HTTP 參數或協議(如 Struts2 的params參數)傳入目標程序,觸發readObject()后執行命令。

危害:覆蓋全球數百萬依賴 Commons Collections 的 Java 應用(如 Struts2、WebLogic、JBoss),導致大規模 RCE 攻擊,至今仍是滲透測試中的 “必測漏洞”。

(2)企業級漏洞:WebLogic T3 協議反序列化漏洞(CVE-2017-10271)

漏洞背景:影響 Oracle WebLogic Server 10.3.6.0、12.1.3.0、12.2.1.1、12.2.1.2 版本(WebLogic 是 Oracle 推出的企業級應用服務器,廣泛用于金融、政府、大型企業)。

漏洞原理:WebLogic 的T3協議(用于 WebLogic 服務器與客戶端 / 其他服務器通信)在處理序列化數據時,會調用readObject()反序列化數據。攻擊者可利用 WebLogic 內部的wls9_async_response組件,構造包含惡意利用鏈(如基于 Commons Collections 或 WebLogic 自身類的鏈)的序列化數據,通過 T3 協議發送給服務器。

利用方式:
攻擊者無需認證,直接向 WebLogic 的 T3 端口(默認 7001)發送惡意二進制流,服務器反序列化時觸發利用鏈,執行命令(如nc反彈 shell)。

危害:企業級服務器直接被遠程控制,可能導致核心業務數據泄露、業務中斷,甚至內網橫向滲透(因為 WebLogic 通常部署在企業內網)。

一、PHP 反序列化漏洞

PHP 作為腳本語言,其序列化格式為明文可閱讀的字符串,漏洞觸發高度依賴 PHP 的 “魔術方法”(具有特殊功能的預定義方法,通常以__開頭),本質是 “可控輸入觸發危險魔術方法”。

1. 漏洞核心原理

(1)PHP 序列化格式

PHP 對象序列化后會生成類似如下的字符串,結構清晰(便于攻擊者構造惡意數據):

php

// 格式:O:類名長度:"類名":屬性個數:{屬性1類型:屬性1值;屬性2類型:屬性2值;...}O:5:"User":2:{s:8:"username";s:5:"admin";s:8:"password";s:6:"123456";}// 含義:類名User(長度5),2個屬性:username(字符串,值admin)、password(字符串,值123456)

(2)關鍵觸發點:魔術方法

PHP 在反序列化過程中會自動觸發特定魔術方法,若這些方法中包含 “危險操作”(如eval()、system()、文件寫入等),且方法依賴的屬性值可由攻擊者控制,則漏洞成立。常見危險魔術方法:

__wakeup():反序列化之前觸發(最核心的觸發點之一);

__destruct():對象被銷毀時觸發(反序列化后若對象無引用,會自動觸發);

__toString():對象被當作字符串使用時觸發(如echo $obj、字符串拼接);

__call():調用不存在的方法時觸發;

__get():訪問不存在的屬性時觸發。

(3)漏洞觸發流程

攻擊者分析目標 PHP 程序,找到包含 “危險魔術方法” 的類(如存在__wakeup()調用eval($this->cmd)的類);

構造惡意對象:將危險方法依賴的屬性(如$cmd)設為惡意代碼(如system("whoami"));

將惡意對象序列化為字符串,通過請求參數(如 Cookie、POST 參數)傳入目標程序;

目標程序接收該字符串并執行unserialize()(反序列化),觸發魔術方法,執行惡意代碼。

2. 典型代表案例

(1)PHP 原生漏洞:CVE-2016-7124

漏洞背景:影響 PHP 5.6.25 之前、7.0.10 之前的版本,源于 PHP 的Session反序列化機制缺陷。

漏洞原理:
PHP 的Session存儲依賴session.serialize_handler(序列化處理器),默認值為php(格式:鍵名|序列化數據),而若配置為php_serialize(格式:序列化數據),且session.save_handler為自定義處理器(如user),則Session數據的反序列化過程可控。

利用方式:
攻擊者通過 Cookie 設置PHPSESSID對應的Session數據,構造包含惡意對象的序列化字符串(如觸發__wakeup()執行命令的對象)。當 PHP 讀取Session并反序列化時,直接觸發漏洞,實現 RCE。

危害:直接攻擊 PHP 解釋器本身,無需依賴第三方框架,影響所有使用存在漏洞版本 PHP 的網站。

(2)框架漏洞:ThinkPHP 5.x 反序列化漏洞(如 CNVD-2018-24942)

漏洞背景:影響 ThinkPHP 5.0.0~5.0.23、5.1.0~5.1.30 版本,是 PHP 框架中最典型的反序列化漏洞之一(ThinkPHP 是國內使用最廣泛的 PHP 框架)。

漏洞原理:
ThinkPHP 框架的Request類(處理 HTTP 請求)中存在__destruct()魔術方法,該方法會調用filterValue(),而filterValue()會執行call_user_func()(調用指定函數)。攻擊者可通過控制filter屬性(指定要調用的函數)和params屬性(函數參數),構造惡意序列化數據。

利用方式:
攻擊者通過cookie或GET/POST參數傳入惡意序列化字符串(如O:10:"think\Request":2:{s:8:"filter";s:6:"system";s:6:"params";a:1:{i:0;s:6:"whoami";}}),當框架對該數據反序列化時,__destruct()觸發call_user_func("system", "whoami"),執行系統命令。

危害:覆蓋大量使用 ThinkPHP 的中小型網站,攻擊者可直接獲取服務器權限,植入后門或竊取數據。

、PHP 與 Java 反序列化漏洞的核心區別

對比維度

PHP 反序列化漏洞

Java 反序列化漏洞

序列化格式

明文字符串(易構造、易調試)

二進制流(需工具生成,如 ysoserial)

核心觸發點

魔術方法(__wakeup()、__destruct()等)

重寫的readObject()方法

利用鏈復雜度

低(多為單個類的魔術方法直接觸發)

高(需串聯多個類形成利用鏈,依賴第三方庫)

影響范圍

主要影響 PHP 腳本 / 框架(如 ThinkPHP、Laravel)

影響所有 Java 應用(含企業級服務器、框架)

典型依賴

自身語法特性(魔術方法)

第三方庫(Commons Collections)或框架組件

、兩類漏洞的共同危害

無論 PHP 還是 Java 反序列化漏洞,其核心危害均為遠程代碼執行(RCE)?,攻擊者可實現:

完全控制服務器:執行任意系統命令(如whoami、rm -rf /),獲取服務器權限;

數據竊取 / 破壞:讀取數據庫配置、下載核心業務數據,或刪除關鍵文件;

植入后門:上傳 webshell(如 PHP 的一句話后門、Java 的jspx后門),長期控制服務器;

內網橫向滲透:若服務器位于內網,攻擊者可通過該服務器攻擊內網其他機器,擴大攻擊范圍

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

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

相關文章

SQL數據分析原代碼--創建表與簡單查詢

CREATE TABLE:創建表,定義字段名、類型、注釋INSERT INTO:插入數據,支持單條或批量插入SELECT:查詢數據,*表示所有字段,AS可起別名,DISTINCT去重WHERE:條件篩選&#xff…

k8s查詢ServiceAccount有沒有列出 nodes 的權限

要檢查 ServiceAccount xxxxxx:default 是否具有列出 nodes 的權限,可以使用以下方法:1. **使用 kubectl auth can-i 命令**這是最直接的方法,可以檢查特定用戶或 ServiceAccount 是否具有特定權限:kubectl auth can-i list nodes…

調試Python程序時,控制臺一直打印SharedMemory read faild

from tkinter import filedialog filedialog.askopenfilename()在使用 tkinter 時,只要一處罰,控制臺就不停打印 SharedMemory read faild ,雖然能用,但是大大的破壞了調試體驗,看到如下的提示,你說煩不煩&…

QRCode React 完全指南:現代化二維碼生成解決方案

前言 在數字化時代,二維碼已經成為連接線上線下的重要橋梁。無論是分享鏈接、支付碼、還是身份驗證,二維碼都扮演著不可或缺的角色。qrcode.react 是一個專門為 React 應用設計的二維碼生成庫,它能夠快速、靈活地生成各種樣式的二維碼&#…

xxe外部實體注入漏洞

https://owasp.org/www-project-top-ten XXE基礎 xxe外部實體注入 外部實體 xml(用于傳輸和存儲數據) html(用于顯示數據) 注入: SQL注入:用戶輸入數據被當做代碼執行 1輸入點 2.輸入數據可以結合到數據庫…

ros2獲取topic信息解析

ros2 ros_discovery_info topic 發布邏輯疑問: 在運行ros2 topic info -v /topic時,運行的是p3,如何與p1進程通訊的呢? 進程間理論上應該是IPC

FFmpeg合成mp4

本章主要介紹如何使用FFmpeg來將一個音頻文件和一個視頻文件合成一個MP4文件,以及在這個過程中我們如何對編碼過程進行封裝以及sample_rate 重采樣的過程(由于提供的音頻文件的編碼類型為S16,所以我們需要轉化為MP4支持的FLTP浮點類型&#x…

第十九章 使用LAMP架構部署動態網站環境

第十九章 使用LAMP架構部署動態網站環境 文章目錄第十九章 使用LAMP架構部署動態網站環境一、安裝Httpd服務1、安裝httpd服務2、啟動httpd服務3、設置允許通過防火墻4、驗證http服務是否成功二、安裝Mariadb服務1、安裝Mariadb服務2、啟動Mariadb服務三、安裝PHP服務1、列出可用…

Selenium應用中的核心JavaScript操作技巧

Selenium是一款強大的瀏覽器自動化測試工具,其操作瀏覽器的能力部分來自于其內嵌的JavaScript執行引擎。這使得Selenium不僅能夠模擬用戶在瀏覽器中的各種操作,還能執行復雜的JavaScript腳本,以實現更為精細的控制。本文將探討如何通過Seleni…

《Linux 基礎指令實戰:新手入門的命令行操作核心教程(第一篇)》

前引:當你第一次面對 Linux 系統中那片閃爍著光標、只有黑白字符的終端界面時,或許會和很多初學者一樣感到些許茫然:這些由字母和符號組成的 “指令” 究竟該如何輸入?它們又能完成哪些神奇的操作?其實,Lin…

03.【Linux系統編程】基礎開發工具1(yum軟件安裝、vim編輯器、編輯器gcc/g++)

目錄 1. 軟件包管理器 1.1 什么是軟件包 1.2 Linux軟件生態 1.3 yum具體操作 1.3.1 查看軟件包 1.3.2 安裝軟件 1.3.3 卸載軟件 1.3.4 注意事項(測試網絡) 1.3.5 yum指令集總結 1.4 yum源目錄、安裝源 2. Vim編輯器的使用 2.1 Linux編輯器-vim使用 2.2 vim的基本概…

3DMAX自動材質開關插件AutoMaterial安裝和使用方法

3DMAX自動材質開關AutoMaterial,是一個3dMax腳本插件,它根據材質編輯器中當前活動的材質自動將材質應用于3dMax中新創建的對象,也適用于您復制的沒有材質的對象。它作為一個開關,可以綁定到按鈕或菜單來打開和關閉它。該工具的創建…

Linux內核調優實戰指南

內核調優通常通過修改內核運行時參數來實現,這些參數的配置文件是 Linux 系統中核心的性能調整點。 內核調優配置文件名稱 /etc/sysctl.conf: 這是最傳統和主要的內核參數配置文件。系統啟動時或手動執行 sysctl -p 命令時會讀取并應用其中的設置。/etc/sysctl.d/*.…

Java基礎常見知識點

Java 中 和 equals() 的區別詳解_java中與equals的區別及理解-CSDN博客https://blog.csdn.net/m0_64432106/article/details/142026852深入理解Java中方法的參數傳遞機制 - 悟小天 - 博客園https://www.cnblogs.com/sum-41/p/10799555.html浮點型精度是什么意思?為…

OD C卷 -【高效貨運】

文章目錄高效貨運高效貨運 貨車的額定載貨量為wt;貨物A單件重量為wa,單件運費利潤為pa;貨物B單件重量wb,單件運費利潤為pb;每次出車必須包含A、B貨物,且單件貨物都不可分割,總重量達到額定的載貨量wt;每次出車能夠獲取…

手動解壓并讀取geo 文件 series_matrix_table_begin series_matrix_table_end之間的數據

手動解壓并讀取geo 文件 series_matrix_table_begin series_matrix_table_end之間的數據 1. 手動解壓并讀取文件內容 file_path <- “K:/download/geo/raw_data/GEO/GSE32967_series_matrix.txt.gz” 使用latin1編碼讀取文件所有行 con <- gzfile(file_path, “r”) all_…

主板硬件研發基礎--DP/DP++

現在的主板大多數使用的是比DP功能更加強大的DP++。 DisplayPort++(DP++)是 DisplayPort 技術的增強版,旨在提升與多種視頻接口的兼容性和連接性能。以下是關于它的詳細介紹: 功能特性 多協議兼容:DP++ 接口不僅支持 DisplayPort 標準的信號傳輸,還可以通過內部的轉換電…

科技行業新聞發布平臺哪家好?多場景推廣專業方案服務商推薦

面對海量得新聞發布平臺和碎片化的傳播場景&#xff0c;如何精準選擇推廣方案無疑是企業主面臨的一大難題&#xff0c;對于技術迭代迅速的科技行業更是如此。針對復雜的市場環境&#xff0c;一些專業的新聞發布平臺往往能夠針對性地給出營銷方案&#xff0c;并提供一定技術支持…

SystemVerilog 學習之SystemVerilog簡介

SystemVerilog簡介SystemVerilog是一種硬件描述和驗證語言&#xff08;HDVL&#xff09;&#xff0c;由Accellera開發并于2005年成為IEEE標準&#xff08;IEEE 1800&#xff09;。它在傳統Verilog基礎上擴展了高級驗證和設計功能&#xff0c;廣泛應用于數字電路設計、驗證及系統…

JavaWeb--day3--AjaxElement路由打包部署

&#xff08;以下內容全部來自上述課程及課件&#xff09; Ajax &#xff08;此章節純粹演示&#xff0c;因服務器端url鏈接失效&#xff0c;所以無法實戰&#xff09; 1. 同步與異步 同步&#xff1a; 瀏覽器頁面在發送請求給服務器&#xff0c;在服務器處理請求的過程…