WebLogic CVE-2020-14645分析

本文详细分析了 WebLogic 的 CVE-2020-14645 安全漏洞,探讨了在 MvelExtractor 和 ReflectionExtractor 被列入反序列化黑名单后的利用方式。通过 ExtractorComparator 类的 compare 方法,展示了如何利用此漏洞调用任意类的 extractComplex 方法,最终导致 JNDI 注入。虽然该漏洞局限于 WebLogic 12.2.1.4.0 版本,但对理解中间件安全具有学习价值。
摘要由CSDN通过智能技术生成

WebLogic CVE-2020-14645分析

在经过 CVE-2020-2555CVE-2020-2883 之后,WebLogic 把 MvelExtractor 和 ReflectionExtractor 列入反序列化黑名单,那么还怎么利用呢?这就有了 CVE-2020-14645

CVE-2020-14645 利用的是 WebLogic 12.2.1.4.0 Coherence 组件特有的 com.tangosol.util.extractor.UniversalExtractor 类,只有这个版本能用,因此比较局限

漏洞分析

调用链如下:

* PriorityQueue#readObject 
  * ExtractorComparator#compare
    * UniversalExtractor#extract 
     * UniversalExtractor#extractComplex 
       * JdbcRowSetImpl#getDatabaseMetaData
         * JdbcRowSetImpl#connect

先看到 ExtractorComparator 类,这个类实现了 Comparator 接口,因此可以用作 PriorityQueue 的比较器,看到 compare 方法,其调用了 this.m_extractor.extract 方法,m_extractor 属性和方法的参数 o1 都可控!
image-20211210185210992
这里我们选择调用的是 UniversalExtractor#extract 方法,这个方法可以调用到 extractComplex 方法
image-20211210185330393
CVE-2020-2555 一样,这个方法通过 findMethod 反射获取一个指定参数的 oTarget 类的方法
image-20211210185625707
通过 getCanonicalName 方法获取 sCName 变量值,这里跟进一下 getCanonicalName 方法
image-20211210185725095
跟进一下 getValueExtractorCanonicalName 方法,可以知道 if 条件肯定不满足,返回值为 null
image-20211210185805357
那么就调用 CanonicalNames#computeValueExtractorCanonicalName 方法,方法参数值可控!
image-20211210190008198
根据上面的代码,我们需要让 sName 参数以 () 结尾,参数 aoParam 长度为 0,假如 sName 为 getDatabaseMetaData(),则返回值为 databaseMetaData,如下例子就返回 databaseMetaData
image-20211210191524039
回到 UniversalExtractor#extractComplex 方法获取到的就是 JdbcRowSetImpl#getDatabaseMetaD

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值