一、组件介绍
1.1 基本信息
ThinkCMF是一款基于PHP+MYSQL开发的中文内容管理框架。ThinkCMF提出灵活的应用机制,框架自身提供基础的管理功能,而开发者可以根据自身的需求以应用的形式进行扩展。每个应用都能独立的完成自己的任务,也可通过系统调用其他应用进行协同工作。在这种运行机制下,该系统的用户无需关心开发SNS应用是如何工作的,但他们之间又可通过系统本身进行协调,大大的降低了开发成本和沟通成本。
普通的CMS(内容管理系统)一般不能完成所有的需求,而因为CMS在ThinkCMF内部只是一个应用的形式存在,所以使用ThinkCMF可以用CMS来管理内容,用电影网站系统来管理视频,用电商系统来管理电商网站。这些程序不会影响,也可以模块化的增加或减少应用。
ThinkCMF自身层次非常清晰,逻辑也相当的严谨,特别是系统自带的protal应用非常适合PHP初学者使用。采用了国内优秀的开源php框架ThinkPHP使得ThinkCMF具备了优秀的性能以及良好的安全性。
1.2 版本介绍
ThinkCMF基于ThinkPHP框架进行了二次开发,经过逐年演化,逐渐成为了一款功能齐全的内容管理框架。ThinkCMF发展至今已有近8年历史,其核心开发系列共有以下三个,即ThinkCMF V1.x系列,ThinkCMFX 2.x系列,ThinkPHP 5.x系列。ThinkCMF同时与ThinkPHP的版本有以下对应关系:ThinkCMF V1.x系列版本基于ThinkPHP 3.1.3版本进行开发的、ThinkCMFX 2.x系列版本是基于ThinkPHP 3.2.3而进行开发、ThinkCMF 5.x系列版本是基于ThinkPHP 5版本开发的。其中ThinkCMF 1.x、ThinkCMFX 2.x官方已经停止了维护,ThinkCMF 5.x属于现阶段核心版本。而ThinkCMFX 2.x系列基于其优良的性能,也在过去积累了很多的历史客户,使得ThinkCMF 5与ThinkCMFX 2在市场上并驾齐驱。奇热版本细分如下图所示:
1.3 使用量及使用分布
根据全网数据统计,使用ThinkCMF的网站多达2万余个,其中大部分集中在国内,占使用量的75%以上。其中,浙江、北京、山东、广东四省市使用量最高,由此可见,ThinkCMF在国内被广泛应用。通过网络空间搜索引擎的数据统计和柱状图表,如下图所示。
(数据来源:FOFA)
二、高危漏洞介绍
通过对ThinkCMF漏洞的收集和整理,过滤出其中的高危漏洞,可以得出如下列表。
从中可以看出,ThinkCMF近年出现的高风险漏洞主要分布在ThinkCMF X2.x系列中,且其中主要集中在SQL注入漏洞,看过笔者上一篇ThinkPHP分析文章的读者都知道,ThinkPHP 3.x系列存在大量SQL注入风险函数,不出意外,这些风险函数最终都在二次开发的基础上被使用,造成了SQL注入漏洞。幸好,在ThinkCMF开发的的过程中,开发人员做过一些SQL注入的风险控制,这就使得这些SQL注入漏洞被利用的难度会大大增加,提高了框架被攻陷的门槛。
ThinkCMF X2.x系列除了以上的SQL注入的风险之外,另外最大的风险存在于ThinkCMF框架中Controller中的两个模板操作函数,fetch()以及display()函数,这两个函数在处理模板文件的过程中,存在漏洞,会导致任意代码注入,最终造成任意代码执行,且不需要任何权限,所以该漏洞的风险很高。
我们再看ThinkCMF 5系列,这个系列的安全性基于ThinkPHP 5的安全性提高也随之大大提高,近两年比较出名的就是CVE-2019-6713、CVE-2019-7580两个后台任意代码执行漏洞,这两个漏洞源于在后台处理router的时候,没有经过严格验证,导致攻击者可以通过单引号逃逸,将恶意代码注入到ThinkCMF数据库中,最终代码会产生在router.php文件中。
三、漏洞利用链
基于ThinkCMF高危漏洞,我们可以得出几种可以利用的ThinkCMF框架漏洞利用链。
3.1 ThinkCMFX 2.x GetShell
ThinkCMF 2.x - GetShell
· ThinkCMF 低版本可以使用以上代码注入漏洞,获取服务器权限。
3.2 ThinkCMF 5.x GetShell
ThinkCMF 5.x - GetShell
· 首先明确ThinkCMF框架系列版本。
· 首先需要获取到ThinkCMF的后台登录账号密码,执行ThinkCMF后台代码执行漏洞,即可getshell。
四、高可利用漏洞分析
从高危漏洞列表中,针对ThinkCMF高可利用漏洞进行深入分析。
4.1 ThinkCMF 2.x 代码注入漏洞(fetch函数)
4.1.1 漏洞简介
漏洞名称:ThinkCMF 2.x 代码注入漏洞(fetch函数)漏洞编号:无漏洞类型:代码注入CVSS评分:无漏洞危害等级:高危
4.1.2 漏洞概述
ThinkCMF是一款基于ThinkPHP+MySQL开发的中文内容管理框架。攻击者可利用此漏洞构造恶意的url,向服务器写入任意内容的文件,从而实现远程代码执行。该漏洞只适用windows系统。
4.1.3 漏洞影响
1.6.0 <= ThinkCMFX <= 2.3.0
4.1.4 漏洞修复
1.将 HomebaseController.class.php和AdminbaseController.class.php 类中 display 和 fetch 函数的修饰符改为 protected
2.目前厂商已不维护2.x版本,请受影响的用户使用升级到ThinkCMF 5系列或者采用以上临时解决方案
4.1.5 漏洞分析
分析该漏洞,我们要详细跟踪一下content参数值的流向,我们从程序入口开始往后跟踪:
Step1:首先通过ThinkPHP.php入口文件进入到Think.class.php文件中的start()函数;
在start()函数中,进入到App.class.php文件中的主函数run();
进入到文件中的exec()函数,exec函数的作用就是解析请求的路由,这一块的处理模式即为ThinkPHP的处理模式;