ThinkPHP6.0.13反序列化漏洞如何具体分析及利用?

2026-04-02 17:180阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1455个文字,预计阅读时间需要6分钟。

ThinkPHP6.0.13反序列化漏洞如何具体分析及利用?

最近有点闲下来,找不到什么事干,比较难受。算了一下,看看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分钟。

ThinkPHP6.0.13反序列化漏洞如何具体分析及利用?

最近有点闲下来,找不到什么事干,比较难受。算了一下,看看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来让链子继续下去。

阅读全文