Apache Shiro550 漏洞(CVE-2016-4437):原理剖析與實戰 SOP

在 Web 安全領域,反序列化漏洞一直是威脅等級極高的存在,而 Apache Shiro 框架中的 Shiro550 漏洞(CVE-2016-4437),更是因利用門檻低、影響范圍廣,成為滲透測試中頻繁遇到的經典漏洞。本文將從 “原理拆解” 和 “實戰 SOP” 兩個維度,帶你徹底搞懂 Shiro550 漏洞,同時提供可直接落地的標準化操作流程。?

一、基本信息與原理?

Shiro550 漏洞,它并非框架功能的缺陷,而是“加密邏輯”與“反序列化”機制結合產生漏洞。?

1. 漏洞基本信息?

CVE 編號:CVE-2016-4437?影響范圍:Apache Shiro 1.2.4 及以下版本?漏洞類型:反序列化遠程代碼執行(RCE)?核心觸發點:Shiro 框架的 “RememberMe”(記住我)功能?

2. 漏洞原理: “記住我” 功能的加密解密邏輯?

Shiro 的 “RememberMe” 功能本是為了提升用戶體驗 —— 用戶登錄時勾選 “記住我”,下次訪問系統無需重新輸入賬號密碼,直接通過 Cookie 中的身份信息完成驗證。但正是這個功能的加密解密流程,埋下了漏洞的隱患。?
(1)正常流程:用戶身份信息的 “加密存儲”?
當用戶勾選 “RememberMe” 登錄時,Shiro 會按以下步驟處理用戶身份信息,最終生成 Cookie:?
用戶身份信息(如用戶名、權限)→ 序列化(將Java對象轉為字節流)→ AES加密(需使用框架內置的固定密鑰Key)→ Base64編碼(轉為可讀字符串)→ 寫入RememberMe Cookie?
(2)危險流程:服務端的 “解密反序列化”?
下次用戶訪問時,服務端會按 “反向流程” 驗證 RememberMe Cookie,而漏洞就出在這一步:?

  • 讀取請求中RememberMe Cookie的值 → Base64解碼(還原為AES加密后的字節流)→
    AES解密(用相同的固定Key,還原為序列化后的字節流)→ 反序列化(將字節流還原為Java對象)?
  • 這里的關鍵問題的是:Shiro 框架在 1.2.4 及以下版本中,使用了 “硬編碼的固定 AES
    密鑰”!開發者如果沒有手動修改默認密鑰,攻擊者就能利用這個已知的 Key,構造惡意的序列化數據 —— 先將 “惡意代碼(如執行命令)”
    封裝成 Java 對象,按正常流程進行序列化、AES 加密(用默認 Key)、Base64 編碼,然后將構造好的字符串放入RememberMe Cookie 中發送給服務端。?
  • 服務端接收到 Cookie 后,會毫無防備地執行 “解密→反序列化” 操作,此時惡意 Java 對象被還原,其中的惡意代碼也就被執行了
    —— 這就是 Shiro550 漏洞的核心原理:利用已知的固定密鑰,構造惡意序列化數據,觸發服務端反序列化 RCE。?

(3)抓包驗證:從數據包看 “RememberMe” 的痕跡?
理解原理后,我們可以通過抓包直觀看到 “RememberMe” 的交互過程:?

請求包:用戶勾選 “RememberMe” 登錄時,POST 請求的 Cookie 字段會新增rememberMe=on(此時還未生成加密后的身份信息);?響應包:服務端驗證通過后,會在 Set-Cookie 中先返回rememberMe=deleteMe(這是 Shiro 的常規清理操作),隨后生成真正的加密身份信息,返回rememberMe=xxxxx(長串密文)—— 這串密文就是經過 “序列化→AES 加密→Base64 編碼” 后的結果。?

如果看到這樣的 Cookie 交互,就可以初步判斷目標系統可能使用了 Shiro 框架,為后續漏洞驗證提供了線索。?

二、Shiro550 漏洞實戰 SOP:4 步搞定漏洞驗證與利用?

在實際生產或滲透測試中,我們需要一套標準化的操作流程(SOP),既能高效驗證漏洞,又能避免遺漏關鍵步驟。以下流程可直接復制粘貼到工作文檔中,按步驟執行即可。?

第一步:識別 “RememberMe” 功能是否存在?

漏洞的前提是目標系統啟用了 “RememberMe” 功能,因此第一步要確認該功能是否存在:?

訪問目標系統的登錄頁面(如http://xxx.com/login);?觀察登錄表單中是否有 “記住我”“自動登錄” 等選項(文字可能不同,但核心是 “記住登錄狀態” 的功能);?若有該選項,直接勾選并嘗試登錄(無需知道正確賬號密碼,后續驗證不依賴登錄成功);?用 Burp Suite 等工具抓包,查看請求包的 Cookie 字段中是否有rememberMe=on(登錄請求),或響應包的 Set-Cookie 中是否有rememberMe=deleteMe/ 長串密文 —— 存在則說明 “RememberMe” 功能已啟用。?

第二步:驗證目標是否使用 Apache Shiro 框架?

“RememberMe” 功能并非 Shiro 獨有,因此需要進一步確認框架是否為 Shiro:?
方法 1:從響應頭識別(最直接)?
查看登錄請求的響應頭(Response Headers),若存在以下字段,則大概率是 Shiro:?

Set-Cookie: JSESSIONID=xxxx; Path=/; HttpOnly(常規 Session,但需結合其他特征);?部分版本會在響應頭中直接暴露 Shiro 相關標識(如X-Shiro-Version,但并非所有版本都有)。?

方法 2:從 Cookie 特征識別?
若響應包中出現rememberMe=deleteMe,這是 Shiro 框架的 “標志性特征”—— 其他框架幾乎不會用 “deleteMe” 作為 RememberMe Cookie 的臨時值,因此看到該字段,可 90% 確定是 Shiro。?
方法 3:主動探測(輔助驗證)?
若上述方法無法確認,可構造一個無效的 RememberMe Cookie(如rememberMe=test)發送給服務端:?

若響應包中返回rememberMe=deleteMe,則說明服務端在處理 Shiro 的 RememberMe Cookie,進一步確認是 Shiro 框架;?若無任何響應,則可能不是 Shiro,或 “RememberMe” 功能未正常啟用。?

第三步:驗證 Shiro 版本是否 <=1.2.4?

Shiro550 漏洞僅影響 1.2.4 及以下版本,因此版本驗證是關鍵(若版本高于 1.2.4,直接排除該漏洞):?
方法 1:從框架文件暴露識別?
訪問目標系統可能存在的 Shiro 相關靜態文件,如:?

http://xxx.com/shiro.css(部分系統會暴露框架默認樣式文件);?http://xxx.com/WEB-INF/lib/shiro-core-1.2.4.jar(若存在文件泄露,可直接看到版本號);?

若文件中包含1.2.x(x<=4),則確定版本符合漏洞條件。?
方法 2:從漏洞響應特征識別(無版本泄露時用)?
由于 Shiro 1.2.4 及以下版本使用固定 AES 密鑰,而 1.2.5 及以上版本修復了該問題(允許自定義密鑰,但默認仍有風險,不過 550 漏洞特指 1.2.4 及以下),因此可通過 “密鑰驗證” 間接判斷版本:?

使用 Shiro 漏洞驗證工具(如 ShiroExploit),嘗試用默認密鑰(Shiro 1.2.4 及以下的固定密鑰)發送測試請求;?若工具返回 “密鑰匹配” 或 “可能存在漏洞”,則說明版本 <=1.2.4;若返回 “密鑰不匹配”,則版本可能高于 1.2.4,或開發者修改了默認密鑰。?

方法 3:從官方更新日志反推(輔助)?

  • 若目標系統是公開項目,可查詢其使用的 Shiro 版本(如 GitHub 倉庫的 pom.xml、package.json),對照
    Shiro 官方更新日志:Shiro 1.2.5 版本于 2016 年 5 月發布,明確修復了 “RememberMe”
    功能的反序列化漏洞,因此版本在 1.2.5 之前的均存在風險。?

第四步:使用自動化工具獲取 Key 并執行攻擊?

當確認 “存在 RememberMe 功能 + 是 Shiro 框架 + 版本 <=1.2.4” 后,即可通過工具自動化獲取密鑰并執行攻擊(手動構造數據效率低,工具可大幅提升成功率)。?
常用工具:ShiroExploit、ysoserial(需配合使用)?
操作步驟:?

準備工具:下載 ShiroExploit(如 v2.5 版本,支持自動爆破密鑰和執行命令),確保本地 Java 環境正常(工具依賴 Java 運行);?配置目標信息:打開工具,輸入目標 URL(如http://xxx.com/login),選擇 “RememberMe” Cookie 的位置(工具會自動識別,無需手動填寫);?爆破密鑰:工具內置 Shiro 1.2.4 及以下版本的默認密鑰列表,點擊 “爆破密鑰”—— 若成功匹配到密鑰(如kPH+bIxk5D2deZiIxcaaaA==),則說明漏洞可利用;?執行命令:選擇 “命令執行” 模塊,輸入要執行的命令(如whoami、ping xxx.xxx.xxx.xxx,建議先執行 ping 測試連通性),點擊 “執行”;?驗證結果:若命令執行成功(如 ping 測試在本地 Wireshark 中捕獲到數據包,或whoami返回服務器用戶名),則漏洞驗證完成;若執行失敗,可嘗試更換密鑰或檢查目標是否有防火墻攔截。?

注意事項:?

若目標系統修改了 Shiro 默認密鑰,工具爆破失敗,則無法利用 Shiro550 漏洞,需考慮其他漏洞;?生產環境中測試需獲得授權,禁止未授權滲透測試,避免觸犯法律。?

實戰平臺:

1.vulhub靶場:需要配置,具體請參考其他文章
2.vulfocus在線靶場:https://vulfocus.cn(在線靶場,注冊賬號可直接開啟環境)

工具推薦:

1.ShiroExploit
2.shiro_attack-4.7.0-SNAPSHOT-all (一體化工具,非常好用)(GitHub上有很多,我整理了一個版本比較新,并且可正常運行的放在“資源”里面,需要自取~)

三、總結:從原理到實戰的核心邏輯?

  • Shiro550 漏洞的本質,是 “固定密鑰 + 反序列化” 的雙重風險 —— 框架硬編碼的 AES
    密鑰讓攻擊者可構造惡意數據,而服務端未對反序列化數據進行校驗,直接執行還原操作,最終導致 RCE。?

  • 而實戰 SOP 的核心邏輯,是 “層層篩選”:先確認功能存在,再驗證框架類型,接著鎖定版本范圍,最后通過工具高效利用。這套流程不僅適用于

  • Shiro550 漏洞,也可遷移到其他 Web 漏洞的驗證中 —— 先明確漏洞觸發條件,再逐步排除非目標,最終精準定位可利用漏洞。?

  • 對于開發者而言,防范 Shiro550 漏洞的方法也很明確:升級 Shiro 到 1.2.5 及以上版本,同時手動修改 AES
    密鑰(避免使用默認密鑰),從根本上切斷攻擊者構造惡意數據的可能性。

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

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

相關文章

安卓開發者自學鴻蒙開發3持久化/數據與UI綁定

AppStorage,PersistentStorage與StorageLink AppStorage是應用全局狀態管理器,數據存儲于內存中,常見的如全局的黑暗模式,StorageLink是用來綁定AppStorage的鍵到ui上的工具,省去了用戶手寫代碼的無聊過程,PersistentStorage可以綁定AppStorage的鍵,自動持久化到磁盤,同時支持多…

GitHub宕機生存指南:從應急協作到高可用架構設計

GitHub宕機生存指南&#xff1a;從應急協作到高可用架構設計 摘要&#xff1a; GitHub作為全球開發者的協作中心&#xff0c;其服務穩定性至關重要。然而&#xff0c;任何在線服務都無法保證100%的可用性。本文深入探討了當GitHub意外宕機時&#xff0c;開發團隊應如何應對。我…

機器學習算法篇(十三)------詞向量轉化的算法思想詳解與基于詞向量轉換的文本數據處理的好評差評分類實戰(NPL基礎實戰)

目錄 一、詞向量原理介紹 (1). 詞向量的核心概念 (2). 傳統文本表示的局限性 1. 獨熱編碼&#xff08;One-Hot Encoding&#xff09; 2. 詞袋模型&#xff08;Bag of Words&#xff09; 3. TF-IDF (3). 詞向量的核心原理 (4). 主流詞向量模型 1. Word2Vec&#xff08;20…

JS自定義函數(2)

1. 變量的作用域全局變量定義&#xff1a;在函數外聲明的變量作用范圍&#xff1a;在整個JS文檔中生效生命周期&#xff1a;頁面關閉時銷毀局部變量定義&#xff1a;在函數內用 var 聲明的變量作用范圍&#xff1a;只能在函數內部使用生命周期&#xff1a;函數執行完畢時銷毀作…

【數據集】Argoverse 數據集:自動駕駛研究的強大基石

Argoverse數據集&#xff1a;自動駕駛研究的強大基石 在自動駕駛技術蓬勃發展的當下&#xff0c;高質量的數據集對于推動相關算法研究和模型訓練起著舉足輕重的作用。Argoverse 數據集便是其中的佼佼者&#xff0c;它為自動駕駛領域的眾多任務提供了豐富且優質的數據資源。 一、…

--- 哈希表和哈希沖突 ---

哈希&#xff08;散列&#xff09;方法是對插入的數據通過哈希函數計算出一個哈希地值&#xff0c;并將這個哈希地址作為儲存改數據的地址&#xff0c;這樣下次再查找這個數據時&#xff0c;只需要通過哈希函數再獲取到該地址然后直接去拿就好這樣就做到了不經過任何比較&#…

數學建模-評價類問題-優劣解距離法(TOPSIS)

1-AI帶你認識TOPSIS&#x1f4d8; 一、TOPSIS 方法簡介1. ??基本定義&#xff1a;????TOPSIS&#xff08;Technique for Order Preference by Similarity to an Ideal Solution&#xff09;??&#xff0c;中文通常稱為&#xff1a;???優劣解距離法?????逼近理想…

Go協程:從匯編視角揭秘實現奧秘

&#x1f680; Go協程&#xff1a;從匯編視角揭秘實現奧秘 #Go語言 #協程原理 #并發編程 #底層實現 引用&#xff1a; 關于 Go 協同程序&#xff08;Coroutines 協程&#xff09;、Go 匯編及一些注意事項。 &#x1f31f; 前言&#xff1a;重新定義并發編程范式 在當今高并發…

MySQL 事務(重點)

MySQL 這個東西注定是可能會被多個用戶/客戶端來同時訪問的&#xff0c;這是肯定的&#xff0c;MySQL 中存放的都是數據&#xff0c;數據可能有一個上層線程在用&#xff0c;也有可能另一個線程也要用...數據是被所有人共享的&#xff0c;所以就注定了 MySQL 這樣的服務在一個時…

uniapp:h5鏈接拉起支付寶支付

場景&#xff1a;APP內點擊支付寶支付&#xff0c;后臺返回類似鏈接https://qr.alipay.com/bax***********c3050 通常做法是&#xff0c;使用plus.runtime.openURL(deeplink);先打開瀏覽器&#xff0c;瀏覽器會提示打開支付寶&#xff0c;之后是支付流程。現在可以省略跳轉h5的…

吳恩達 Machine Learning(Class 3)

Week 11.1 K-means Cluster centroidK-means 是無監督學習中聚類算法的一種&#xff0c;核心在于更新聚類質心&#xff1b;首先將每個點分配給幾個聚類質心&#xff0c;取決于那些點離哪個質心更近&#xff1b;然后將幾個聚類質心移動到分配給他的所有點的平均值&#xff0c;不…

MyBatis 動態查詢語句詳解:讓 SQL 更靈活可控

MyBatis 動態查詢語句詳解&#xff1a;讓 SQL 更靈活可控 在日常的數據庫操作中&#xff0c;我們經常會遇到需要根據不同條件拼接 SQL 語句的場景。比如查詢用戶時&#xff0c;可能需要根據姓名、年齡、性別等多個條件進行篩選&#xff0c;而這些條件往往是動態變化的 —— 有時…

Java基礎語法three

一、一維數組一維數組初始化數據類型[] 數組名new 數據類型[數組長度]//動態初始化數據類型[] 數組名new 數據類型[]{值}//靜態初始化數據類型[] 數組名{值}數組長度一旦確定&#xff0c;就不可更改。數組是序排序&#xff1b;數組屬于引用數據類型的變量&#xff0c;數組的元素…

【數據結構】排序算法全解析:概念與接口

1.排序的概念及其運用 1.1 排序的概念 排序&#xff1a;所謂排序&#xff0c;就是使一串記錄&#xff0c;按照其中的某個或某些關鍵字的大小&#xff0c;遞增或遞減的排列起來的操作。 穩定性&#xff1a;假定在待排序的記錄序列中&#xff0c;存在多個具有相同的關鍵字的…

在 CentOS 7 上使用 LAMP 架構部署 WordPress

CentOS 7 LAMP 架構部署 WordPress全步驟本文將詳細介紹如何在 CentOS 7 系統上通過 LAMP&#xff08;Linux Apache MariaDB PHP&#xff09;架構部署 WordPress 博客平臺。 在CentOS 7上基于LAMP架構部署WordPress 一、系統基礎配置 1. 修改主機名&#xff08;本機IP&#…

Node.js導入MongoDB具體操作

在Node.js應用程序中&#xff0c;導入MongoDB是一項常見任務。本文將詳細介紹如何在Node.js中連接和操作MongoDB數據庫&#xff0c;包括安裝必要的包、配置連接、執行基本的CRUD操作等步驟。1. 安裝必要的包首先&#xff0c;確保你已經安裝了Node.js和npm。然后&#xff0c;通過…

HTML--pre標簽的作用

原文網址&#xff1a;HTML--pre標簽的作用-CSDN博客 簡介 本文介紹HTML里pre標簽的作用。 <pre> 元素表示預定義格式文本。里邊的文本會保留原格式&#xff0c;以等寬字體的形式展現出來&#xff0c;文本中的空白符&#xff08;比如空格和換行符&#xff09;都會顯示出…

機器學習--數據預處理

目錄 一、數據清洗&#xff1a;讓數據純凈如新 1、缺失值處理&#xff1a; 2、異常值處理 3、重復值處理 二、數據變換&#xff1a;重塑數據的 “形狀” 1、歸一化 2、標準化 三、總結與展望 機器學習小白必看&#xff1a;數據預處理實戰筆記 最近投身于機器學習的學習…

Python 數據可視化:Matplotlib 與 Seaborn 實戰

Python 數據可視化&#xff1a;Matplotlib 與 Seaborn 實戰????在當今數據驅動的時代&#xff0c;數據可視化成為了理解和傳達數據信息的關鍵手段。Python 作為一門強大的編程語言&#xff0c;擁有豐富的數據可視化庫&#xff0c;其中 Matplotlib 和 Seaborn 尤為突出。本文…

計算機網絡技術學習-day4《路由器配置》

目錄 一、路由器基礎認知 1. 路由器的核心功能 2. 路由器與交換機的區別 二、路由器配置基礎操作 1. CLI&#xff08;命令行界面&#xff09;模式體系 2. 基礎配置命令示例 &#xff08;1&#xff09;基礎信息配置 &#xff08;2&#xff09;接口IP地址配置&#xff08;…