天天看點

Weblogic反序列化攻擊不依賴日志溯源攻擊時間

作者:俊傑說黑客

免責聲明

由于傳播、利用本頭條俊傑說黑客所提供的資訊而造成的任何直接或者間接的後果及損失,均由使用者本人負責,俊傑說黑客不為此承擔任何責任,一旦造成後果請自行承擔!

WebLogic是美國Oracle公司出品一款中間件産品,在國内使用也比較廣泛。從2015年開始至今,接連爆出過10幾個可直接利用的Java反序列化漏洞,相關漏洞的原理也越來越複雜。每次應急響應過程中,遇到Oracle公司的産品都會特别頭疼,因為其日志結構太過繁雜,相關介紹文檔也很少,想弄明白是需要下一番功夫的。

在日常的應急響應過程中,為了解決這個問題,我曾經反複搭建環境,反編譯各種Weblogic攻擊工具,跟蹤其源代碼,研究可以不依賴日志分析去快速解決Weblogic中間件應急響應的方法,流量監控裝置通常會有各種報警,混雜在一起的時候,也很難确定準确的攻擊時間。

對于早期Weblogic反序列化攻擊,我做應急響應的時候,ls -lah看一下Weblogic幾個目錄下新增的檔案及檔案時間屬性,就能判斷出攻擊者用的是哪一款Weblogic漏洞利用工具,而且還可以确定準确的攻擊時間,根本就不用去看日志。下面分享一下這個技巧,後續也會花很大篇幅講講Weblogic的日志結構及各種漏洞的應急溯源技巧,因為牽扯到Oracle公司的産品,都會很複雜。花很大精力:

Part2 具體研究過程

  • 虛拟機下測試

本地搭建Weblogic的環境如下:

Weblogic反序列化攻擊不依賴日志溯源攻擊時間

使用Weblogic反序列化工具進行攻擊,檢視伺服器的/temp/目錄,會生成一個.tmp格式的臨時檔案,然後檢視此檔案屬性,得知攻擊者執行指令的準确時間。

Weblogic反序列化攻擊不依賴日志溯源攻擊時間

将此tmp檔案拷貝出來,改擴充名為.jar,使用jadx-gui工具反編譯,即可看到攻擊代碼,證明此檔案确實是攻擊者遺留下來的。

Weblogic反序列化攻擊不依賴日志溯源攻擊時間

很多weblogic反序列化利用工具為了能通過T3協定回顯指令執行結果,都有類似的檔案落地,也有的weblogic反序列化利用工具為了實作無檔案落地回顯,是通過defineClass方法,從byte[]位元組碼中還原一個Class對象,實作無檔案落地注入構造回顯,這種應急方法不再适用。

  • Weblogic回顯的實作原理:

應急方法講完之後,接下來看一下相關工具為什麼會向/temp/目錄寫檔案,首先要大體講一下T3反序列化回顯的原理:

Weblogic對外提供Web服務,會開放7001等端口,這個端口是Web協定、T3協定、IIOP協定并存的,而T3協定允許用戶端遠端調用Weblogic服務端的類,然後把執行結果再傳輸給用戶端。是以攻擊者會在本地事先編譯好一個具有執行指令、上傳檔案等功能的java類,接着将編譯好的檔案上傳至伺服器上,通過URLClassLoader加載這個編譯檔案,在服務端綁定一個執行個體,進而實作T3下的Weblogic反序列化回顯,其實有點類似于RMI遠端方法調用的過程。

這裡要指出,有的Weblogic利用工具向伺服器寫入臨時檔案時,并沒有關閉檔案句柄,導緻檔案會一直存在伺服器上。

  • 常見Weblogic利用工具特征

1 首先看第一款實作Weblogic反序列化回顯的利用工具,是由冰蠍作者rebeyond大牛編寫的。我記得大概是15年年底時,冰蠍作者rebeyond第一個公布出Weblogic T3反序列化回顯方法,而且給出了相關的代碼。後續的研究者的回顯方法基本上與rebeyond的差不多,通過加載位元組碼方式實作無檔案落地回顯。

我們反編譯一下rebeyond的工具,看看代碼的具體實作過程:

Weblogic反序列化攻擊不依賴日志溯源攻擊時間

通過Connect按鈕事件跟進,一直跟到GenPayload類的Gen方法,很明顯可以看到,這款工具會向伺服器的臨時目錄寫入1vBLBK.tmp臨時檔案:

Weblogic反序列化攻擊不依賴日志溯源攻擊時間

之後再通過URLClassLoader類加載這個tmp檔案,在服務端綁定一個執行個體,進而實作T3回顯。

Weblogic反序列化攻擊不依賴日志溯源攻擊時間

2 接下來看另一款Weblogic反序列化利用工具:

Weblogic反序列化攻擊不依賴日志溯源攻擊時間

利用成功後,會在伺服器上生成H3y5ec.tmp臨時檔案。

Weblogic反序列化攻擊不依賴日志溯源攻擊時間

之後同樣使用URLClassLoader類加載,實作T3回顯。

Weblogic反序列化攻擊不依賴日志溯源攻擊時間

3 接下來看第3款Weblogic反序列化利用工具:

Weblogic反序列化攻擊不依賴日志溯源攻擊時間

可以看到,也會向伺服器寫一個臨時檔案

Weblogic反序列化攻擊不依賴日志溯源攻擊時間

同樣是使用URLClassLoader類加載,實作T3回顯:

Weblogic反序列化攻擊不依賴日志溯源攻擊時間

Part3 總結

1. 早期的Weblogic反序列化利用工具,為了實作T3協定回顯,都會向伺服器上寫入一個臨時檔案。近幾年随着無檔案落地的流行,Weblogic的回顯基本上都是找一個實作了defineClass方法的類,通過還原位元組碼方式實作回顯,這種應急方法不再适用。

2. 應急溯源過程中,日志量通常浩如煙海,而且容易被攻擊者删掉。在此情況,研究一下攻擊者常用工具的原理,總結一些小技巧,在日常應急溯源工作中,會事半功倍,省去很大的工作量。