![v2-d2e73ff8129c76b1537eb1e3bb073625_1440w.jpg?source=172ae18b](http://img-03.proxy.5ce.com/view/image?&type=2&guid=5763b740-192a-eb11-8da9-e4434bdf6706&url=https://pic1.zhimg.com/v2-d2e73ff8129c76b1537eb1e3bb073625_1440w.jpg?source=172ae18b)
一、组件介绍
1.1 基本信息
ThinkPHP是一个快速、兼容而且简单的轻量级国产PHP开发框架,遵循Apache 2开源协议发布,使用面向对象的开发结构和MVC模式,融合了Struts的思想和TagLib(标签库)、RoR的ORM映射和ActiveRecord模式。
ThinkPHP可以支持windows/Unix/Linux等服务器环境,正式版需要PHP 5.0以上版本,支持MySql、PgSQL、Sqlite多种数据库以及PDO扩展。
1.2 版本介绍
ThinkPHP发展至今,核心版本主要有以下几个系列,ThinkPHP 2系列、ThinkPHP 3系列、ThinkPHP 5系列、ThinkPHP 6系列,各个系列之间在代码实现及功能方面,有较大区别。其中ThinkPHP 2以及ThinkPHP 3系列已经停止维护,ThinkPHP 5系列现使用最多,而ThinkPHP 3系列也积累了较多的历史用户。版本细分如下图所示:
![v2-d8f7b313a661882cbe630464ca25f923_b.jpg](http://img-03.proxy.5ce.com/view/image?&type=2&guid=5763b740-192a-eb11-8da9-e4434bdf6706&url=https://pic4.zhimg.com/v2-d8f7b313a661882cbe630464ca25f923_b.jpg)
二、高危漏洞介绍
通过对ThinkPHP漏洞的收集和整理,过滤出其中的高危漏洞,可以得出如下列表:
![v2-ddf198b8e8b633ff82e513daa5564df9_b.jpg](http://img-03.proxy.5ce.com/view/image?&type=2&guid=5763b740-192a-eb11-8da9-e4434bdf6706&url=https://pic2.zhimg.com/v2-ddf198b8e8b633ff82e513daa5564df9_b.jpg)
从上表数据来看,ThinkPHP 3系列版本的漏洞多是2016/2017年被爆出,而ThinkPHP 5系列版本的漏洞基本为2017/2018年被爆出,从2020年开始,ThinkPHP 6系列的漏洞也开始被挖掘。
从中可以看出,ThinkPHP近年出现的高风险漏洞主要存在于框架中的函数,这些漏洞均需要在二次开发的过程中使用了这些风险函数方可利用,所以这些漏洞更应该被称为框架中的风险函数,且这些风险点大部分可导致SQL注入漏洞,所以,开发者在利用ThinkPHP进行Web开发的过程中,一定需要关注这些框架的历史风险点,尽量规避这些函数或者版本,则可保证web应用的安全性。
三、漏洞利用链
3.1、暴露面梳理
根据ThinkPHP的历史高危漏洞,梳理出分版本的攻击风险点,开发人员可根据以下图标,来规避ThinkPHP的风险版本,如下ThinkPHP暴露面脑图。
![v2-239aab9195377cd713a39119f6775768_b.jpg](http://img-02.proxy.5ce.com/view/image?&type=2&guid=5763b740-192a-eb11-8da9-e4434bdf6706&url=https://pic1.zhimg.com/v2-239aab9195377cd713a39119f6775768_b.jpg)
3.2、利用链总结
基于暴露面脑图,我们可以得出几种可以直接利用的ThinkPHP框架漏洞利用链,不需要进行二次开发。
3.2.1、ThinkPHP 2.x/3.0 GetShell
![v2-e30517808d9dd82b923f7d5657ce4688_b.jpg](http://img-03.proxy.5ce.com/view/image?&type=2&guid=5763b740-192a-eb11-8da9-e4434bdf6706&url=https://pic1.zhimg.com/v2-e30517808d9dd82b923f7d5657ce4688_b.jpg)
ThinkPHP低于3.0 - GetShell
- ThinkPHP 低版本可以使用以上漏洞执行任意系统命令,获取服务器权限。
3.2.2、ThinkPHP 5.0 GetShell
![v2-52ba7fe85b0201a071569fb263f34426_b.jpg](http://img-03.proxy.5ce.com/view/image?&type=2&guid=5763b740-192a-eb11-8da9-e4434bdf6706&url=https://pic3.zhimg.com/v2-52ba7fe85b0201a071569fb263f34426_b.jpg)
ThinkPHP 5.0.x - GetShell
- 首先明确ThinkPHP框架系列版本。
- 根据ThinkPHP版本,如是5.0.x版本,即可使用ThinkPHP 5.x远程代码执行漏洞,无需登录,即可执行任意命令,获取服务器最高权限。
3.2.3、ThinkPHP 5.1 GetShell
![v2-c68cdd62df0376c8f8f476675fca19db_b.jpg](http://img-02.proxy.5ce.com/view/image?&type=2&guid=5763b740-192a-eb11-8da9-e4434bdf6706&url=https://pic4.zhimg.com/v2-c68cdd62df0376c8f8f476675fca19db_b.jpg)
ThinkPHP 5.1.x - GetShell
- 1. 首先明确ThinkPHP框架系列版本。
- 2. 根据Th