PHP、JAVA、Shiro反序列化

目錄

一、PHP反序列化

二、JAVA反序列化

三、Shiro反序列化

Shiro-550 反序列化漏洞原理

Shiro-721 反序列化漏洞原理

Padding Oracle 漏洞補充:

防御措施:


一、PHP反序列化

主要是分為有類和無類:

1、有類:就有相關的魔術方法

2、無類:就只是序列化和反序列化

#PHP 反序列化
原理:未對用戶輸入的序列化字符串進行檢測,導致攻擊者可以控制反序列化過程,從而導致代碼
執行,SQL 注入,目錄遍歷等不可控后果。在反序列化的過程中自動觸發了某些魔術方法。當進行
反序列化的時候就有可能會觸發對象中的一些魔術方法。serialize() //將一個對象轉換成一個字符串
unserialize() //將字符串還原成一個對象觸發:unserialize 函數的變量可控,文件中存在可利用的類,類中有魔術方法:參考:https://www.cnblogs.com/20175211lyz/p/11403397.html__construct()	//創建對象時觸發
__destruct() 	//對象被銷毀時觸發
__call() 			//在對象上下文中調用不可訪問的方法時觸發
__callStatic() //在靜態上下文中調用不可訪問的方法時觸發
__get() 			//用于從不可訪問的屬性讀取數據
__set() 			//用于將數據寫入不可訪問的屬性
__isset() 		//在不可訪問的屬性上調用 isset()或 empty()觸發
__unset() 		//在不可訪問的屬性上使用 unset()時觸發
__invoke() 		//當腳本嘗試將對象調用為函數時觸發

二、JAVA反序列化

Java中的ObjectOutputStream類的writeObject()方法可以實現序列化,其作用把對象轉換成字節流,便于保存或者傳輸,而ObjectInputStream類的readObject()方法用于反序列化,作用就是把字節流還原成對象。

三、Shiro反序列化

Shiro反序列化主要是Apache Shiro提供了一個remember 的功能,用戶登錄成功后會生成經過加密并編碼的cookie,保存在瀏覽器中方便用戶的日常使用。

而服務器對cookie的處理流程就是先獲取瀏覽器上保存的cookie,然后將其base64解碼,再進行AES解密,再將其反序列化進行校驗。

而漏洞就是出現在這里,我們都知道AES它是一個硬編碼,他是有默認密鑰的,如果程序員沒有去修改或者過于簡單,那我們就可以進行cookie重構,先構造我們的惡意代碼,然后將惡意代碼進行序列化,然后AES加密(密鑰我們已經爆破出來了)再進行base64編碼,形成我們新的cookie,而服務器在處理時就會按照剛才的處理流程,就會在服務端觸發我們構造的惡意代碼。

過程:

  1. 加密過程:用戶在登錄時勾選 "Remember Me" 功能,Shiro 會將用戶身份信息序列化后進行 AES 加密和 Base64 編碼,然后存儲在 cookie 的 RememberMe 字段中。
  2. 解密過程:當用戶再次訪問服務器時,服務器會從 cookie 中提取 RememberMe 字段,進行 Base64 解碼和 AES 解密,最后反序列化以獲取用戶身份信息。
  3. 攻擊者利用:攻擊者可以利用已知的或通過爆破得到的 AES 密鑰,構造惡意的序列化對象,并按照 Shiro 的加密解密流程進行處理,生成惡意的 RememberMe cookie。當服務器處理這個惡意 cookie 時,就會觸發反序列化漏洞,執行攻擊者的代碼。

?

Shiro-550 反序列化漏洞原理

Shiro-550 漏洞的根本原因在于 Shiro 使用了一個硬編碼的 AES 加密密鑰,這個密鑰在 Shiro 的源碼中是默認的,因此任何人都可以使用這個密鑰來構造 RememberMe 的值,進而讓服務器執行反序列化操作。攻擊者可以創建一個惡意對象,對其進行序列化、AES 加密和 Base64 編碼,然后將其作為 RememberMe cookie 發送給服務器。服務器在解碼和反序列化這個 cookie 時,會執行其中的惡意代碼。

Shiro-721 反序列化漏洞原理

與 Shiro-550 類似,Shiro-721 漏洞也涉及到 RememberMe 功能,但它的 AES 加密密鑰通常是隨機生成的,不容易被猜測。攻擊者需要使用有效的用戶信息和 RememberMe cookie 來執行 Padding Oracle 攻擊,構造惡意的 RememberMe 字段進行反序列化攻擊。這種攻擊利用了 AES-128-CBC 模式中的 Padding Oracle 漏洞,允許攻擊者在不知道加密密鑰的情況下,通過填充錯誤的響應時間來推斷出加密過程中的秘密信息。

Padding Oracle 漏洞補充:

Padding Orace 四攻擊指應用在解密客戶端只提交的加密數據時,泄露了解密數據的分段填充是否合法的信息。攻擊者利用PaddingOrace可以在不知道加密程序所使用的密鉬的情況下,解密數據或者加密任意數據。即使應用程序確認加密數據的完整性,仍會導致該程序仍有敏感數據泄露和越權漏洞的風,險。
密文在被解密時,會被分成若干個數據塊,每個數據塊有固定的長度,常見的加密算法只大多為8字節或16字節。當數據不滿足指定長度時,程序會通過指定的方式進行填充,以方便在解密時能剝除這些這些填充數據。常見的填充標準有PKCS#7。當填充內容與標準要求的語法不一致時,會生成一個錯誤。如果應用在解析客戶端提交的加密信息時泄露了這個填充出錯的狀態信息,就形成了Padding Oracle。

550和721區別:

550是固定密鑰,721是隨機密鑰

防御措施:

  • 升級 Shiro 版本:更新到 1.2.4 以上的版本,不使用默認的加密密鑰,而是隨機生成密鑰。
  • 安全配置:不要使用公開的密鑰,避免將密鑰硬編碼在代碼中,確保密鑰的安全性。
  • WAF 防護:通過 Web 應用防火墻攔截異常的 RememberMe cookie 值,防止惡意利用。

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

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

相關文章

AM32電調學習解讀六:main.c文件的函數介紹

最近在學習AM32電調的2.18版本的源碼,我用的硬件是AT32F421,整理了部分流程處理,內容的顆粒度是按自己的需要整理的,發出來給有需要的人參考。按自己的理解整理的,技術能力有限,可能理解有誤,歡…

WebSocket實時雙向通信:從基礎到實戰

一、WebSocket 基礎概念 1. 什么是 WebSocket? 雙向通信協議:與 HTTP 的單向請求不同,WebSocket 支持服務端和客戶端實時雙向通信。 低延遲:適用于聊天室、實時數據推送、在線游戲等場景。 協議標識:ws://&#xff…

【算法】分支限界法和貪心、動態規劃、回溯、分治法的區別是

什么是分支限界法 分支限界法是一種用于求解最優化問題的算法,其核心思想是通過剪枝策略減少搜索空間。 分支限界法常以廣度優先或以最小耗費(最大效益)優先的方式搜索問題的解空間樹。 在分支限界法中,每一個活結點只有一次機會成為擴展結點。活結點一旦成為擴展結點,就…

[自動化集成] 使用明道云上傳附件并在Python后端處理Excel的完整流程

在企業日常自動化場景中,使用低代碼平臺如明道云搭建前端界面,結合自定義Python后端服務,實現靈活數據處理是一種高效的組合方式。本文將分享一個典型的集成用例:用戶通過明道云上傳文本和Excel附件,Python后端接收并解析這些信息,最終實現完整的數據處理閉環。 項目背景…

ubuntu下實時檢測機械硬盤和固態硬盤溫度

sudo apt update sudo apt install smartmontools然后,使用smartctl命令查看硬盤的詳細信息,包括溫度: sudo smartctl -a /dev/sda實時監控硬盤溫度 雖然smartctl不能直接實時顯示溫度,你可以使用watch命令結合smartctl來定期查…

游戲開發實戰(二):Python復刻「崩壞星穹鐵道」嗷嗚嗷嗚事務所---源碼級解析該小游戲背后的算法與設計模式【純原創】

文章目錄 奇美拉和隊列奇美拉被動技能多對多觀察者關系實現自定義元類奇美拉基類 管理奇美拉的隊列奇美拉隊列類心得體會擴展 規則定義工作相關奇美拉相關 奇美拉屬性 在本篇博文,我將介紹本項目的整體框架,以及“編碼規則”,這些規則保證了本…

Redis實現分布式鎖的進階版:Redisson實戰指南

一、為什么選擇Redisson? 在上一篇文章中,我們通過Redis原生命令實現了分布式鎖。但在實際生產環境中,這樣的基礎方案存在三大痛點: 鎖續期難題:業務操作超時導致鎖提前釋放不可重入限制:同一線程無法重復…

大語言模型 12 - 從0開始訓練GPT 0.25B參數量 MiniMind2 補充 訓練開銷 訓練步驟 知識蒸餾 LoRA等

寫在前面 GPT(Generative Pre-trained Transformer)是目前最廣泛應用的大語言模型架構之一,其強大的自然語言理解與生成能力背后,是一個龐大而精細的訓練流程。本文將從宏觀到微觀,系統講解GPT的訓練過程,…

SID 2025上的天馬,用“好屏”技術重構產業敘事

作為全球最具影響力的顯示行業盛會,SID國際顯示周不僅是技術比拼的舞臺,更是未來產業方向的風向標。SID 2025上的技術密度與產業動態,再一次驗證了這一定律。 Micro-LED、柔性OLED、裸眼3D、量子點、透明顯示等新技術在SID 2025集中亮相&…

【AI News | 20250520】每日AI進展

AI Repos 1、nanoDeepResearch nanoDeepResearch 是一個受 ByteDance 的 DeerFlow 項目啟發,旨在從零開始構建深度研究代理的后端項目。它不依賴 LangGraph 等現有框架,通過實現一個 ReAct 代理和狀態機來模擬 Deep Research 的工作流程。項目主要包含規…

釘釘開發之AI消息和卡片交互開發文檔收集

AI消息和卡片交互開發文檔 智能交互接口能力介紹 AI助理發消息(主動直接發送模式 AI 助理發消息 - 主動發送模式 AI 助理發消息 - 回復消息模式 AI 助理發消息 - Webhook 回復消息模式 Stream 模式響應卡片回傳請求事件 upload-media-files AI 助理發消息&a…

Redis中的事務和原子性

在 Redis 中,事務 和 原子性 是兩個關鍵概念,用于保證多個操作的一致性和可靠性。以下是 Redisson 和 Spring Data Redis 在處理原子性操作時的區別與對比: 1. Redis 的原子性機制 Redis 本身通過以下方式保證原子性: 單線程模型…

Apollo10.0學習——planning模塊(8)之scenario、Stage插件詳解二

scenario插件 插件總覽插件ValetParkingScenario階段一:StageApproachingParkingSpotprocess()方法 階段二:StageParkingprocess()方法FinishStage方法 插件PullOverScenarioIsTransferable: 場景切入條件 代碼邏輯階段一:PullOverStageAppro…

JVM的面試相關問題

面試中的相關問題主要是三塊 1.JVM 內存區域劃分 2.JVM 的類加載機制 3.JVM 的垃圾回收機制 JVM Java虛擬機 VM Virtual Machine 虛擬機,用 軟件 來 模擬 硬件 傳統意義上的"虛擬機" 更多指的是 VMWare, Virtual Box, Hyper-V, KVM(構造出虛擬的電腦,甚至可以…

win10使用nginx做簡單負載均衡測試

一、首先安裝Nginx: 官網鏈接:https://nginx.org/en/download.html 下載完成后,在本地文件中解壓。 解壓完成之后,打開conf --> nginx.config 文件 1、在 http 里面加入以下代碼 upstream GY{#Nginx是如何實現負載均衡的&a…

[特殊字符]車牌識別相機,到底用在哪?

停車場管理,快速通行不是夢 停車場大概是車牌識別相機最常見的 “工作崗位” 啦!以前進出停車場,取卡、刷卡、人工收費,一系列操作下來,高峰期的時候真的能把人等得不耐煩😫 現在有了車牌識別相機&#xff…

nosqlbooster pojie NoSQLBooster for MongoDB

測過可用,注意 asar的安裝使用報錯改用 npx asar extract app.asar app 路徑 C:\Users{computerName}\AppData\Local\Programs\nosqlbooster4mongo\resources npm install asar -g asar extract app.asar app 打開shared\lmCore.js 修改MAX_TRIAL_DAYS3000 修改…

組態王通過開疆智能profinet轉ModbusTCP網關連接西門子PLC配置案例

本案例是組態王通過使用開疆智能研發的Profinet轉ModbusTCP網關采集西門子1200PLC中數據的案例。 網關配置 首先來配置網關的參數,打開網關配置軟件“Gateway Configuration Studio” 由于組態王那側設定為ModbusTCP客戶端所以網關作為ModbusTCP服務器。新建項目…

大模型服務如何實現高并發與低延遲

寫在前面 大型語言模型(LLM)正以前所未有的速度滲透到各行各業,從智能客服、內容創作到代碼生成、企業知識庫,其應用場景日益豐富。然而,將這些強大的 AI 能力轉化為穩定、高效、可大規模應用的服務,卻面臨著巨大的挑戰,其中高并發處理能力和低響應延遲是衡量服務質量的…

k8s監控方案實踐補充(二):使用kube-state-metrics獲取資源狀態指標

k8s監控方案實踐補充(二):使用kube-state-metrics獲取資源狀態指標 文章目錄 k8s監控方案實踐補充(二):使用kube-state-metrics獲取資源狀態指標一、Metrics Server簡介二、kube-state-metrics實戰部署1. 創…