Common-Collections-利用链-4(CC4)漏洞分析
slug
series-status
status
summary
date
series
type
password
icon
tags
category
引言
- 根据我们前文介绍的各种利用链可以看出来,目前在Commons Collections中主要就是两种最终节点:反射命令执行、动态类加载。而唯一的区别就在前边是怎么引导到这里的了,而其关键当然还是在transform方法了,因此本文还是从ChainedTransformer的transform方法入手,开始分析CC4利用链。
CC4分析
- 这里我们还是从ChainedTransformer的transform入手,查看它的引用,最终可以发现TransformingComparator这个类引用了这个方法,同时它在Commons Collections 4中还是一个可以序列化的类:

- 接下来还是老生常谈,去找哪里调用了这个compare方法,但是这里其实不是特别好找,最后是在PriorityQueue类中的readObject调用了heapify方法:

- heapify调用了siftDown:

- sifwDown调用了siftDownUsingComparator:

- siftDownUsingComparator调用了compare方法:

- 此时我们可以写一下当前我们可以写出的利用代码:
- 执行该代码,会发现不会执行我们想要执行的命令:

- 从优先队列类的readObject方法入手调试一下这个代码
- 会发现是heapify方法中由于size小于2导致没有进入循环导致了这个问题:

- 于是我们尝试向其中加入两个对象:
- 但是会发现它仍然报错了:

- 其实原因就在于PriorityQueue的add方法会调用offer方法然后直接调用siftUp方法,导致尝试命令执行:

- 然后这里报错的原因其实和前边几篇文章中讲到的差不多,就是因为它会尝试本地执行命令,但是存在tfactory属性的问题,这个属性只有在readObject中会给它赋值,这里就导致了空指针问题
- 因此我们只要在add之前中断我们的命令执行利用链,在add之后再恢复即可:
- 效果:

- 至此,CC4就只有这些改变。
总结
- 汇总节点图:

参考视频:https://www.bilibili.com/video/BV1NQ4y1q7EU
Loading...