commons-collections 4
呜呜呜maven构建的好快,我猫猫都没看完
CC4了喵,加油喵
直接看yso的吧
PriorityQueue.readObjet->TransformingComparator.compare->CC3.InstantiateTransformer 之后
TransformingComparator
我们先分析一下cc3和cc4中不同之处的关键
点,就是这个compare方法,二者有什么不一样
CC3中
CC4中
二者所实现的接口不同,CC4实现了Serializable接口而CC3中没有
所以我们开始写代码咯
1 | TemplatesImpl templates = new TemplatesImpl(); |
前面一样的就直接贴过来了,不再说原理了,拿这里举例子,如果我们现在就想让它代码执行,只需要调用ChainedTransform的transform方法,那么我们开始继续向上
现在就应该很清楚怎么做了
我们接下来的逻辑应该是这样
1 | TransformingComparator transformingComparator = new TransformingComparator(chainedTransformer); |
我们进行序列化和反序列化,发现并没有弹出计算器,所以我们看看缺了什么
我们发现它进入heapify方法后没有进这个siftdown,所以我们的size是有问题的
我们看看有什么方法可以增加size,很简单,里面有一个add函数,我们调用它就可以增加长度
但是当我们add之后发现报错了
我们跟进去发现它也调用了compare方法
那它就直接会走错路,类似之前的情况,直接执行,没有走反序列化这条路
那怎么办,我们就像上次C6的时候,先给它赋值为不能直接执行的一个类,然后在走完add之后在给它加进去,就像这样
我们这里的代码如下
1 | Class transformingComparatorclazz = transformingComparator.getClass(); |
成功!
本文是原创文章,采用CC BY-NC-SA 4.0协议,完整转载请注明来自fault`s blog
评论 ()