前言
CC利用链快分析完了,本篇来分析一下CC5利用链。
首先看一下yso代码如下:
可以看到基本和CC6一样,只不过反序列化入口变成了BadAttributeValueExpException类,所以首先来看一下BadAttributeValueExpException类的定义。
BadAttributeValueExpException类
首先是构造函数,可以看到没什么东西,就是对val进行了个赋值。
接下来看一下readObject方法:
可以看到,readObject中也没有什么特殊的操作,根据yso代码分析,通过反射将BadAttributeValueExpException.val设置成了TiedMapEntry对象,应该是要通过toString触发调用链。
看一下TiedMapEntry.toString方法:
很明显,TiedMapEntry.toString调用了getValue,如果看过之前CC6的分析文章就会知道,getValue会调用LazyMap.get触发调用链。
知道了原理我们来写一个POC试试。
构造POC
最终代码如下:
运行代码得到如下界面:
调用链
BadAttributeValueExpException.readObject
TiedMapEntry.toString
TiedMapEntry.getValue
LazyMap.get
ChainedTransformer.transform
InvokerTransformer.transform
Runtime.exec