ThinkPHP6.0.13反序列化漏洞如何具体分析及利用?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1455个文字,预计阅读时间需要6分钟。
最近有点闲下来,找不到什么事干,比较难受。算了一下,看看TP的一些漏洞,ThinkPHP6.0.13是最新版,八月份有师傅提了一个issue,指出TP存在反序列化问题。
最近有点闲下来了,不找点事干比较难受,打算找点漏洞分析一下,于是就打算看看TP的一些漏洞,ThinkPHP6.0.13是TP的最新版,八月份有师傅提交了一个issue指出TP存在反序列化问题,网上也有些师傅分析了一波,不过断点下的比较多,而且部分方法没有阐明其用途,所以我也尝试详细的分析一波。下面先给出POC
分析
首先看看POC的起始点
发现起始点在Psr6Cache这个类,我们进入这个类,不过没有发现__destruct或者__wakeup等常见的反序列化起始魔术方法,推测应该在其父类AbstractCache这个抽象类中。跟入AbstractCache类
如图,成功发现本次反序列化链子的起始类。这里我们可以控制autosave这个属性为false,从而进入save方法。
回到Psr6Cache类查看这个方法
可以发现,pool属性和key属性我们都可控。因此可能存在两种路线,调用不同类的同名方法(getItem)。或者是直接尝试触发__call方法。我们来看看POC作者是怎么让反序列化进行下去的。
作者用构造方法传入了exp,exp其实就是在实例化Channel类。我们进入Channel类查看
Channel类中有一个__call方法,那么作者是选择触发__call来让链子继续下去。
本文共计1455个文字,预计阅读时间需要6分钟。
最近有点闲下来,找不到什么事干,比较难受。算了一下,看看TP的一些漏洞,ThinkPHP6.0.13是最新版,八月份有师傅提了一个issue,指出TP存在反序列化问题。
最近有点闲下来了,不找点事干比较难受,打算找点漏洞分析一下,于是就打算看看TP的一些漏洞,ThinkPHP6.0.13是TP的最新版,八月份有师傅提交了一个issue指出TP存在反序列化问题,网上也有些师傅分析了一波,不过断点下的比较多,而且部分方法没有阐明其用途,所以我也尝试详细的分析一波。下面先给出POC
分析
首先看看POC的起始点
发现起始点在Psr6Cache这个类,我们进入这个类,不过没有发现__destruct或者__wakeup等常见的反序列化起始魔术方法,推测应该在其父类AbstractCache这个抽象类中。跟入AbstractCache类
如图,成功发现本次反序列化链子的起始类。这里我们可以控制autosave这个属性为false,从而进入save方法。
回到Psr6Cache类查看这个方法
可以发现,pool属性和key属性我们都可控。因此可能存在两种路线,调用不同类的同名方法(getItem)。或者是直接尝试触发__call方法。我们来看看POC作者是怎么让反序列化进行下去的。
作者用构造方法传入了exp,exp其实就是在实例化Channel类。我们进入Channel类查看
Channel类中有一个__call方法,那么作者是选择触发__call来让链子继续下去。

