天天看點

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分析