组件攻击链ThinkCMF高危漏洞分析与利用
字数 2807 2025-08-15 21:32:39
ThinkCMF高危漏洞分析与利用教学文档
一、ThinkCMF组件概述
1.1 基本信息
ThinkCMF是一款基于PHP+MYSQL开发的中文内容管理框架,采用模块化设计理念:
- 框架提供基础管理功能
- 开发者可通过应用形式扩展功能
- 各应用可独立工作或协同工作
- 支持CMS、电商系统、视频网站等多种应用类型
1.2 版本体系
ThinkCMF有三个主要开发系列:
| 系列 | 基于框架 | 状态 |
|---|---|---|
| ThinkCMF V1.x | ThinkPHP 3.1.3 | 已停止维护 |
| ThinkCMFX 2.x | ThinkPHP 3.2.3 | 已停止维护 |
| ThinkCMF 5.x | ThinkPHP 5 | 当前主流版本 |
1.3 使用情况
- 全网使用量:2万+网站
- 主要分布:中国(75%+),集中在浙江、北京、山东、广东
二、高危漏洞列表
2.1 ThinkCMFX 2.x系列漏洞
| 漏洞名称 | 漏洞类型 | CVE编号 | 影响版本 |
|---|---|---|---|
| 任意文件删除漏洞 | 文件操作 | CVE-2018-16141 | <=2.2.3 |
| 多个SQL注入漏洞 | SQL注入 | CVE-2018-19894~19898 | <=2.2.3 |
| 前台文件上传漏洞 | 文件上传 | 无 | <=2.2.3 |
| 缓存Getshell(display函数) | 代码注入 | 无 | <=2.2.3 |
| 代码注入漏洞(fetch函数) | 代码注入 | 无 | <=2.2.3 |
| 代码注入漏洞(plugin类) | 代码注入 | 无 | <=2.2.3 |
2.2 ThinkCMF 5.x系列漏洞
| 漏洞名称 | 漏洞类型 | CVE编号 | 影响版本 |
|---|---|---|---|
| 后台任意代码执行漏洞1 | 代码注入 | CVE-2019-6713 | <=5.0.190111 |
| 后台任意代码执行漏洞2 | 代码注入 | CVE-2019-7580 | <=5.0.190111 |
三、关键漏洞深度分析
3.1 ThinkCMFX 2.x fetch函数代码注入漏洞
漏洞原理
- 攻击者可构造恶意URL向服务器写入任意文件
- 仅影响Windows系统
- 影响版本:1.6.0 <= ThinkCMFX <= 2.3.0
利用链分析
-
路由解析:
- ThinkPHP.php → Think.class.php → App.class.php
- 解析module/action为view的fetch
-
模板处理:
- HomebaseController.php → Controller.php → View.class.php
- content参数被处理并写入缓存文件
-
代码执行:
- 通过Storage::load加载恶意缓存文件执行代码
修复方案
- 修改HomebaseController和AdminbaseController中display/fetch函数修饰符为protected
- 升级到ThinkCMF 5系列
3.2 ThinkCMFX 2.2.x前台任意文件上传漏洞
漏洞原理
- 需要普通用户权限(默认可注册)
- 影响版本:1.6.0 <= ThinkCMFX <= 2.2.3
关键代码分析
- 漏洞位置:
/application/Asset/Controller/UeditorController.class.php - 缺陷代码:
$allowed_exts=explode(',', $upload_setting[$filetype]); // 正确应为 $upload_setting[$filetype]['extensions'] - 结果:白名单失效导致任意文件上传
修复方案
升级到ThinkCMF 5系列
3.3 ThinkCMFX 2.x display函数代码注入漏洞
漏洞原理
- 利用ThinkPHP 3.x的报错日志和模板缓存机制
- 影响版本:1.6.0 <= ThinkCMFX <= 2.2.3
利用过程
- 加载不存在模板触发报错
- 将恶意代码写入日志文件(
data/runtime/Logs/Portal) - 包含日志文件执行代码
修复方案
同fetch函数漏洞
3.4 ThinkCMF 5.x后台远程代码执行漏洞(CVE-2019-6713)
漏洞原理
- 影响版本:<=5.0.190111
- CVSS评分:v2.0-7.5 / v3.0-9.8
利用链分析
- 控制数据库写入:通过RouteController.php的addPost插入payload
- 控制$allRoutes变量
- 单引号逃逸写入
data/conf/route.php - 触发执行恶意代码
修复方案
应用官方补丁:https://bst.cloudapps.cisco.com/bugsearch/bug/CSCvm13822
3.5 ThinkCMF 5.x后台远程代码执行漏洞(CVE-2019-7580)
漏洞原理
- 通过portal/admin_category/addpost.html页面的"别名"参数注入
- 影响版本:<=5.0.190111
- CVSS评分:v2.0-6.5 / v3.0-8.8
利用链分析
- AdminCategoryController.php的addPost接收输入
- portalCategoryModel.php的addCategory处理数据
- RouteModel.php的setRoute存储路由
- 最终写入
data/conf/route.php执行
修复方案
同CVE-2019-6713
四、漏洞利用链总结
4.1 ThinkCMFX 2.x GetShell方法
- 利用fetch/display函数代码注入
- 利用前台任意文件上传漏洞
- 利用plugin类代码注入
4.2 ThinkCMF 5.x GetShell方法
- 获取后台账号密码
- 利用CVE-2019-6713或CVE-2019-7580执行代码
五、防御建议
-
版本升级:
- ThinkCMFX 2.x用户应升级到ThinkCMF 5.x最新版
- ThinkCMF 5.x用户应保持版本更新
-
代码修改:
- 对fetch/display函数进行访问控制
- 严格校验文件上传后缀
- 对路由输入进行过滤
-
权限控制:
- 加强后台访问控制
- 限制普通用户权限
-
安全监控:
- 监控
data/runtime目录异常文件 - 定期检查路由配置
- 监控
六、参考资源
- 官方补丁:https://bst.cloudapps.cisco.com/bugsearch/bug/CSCvm13822
- CVE详细信息:
- CVE-2019-6713
- CVE-2019-7580
- CVE-2018系列漏洞