當前位置:
首頁 > 知識 > Java反序列化 漏洞詳解

Java反序列化 漏洞詳解

在最近幾年間,不斷的有java反序列化漏洞被曝光。最近的幾次分別產生於spring框架以及Groovy還有文件上傳的java庫中,這些漏洞均得到了修復。

但在最近的研究中,安全人員發現java反序列漏洞遠遠不止上述幾處,該漏洞廣泛的存在於java庫中。

Java反序列化漏洞:

1. 漏洞產生原因:

在java編寫的web應用與web伺服器間java通常會發送大量的序列化對象例如以下場景:

HTTP請求中的參數,cookies以及Parameters。

RMI協議,被廣泛使用的RMI協議完全基於序列化

JMX 同樣用於處理序列化對象

自定義協議 用來接收與發送原始的java對象

在序列化過程中會使用ObjectOutputStream類的writeObject方法,在接收數據後一般又會採用ObjectInputStream類的readObject方法進行反序列化讀取數據。其代碼示例如下:

結果如圖:

上述代碼中的java類ObjectInputStream在執行反序列化時並不會對自身的輸入進行檢查,意味著一種可能性,即惡意攻擊者構建特定的輸入,在ObjectInputStream類反序列化之後會產生非正常結果。而根據最新的研究,利用這一方法可以實現遠程執行任意代碼。

為了進一步說明,可以針對對上述代碼進行了一點修改:

結果:

主要修改為自定義了一個被序列化的對象myobject,通過定義myobject實現了java序列化的介面並且定義了一種名為「readObject」的方法。通過對比上面例子的輸出,可以發現反序列化的相關數值被修改了,即執行的用戶自身的代碼。造成結果不同的關鍵在於readObject方法,java在讀取序列化對象的時候會先查找用戶自定義的readObject是否存在,如果存在則執行用戶自定義的方法。

2 漏洞觸發點尋找:

在之前的論述中可以發現利用該漏洞首先應找出readObject方法調用,在找到之後進行下一步的注入操作。一般可以通過以下方法進行查找:

(1)針對特定的java應用,對此漏洞的應用應首先尋找可以利用的「靶點」,即確定調用反序列化函數的地點。這可以通過對java應用進行源碼審計,例如找尋反序列化函數readObject調用情況。

(2)對於該應用的網路行為進行抓包,尋找序列化數據(在包數據中,序列化數據一般會以ac ed 00 05開頭)來進行判斷。

3.漏洞利用

在發現序列化數據之後,需要產生一個用於測試的pyload。這裡可以在github上下載一個工具「ysoserial」並執行下列指令:

當/ tmp / pwned文件被創建時說明測試已經開始,而後續的步驟將結合實例一起分析。

漏洞利用實例:

這裡以Jboss為例,Jboss利用的是HTTP協議,可以在任何埠上運行,默認安裝在8080埠中。而且Jboss與「JMXInvokerServlet」的通信過程中存在一個公開漏洞。JMX是一個java的管理協議,在Jboss中的JMXInvokerServlet可以使用HTTP協議與其進行通話。這一通信功能依賴於java的序列化類。

在默認安裝的Jboss中,JMXInvokerServlet的路徑恰好為http://localhost:8080/invoker/JMXInvokerServlet。如果用戶訪問一個web瀏覽器,實際上會返回一個原始的java對象,這中行為顯然存在一個漏洞。

這個漏洞可以很經常的通過互聯網被利用,由於jmxinvokerservlet與主要的Web應用程序在同一個埠上運行,因此它很少被防火牆所攔截。

基於以上原理可以通過以下指令收集jar文件來測試該漏洞是否可用:

由此可以以jmx作為Jboss接受外部輸入的點,可以利用java HTTP client包構建POST請求,post請求包中數據為使用ysoserial處理之後的構建代碼。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 java學習吧 的精彩文章:

想學java還不知道 這些怎麼行?
Java的標準,規範-介面-interface
Java操作Excel表格的 一種方法Java教程
深入理解Java虛擬機
Java學習 哪個更快:Java堆還是本地內存

TAG:java學習吧 |

您可能感興趣

stringr包詳解
async/await使用深入詳解
Windows窗體數據抓取詳解
Summary 數據類型詳解
詳解TogetherJS
Spectre 攻擊詳解
IntelliJ遠程調試詳解
詳解glide中crossfade引發的默認圖變形
WebExtension安全漏洞詳解 Part 1
OpenStack之Magnum容器編服務排引擎詳解
ThreadLocal實現原理詳解
詳解Siamese網路
.gitignore詳解及編寫
可視化CapsNet,詳解Hinton等人提出的膠囊概念與原理
linux進程信息查詢命令lsof詳解
HashMap詳解
vivo X20 Plus 屏幕指紋版全方位詳解
Artifact刀牌現場試玩套牌詳解
eBay運營之best match規則詳解
提升Windows系統性能全面優化詳解