JAVA反序列化之CommonCollections5利用链

JAVA反序列化之CommonCollections5利用链

Gat1ta 1,426 2022-01-23

前言

CC利用链快分析完了,本篇来分析一下CC5利用链。
首先看一下yso代码如下:
image.png
可以看到基本和CC6一样,只不过反序列化入口变成了BadAttributeValueExpException类,所以首先来看一下BadAttributeValueExpException类的定义。

BadAttributeValueExpException类

首先是构造函数,可以看到没什么东西,就是对val进行了个赋值。
image.png
接下来看一下readObject方法:
image.png
可以看到,readObject中也没有什么特殊的操作,根据yso代码分析,通过反射将BadAttributeValueExpException.val设置成了TiedMapEntry对象,应该是要通过toString触发调用链。
看一下TiedMapEntry.toString方法:
image.png
很明显,TiedMapEntry.toString调用了getValue,如果看过之前CC6的分析文章就会知道,getValue会调用LazyMap.get触发调用链。
知道了原理我们来写一个POC试试。

构造POC

最终代码如下:
image.png
运行代码得到如下界面:
image.png

调用链

BadAttributeValueExpException.readObject
TiedMapEntry.toString
TiedMapEntry.getValue
LazyMap.get
ChainedTransformer.transform
InvokerTransformer.transform
Runtime.exec