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中还是一个可以序列化的类:
notion image
  • 接下来还是老生常谈,去找哪里调用了这个compare方法,但是这里其实不是特别好找,最后是在PriorityQueue类中的readObject调用了heapify方法:
notion image
  • heapify调用了siftDown:
notion image
  • sifwDown调用了siftDownUsingComparator:
notion image
  • siftDownUsingComparator调用了compare方法:
notion image
  • 此时我们可以写一下当前我们可以写出的利用代码:
  • 执行该代码,会发现不会执行我们想要执行的命令:
notion image
  • 从优先队列类的readObject方法入手调试一下这个代码
  • 会发现是heapify方法中由于size小于2导致没有进入循环导致了这个问题:
notion image
  • 于是我们尝试向其中加入两个对象:
  • 但是会发现它仍然报错了:
notion image
  • 其实原因就在于PriorityQueue的add方法会调用offer方法然后直接调用siftUp方法,导致尝试命令执行:
notion image
  • 然后这里报错的原因其实和前边几篇文章中讲到的差不多,就是因为它会尝试本地执行命令,但是存在tfactory属性的问题,这个属性只有在readObject中会给它赋值,这里就导致了空指针问题
  • 因此我们只要在add之前中断我们的命令执行利用链,在add之后再恢复即可:
  • 效果:
notion image
  • 至此,CC4就只有这些改变。

总结

  • 汇总节点图:
notion image
参考视频:https://www.bilibili.com/video/BV1NQ4y1q7EU
Loading...

尚未开始
更新中
近期核心
已完结
已弃更

© River 2021-2025