weblogic basedoman 加载两个项目_Weblogic常见高危漏洞的综合利用

WebLogic是Oracle公司出品的一个基于JAVAEE架构的中间件,用于开发、集成、部署和管理大型分布式Web应用。在国内外应用广泛,由于用的多,对其进行漏洞挖掘的大佬就多了,从而动不动就报个高危漏洞,打补丁都要累死人,最近两天又报多个高危漏洞了,本文不讲最新漏洞的利用,因为我也不知道怎么利用,通过整理和分析以前公开的高危漏洞,形成一个综合利用的工具,能够快速发现和利用Weblogic相关漏洞。

0x01 测试环境

要实现WebLogic的综合利用,就要有一个好的测试环境,目前官方支持的有10.3.6.0.0, 12.1.3.0.0, 12.2.1.3.0, 12.2.1.4.0, 14.1.1.0.0等多个版本,测试POC时,需要在多个版本下进行切换测试,比较麻烦,这里推荐一个QAX-A-Team大佬搞的一个环境工具,基于docker,能够在各个版本间快速切换,下载地址:
https://github.com/QAX-A-Team/WeblogicEnvironment

0x02 利用思路

整理WebLogic爆出的高危漏洞,Java反序列化漏洞比较多,同时还有XML反序列化、xxe、文件上传等等,基于T3协议、IIOP协议和Http协议的都有。由于反序列化漏洞官方采取黑名单的方式修复,意味着只要绕过黑名单限制就有新的POC,这种机制也就导致各种绕过,所以黑名单是不靠谱的。

针对反序列化漏洞的利用,大佬们已经整理出了多个利用链,用得最多、最出名的利用链还是ysoserial,下载地址:

https://github.com/frohoff/ysoserial
反序列化漏洞能执行任意命令,针对目标服务器能访问互联网的情况下可以直接反弹Shell到VPS上,如果目标服务器不能访问互联网,弹shell就没用了,这时就需要回显命令执行的结果,大佬们经过分析已经有很多针对Weblogic漏洞的回显思路。总结一下:如果是T3/T3S、IIOP协议,可通过漏洞绑定一个RMIShell(JNDIShell),然后通过JNDI去调用Shell实现命令执行回显、文件上传等功能。如果是HTTP协议,则需要通过漏洞在利用Payload中获取到Weblogic服务器的Response对象,使用Response对象会显命令执行结果。

0x03 命令回显

在反序列化漏洞中,Payload分为两类,一类是能直接执行命令的,如:ysoserial的CommonsCollections1利用链,另一类是间接执行命令的(就是需要通过别的路径加载Payload才能执行),如:JRMPClient。直接执行命令Payload根据利用链的不同又可分为两种,一种是通过链式调用执行命令,另外是借助TemplatesImpl类反序列化加载恶意字节码实现执行命令。T3或IIOP协议漏洞的回显利用,网上大佬的思路是在Payload中去使用org.mozilla.classfile.DefiningClassLoader加载恶意类的字节数组,实现绑定Shell回显,参见文章:
https://xz.aliyun.com/t/7228
我尝试过,在高版本的Weblogic中会提示DefiningClassLoader类无法找到,因此我找了一个功能相似的类weblogic.utils.classloaders.ClasspathClassLoader用于替代,同时所有版本的Weblogic都能用,ClasspathClassLoader类的defineCodeGenClass方法,可直接加载一个字节数组为类,代码如下:
byte[] buf = ClassFiles.classAsBytes(echoClass);final Transformer transformerChain = new ChainedTransformer(new Transformer[]{});final Transformer[] transformers = new Transformer[]{        new ConstantTransformer(ClasspathClassLoader.class),        new InvokerTransformer("getDeclaredConstructor",                new Class[]{Class[].class},                new Object[]{new Class[0]}),        new InvokerTransformer("newInstance",                new Class[]{Object[].class},                new Object[]{new Object[0]}),        new InvokerTransformer("defineCodeGenClass",                new Class[]{String.class, byte[].class, URL.class}, new Object[]{echoClass.getName(), buf, null}),        new ConstantTransformer(1)};
通过Payload链直接绑定一个weblogic.cluster.singleton.ClusterMasterRemote类的对象为RMIShell,具体代码参见项目:
https://github.com/5up3rc/weblogic_cmd
HTTP协议的回显利用,Weblogic 11g和12c的利用方式有所不同,主要是获取Response对象的方式不太一样,11g代码如下:
ExecuteThread thread= (ExecuteThread) Thread.currentThread();ServletRequestImpl req= (ServletRequestImpl) thread.getCurrentWork();ServletResponseImpl res=req.getResponse();

12c代码如下:

ExecuteThread thread= (ExecuteThread) Thread.currentThread();ContainerSupportProviderImpl.WlsRequestExecutor executor = (ContainerSupportProviderImpl.WlsRequestExecutor) thread.getCurrentWork();Field field = ContainerSupportProviderImpl.WlsRequestExecutor.class.getDeclaredField("connectionHandler");field.setAccessible(true);HttpConnectionHandler httpConn = (HttpConnectionHandler) field.get(executor);ServletRequestImpl req=httpConn.getServletRequest();ServletResponseImpl res=req.getResponse();

具体详情可参见文章:

https://xz.aliyun.com/t/5299

0x04 踩过的坑

在实现某些漏洞利用的时候碰到一些坑,这里记录一下:

1)、T3协议反序列化漏洞Payload的发送有两种方式,一种是可以通过InitialContext的bind方法来发送payload,参见文章

https://paper.seebug.org/1105/#rmi-iiop_1

另一种是采用上面提到的weblogic_cmd项目中的T3ProtocolOperation类来发送Payload,由于通过bind的方法的发送payload在不同的weblogic中会遇到不同的问题,如假死的情况,最后选择了第二种方法来发送Payload。

网络环境的影响,需要手动修改IOPProfile类,指定ip和端口,具体原理参见https://paper.seebug.org/1149/#nat

5ef8f36469fa8287c054d28b2079ce17.png

为避免假死问题,需要设置超时时间,iiop的超时weblogic.jndi.requestTimeout设置必须为字符串类型,不然不会生效很奇葩的问题。

5950e3e1d2696c733143095d9c678e4b.png

0x05 综合利用

实现了一个Weblogic漏洞利用的工具,目前支持CVE_2015_4852 、CVE_2016_0638、CVE_2016_3510、CVE_2017_10271、CVE_2017_3248、CVE_2018_2628、CVE_2018_2893、CVE_2018_2894 CVE_2018_3252、CVE_2018_3191、CVE_2018_3245、CVE_2019_2725 CVE_2019_2729、CVE_2020_2551、CVE_2020_2555这些吧,能回显的直接回显,不能回显的通过dnslog判断漏洞是否存在,源码已经放到了github上,地址:
https://github.com/21superman/weblogic_exploit

效果:

CVE_2020_2551

9b0d21a56956e9a29fd613ede44d463d.png

CVE_2019_2725

5642de66a215bd757984a6df51a89dbc.png

CVE_2018_3252

f9ab9bcb713faf4a410320627efc5b09.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值