jdk1.7
Commons Collections 3.1
先把poc放出来。
CC5中用了CC1的后半段链,在CC1中已经提到了,只要调用了lazyMap的get方法就可以。
在CC5中使用的是TiedMapEntry的toString方法来调用get方法的。

而this.map在实例化对象的时候就可以设置值。
那么我们现在只需要找到哪个类的readObject方法中有调用toString方法。
我们找到了BadAttributeValueExpException#readObject。
如下图,我们看到调用了valObj的tostring方法。而valObj是val属性的值。
val属性定义如下
我们可通过反射设置val的值即可。
为什么不直接new一个BadAttributeValueExpException对象,如下图。在构造方法中,直接调用了val的toString方法,直接进行了rce。所以通过反射设置val值