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. 1. 查找调用了Method.invoke的方法

  2. 2. 筛出可被序列化的方法所在类

  3. 3. 剔除参数不可控的结果

注意到com.tangosol.util.extractor.ReflectionExtractor#extract,与transform不说丝毫不差至少也是大同小异。

![图片](https://img-
blog.csdnimg.cn/img_convert/f64da6fb343a737a4a3e28fcb5b1900f.png)

同包中也有与ChainedTransformer作用一致的ChainedExtractorReflectionExtractor实现了ValueExtractor接口满足类型要求:

![图片](https://img-
blog.csdnimg.cn/img_convert/cc319b512213718a09b690f006332ffa.png)

tabby的分析找到了关键的com.tangosol.util.filter.LimitFilter#toString,这样就能链上CC5开头用的BadAttributeValueExpException实现完整利用链。

![图片](https://img-
blog.csdnimg.cn/img_convert/e52d18c97e90c4981e1370006eb47f09.png)

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

![图片](https://img-
blog.csdnimg.cn/img_convert/faccb98b243532bf0e4833a46e865b3f.png)

除此以外注意到期间出现过的MVEL包,方便地查到也可以com.tangosol.coherence.rest.util.extractor.MvelExtractor#extract作为sink执行MVEL表达式。

![图片](https://img-
blog.csdnimg.cn/img_convert/34ba837c9a4c67bdbe877bf903b17cf1.png)

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

![图片](https://img-
blog.csdnimg.cn/img_convert/a7f1ab7a1752d7b2813d9bcf12217912.png)

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.AbstractExtractorcompare中调用了extract

![图片](https://img-
blog.csdnimg.cn/img_convert/7f85ed1589ff41f6dd4a0c6e0a3572c4.png)

这样就能链上CC2开头用的PriorityQueue实现完整利用链。

![图片](https://img-
blog.csdnimg.cn/img_convert/daaf7eb49fa97c43d5618379d61b37d3.png)

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类加入了黑名单:

![图片](https://img-
blog.csdnimg.cn/img_convert/3f3bd6a8943ad85791e06f32f1d4e90b.png)

CVE-2020-14645

![图片](https://img-
blog.csdnimg.cn/img_convert/4245b16f10648cbe3a26b16b1adc39e6.png)

![图片](https://img-
blog.csdnimg.cn/img_convert/e70327583b532cb71eb7c1ab0a9df2fd.png)

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)

学习计划安排


我一共划分了六个阶段,但并不是说你得学完全部才能上手工作,对于一些初级岗位,学到第三四个阶段就足矣~

这里我整合并且整理成了一份【282G】的网络安全从零基础入门到进阶资料包,需要的小伙伴可以扫描下方CSDN官方合作二维码免费领取哦,无偿分享!!!

如果你对网络安全入门感兴趣,那么你需要的话可以

点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!

①网络安全学习路线
②上百份渗透测试电子书
③安全攻防357页笔记
④50份安全攻防面试指南
⑤安全红队渗透工具包
⑥HW护网行动经验总结
⑦100个漏洞实战案例
⑧安全大厂内部视频资源
⑨历年CTF夺旗赛题解析

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值