天天看点

Java反序列化(七)Common Collection 5分析

jdk1.7

Commons Collections 3.1

先把poc放出来。

CC5中用了CC1的后半段链,在CC1中已经提到了,只要调用了lazyMap的get方法就可以。

在CC5中使用的是TiedMapEntry的toString方法来调用get方法的。

Java反序列化(七)Common Collection 5分析

而this.map在实例化对象的时候就可以设置值。

Java反序列化(七)Common Collection 5分析

那么我们现在只需要找到哪个类的readObject方法中有调用toString方法。

我们找到了BadAttributeValueExpException#readObject。

如下图,我们看到调用了valObj的tostring方法。而valObj是val属性的值。

Java反序列化(七)Common Collection 5分析

val属性定义如下

我们可通过反射设置val的值即可。

为什么不直接new一个BadAttributeValueExpException对象,如下图。在构造方法中,直接调用了val的toString方法,直接进行了rce。所以通过反射设置val值

Java反序列化(七)Common Collection 5分析