一、组件介绍
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系列也积累了较多的历史用户。版本细分如下图所示:
二、高危漏洞介绍
通过对ThinkPHP漏洞的收集和整理,过滤出其中的高危漏洞,可以得出如下列表:
从上表数据来看,ThinkPHP 3系列版本的漏洞多是2016/2017年被爆出,而ThinkPHP 5系列版本的漏洞基本为2017/2018年被爆出,从2020年开始,ThinkPHP 6系列的漏洞也开始被挖掘。
从中可以看出,ThinkPHP近年出现的高风险漏洞主要存在于框架中的函数,这些漏洞均需要在二次开发的过程中使用了这些风险函数方可利用,所以这些漏洞更应该被称为框架中的风险函数,且这些风险点大部分可导致SQL注入漏洞,所以,开发者在利用ThinkPHP进行Web开发的过程中,一定需要关注这些框架的历史风险点,尽量规避这些函数或者版本,则可保证web应用的安全性。
三、漏洞利用链
3.1、暴露面梳理
根据ThinkPHP的历史高危漏洞,梳理出分版本的攻击风险点,开发人员可根据以下图标,来规避ThinkPHP的风险版本,如下ThinkPHP暴露面脑图。
3.2、利用链总结
基于暴露面脑图,我们可以得出几种可以直接利用的ThinkPHP框架漏洞利用链,不需要进行二次开发。
3.2.1、ThinkPHP 2.x/3.0 GetShell
ThinkPHP低于3.0 - GetShell
ThinkPHP 低版本可以使用以上漏洞执行任意系统命令,获取服务器权限。
3.2.2、ThinkPHP 5.0 GetShell
ThinkPHP 5.0.x - GetShell
首先明确ThinkPHP框架系列版本。
根据ThinkPHP版本,如是0.x版本,即可使用ThinkPHP 5.x远程代码执行漏洞,无需登录,即可执行任意命令,获取服务器最高权限。
3.2.3、ThinkPHP 5.1 GetShell
ThinkPHP 5.1.x - GetShell
首先明确ThinkPHP框架系列版本。
根据ThinkPHP版本,如是1.x版本,即可使用ThinkP