0


Weblogic安全漫谈(三)

本篇介绍

coherence.jar

中的漏洞利用链及后续绕过。

经历2015到2018的3年迭代后,Weblogic的黑名单逐渐完善,废掉CC反序列化更是釜底抽薪。另一方面也促使研究员去挖掘新组件新利用链,这篇介绍的就是@testbnull在发现Spring写文件链后[1],继续挖掘出

coherence.jar

中的漏洞利用链及后续绕过。因为10.3.6默认没有启用coherence,我们用12.2.1.3作为调试环境。

CVE-2020-2555

CC链的核心是

InvokerTransformer#transform

方法对

Method.invoke

的调用,Weblogic几百个lib中有没有类CC链呢?

    1. 查找调用了Method.invoke的方法
    1. 筛出可被序列化的方法所在类
    1. 剔除参数不可控的结果

注意到

com.tangosol.util.extractor.ReflectionExtractor#extract

,与

transform

不说丝毫不差至少也是大同小异。

图片

同包中也有与

ChainedTransformer

作用一致的

ChainedExtractor

ReflectionExtractor

实现了

ValueExtractor

接口满足类型要求:

图片

tabby的分析找到了关键的

com.tangosol.util.filter.LimitFilter#toString

,这样就能链上CC5开头用的

BadAttributeValueExpException

实现完整利用链。

图片

更进一步可以找到很多具有套娃能力的类方法:

图片

除此以外注意到期间出现过的MVEL包,方便地查到也可以

com.tangosol.coherence.rest.util.extractor.MvelExtractor#extract

作为sink执行MVEL表达式。

图片

根据关键类方法的变量要求构建利用链就行:

图片

extract:95, MvelExtractor (com.tangosol.coherence.rest.util.extractor)

extract:112, ReflectionExtractor (com.tangosol.util.extractor)
extract:83, ChainedExtractor (com.tangosol.util.extractor)

// extract:96, MultiExtractor (com.tangosol.util.extractor)

toString:581, LimitFilter (com.tangosol.util.filter)
readObject:86, BadAttributeValueExpException (javax.management)
invoke0:-1, NativeMethodAccessorImpl (sun.reflect)
invoke:62, NativeMethodAccessorImpl (sun.reflect)
invoke:43, DelegatingMethodAccessorImpl (sun.reflect)
invoke:498, Method (java.lang.reflect)
invokeReadObject:1170, ObjectStreamClass (java.io)
readSerialData:2178, ObjectInputStream (java.io)
readOrdinaryObject:2069, ObjectInputStream (java.io)
readObject0:1573, ObjectInputStream (java.io)

CVE-2020-2883

上文搜索"具有套娃能力的类"时,有一个与很多节点是

[ALIAS]

关系的抽象基类

com.tangosol.util.extractor.AbstractExtractor

compare

中调用了

extract

图片

这样就能链上CC2开头用的

PriorityQueue

实现完整利用链。

图片

extract:95, MvelExtractor (com.tangosol.coherence.rest.util.extractor)

extract:112, ReflectionExtractor (com.tangosol.util.extractor)
extract:83, ChainedExtractor (com.tangosol.util.extractor)

// extract:96, MultiExtractor (com.tangosol.util.extractor)

compare:79, AbstractExtractor (com.tangosol.util.extractor)
siftDownUsingComparator:722, PriorityQueue (java.util)
siftDown:688, PriorityQueue (java.util)
heapify:737, PriorityQueue (java.util)
readObject:797, PriorityQueue (java.util)
invoke0:-1, NativeMethodAccessorImpl (sun.reflect)
invoke:62, NativeMethodAccessorImpl (sun.reflect)
invoke:43, DelegatingMethodAccessorImpl (sun.reflect)
invoke:498, Method (java.lang.reflect)
invokeReadObject:1170, ObjectStreamClass (java.io)
readSerialData:2178, ObjectInputStream (java.io)
readOrdinaryObject:2069, ObjectInputStream (java.io)
readObject0:1573, ObjectInputStream (java.io)

Weblogic在后面的补丁将两个sink类加入了黑名单:

图片

CVE-2020-14645

图片

图片

UniversalExtractor

看似能调用任意类方法,实际受内部逻辑限制(尤其是

CanonicalNames#computeValueExtractorCanonicalName

)只能调到任意类的无参

get

/

is

方法,可以通过一些getter链触发JNDI完成利用。

extractComplex:432, UniversalExtractor (com.tangosol.util.extractor)
extract:175, UniversalExtractor (com.tangosol.util.extractor)
// extract:105, ChainedExtractor (com.tangosol.util.extractor)
// extract:96, MultiExtractor (com.tangosol.util.extractor)
compare:143, AbstractExtractor (com.tangosol.util.extractor)
siftDownUsingComparator:722, PriorityQueue (java.util)
siftDown:688, PriorityQueue (java.util)
heapify:737, PriorityQueue (java.util)
readObject:797, PriorityQueue (java.util)
invoke0:-1, NativeMethodAccessorImpl (sun.reflect)
invoke:62, NativeMethodAccessorImpl (sun.reflect)
invoke:43, DelegatingMethodAccessorImpl (sun.reflect)
invoke:498, Method (java.lang.reflect)
invokeReadObject:1170, ObjectStreamClass (java.io)
readSerialData:2178, ObjectInputStream (java.io)
readOrdinaryObject:2069, ObjectInputStream (java.io)
readObject0:1573, ObjectInputStream (java.io)
标签: 安全 webgl 网络

本文转载自: https://blog.csdn.net/moresec/article/details/135390821
版权归原作者 杭州默安科技 所有, 如有侵权,请联系我们删除。

“Weblogic安全漫谈(三)”的评论:

还没有评论