组件攻击链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

利用链分析

  1. 路由解析:

    • ThinkPHP.php → Think.class.php → App.class.php
    • 解析module/action为view的fetch
  2. 模板处理:

    • HomebaseController.php → Controller.php → View.class.php
    • content参数被处理并写入缓存文件
  3. 代码执行:

    • 通过Storage::load加载恶意缓存文件执行代码

修复方案

  1. 修改HomebaseController和AdminbaseController中display/fetch函数修饰符为protected
  2. 升级到ThinkCMF 5系列

3.2 ThinkCMFX 2.2.x前台任意文件上传漏洞

漏洞原理

  • 需要普通用户权限(默认可注册)
  • 影响版本:1.6.0 <= ThinkCMFX <= 2.2.3

关键代码分析

  1. 漏洞位置:/application/Asset/Controller/UeditorController.class.php
  2. 缺陷代码:
    $allowed_exts=explode(',', $upload_setting[$filetype]);
    // 正确应为 $upload_setting[$filetype]['extensions']
    
  3. 结果:白名单失效导致任意文件上传

修复方案

升级到ThinkCMF 5系列

3.3 ThinkCMFX 2.x display函数代码注入漏洞

漏洞原理

  • 利用ThinkPHP 3.x的报错日志和模板缓存机制
  • 影响版本:1.6.0 <= ThinkCMFX <= 2.2.3

利用过程

  1. 加载不存在模板触发报错
  2. 将恶意代码写入日志文件(data/runtime/Logs/Portal)
  3. 包含日志文件执行代码

修复方案

同fetch函数漏洞

3.4 ThinkCMF 5.x后台远程代码执行漏洞(CVE-2019-6713)

漏洞原理

  • 影响版本:<=5.0.190111
  • CVSS评分:v2.0-7.5 / v3.0-9.8

利用链分析

  1. 控制数据库写入:通过RouteController.php的addPost插入payload
  2. 控制$allRoutes变量
  3. 单引号逃逸写入data/conf/route.php
  4. 触发执行恶意代码

修复方案

应用官方补丁: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

利用链分析

  1. AdminCategoryController.php的addPost接收输入
  2. portalCategoryModel.php的addCategory处理数据
  3. RouteModel.php的setRoute存储路由
  4. 最终写入data/conf/route.php执行

修复方案

同CVE-2019-6713

四、漏洞利用链总结

4.1 ThinkCMFX 2.x GetShell方法

  1. 利用fetch/display函数代码注入
  2. 利用前台任意文件上传漏洞
  3. 利用plugin类代码注入

4.2 ThinkCMF 5.x GetShell方法

  1. 获取后台账号密码
  2. 利用CVE-2019-6713或CVE-2019-7580执行代码

五、防御建议

  1. 版本升级:

    • ThinkCMFX 2.x用户应升级到ThinkCMF 5.x最新版
    • ThinkCMF 5.x用户应保持版本更新
  2. 代码修改:

    • 对fetch/display函数进行访问控制
    • 严格校验文件上传后缀
    • 对路由输入进行过滤
  3. 权限控制:

    • 加强后台访问控制
    • 限制普通用户权限
  4. 安全监控:

    • 监控data/runtime目录异常文件
    • 定期检查路由配置

六、参考资源

  1. 官方补丁:https://bst.cloudapps.cisco.com/bugsearch/bug/CSCvm13822
  2. CVE详细信息:
    • CVE-2019-6713
    • CVE-2019-7580
    • CVE-2018系列漏洞
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 缺陷代码: 结果:白名单失效导致任意文件上传 修复方案 升级到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系列漏洞