如何进行cve - 2018 - 2893 WebLogic反序列化漏洞分析

如何进行CVE-2018-2893 WebLogic反序列化漏洞分析,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

一、背景介绍

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文件。

如何进行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中的得到方法调用了transfrom方法。

经典的sun.reflect.annotation。AnnotationInvocationHandler的调用方法中掉用了会方法,通过动态代理方式就可以调用这个方法。

如何进行cve - 2018 - 2893 WebLogic反序列化漏洞分析