ThinkCMF框架任意内容包含漏洞分析复现
字数 1128 2025-08-26 22:11:28

ThinkCMF框架任意内容包含漏洞分析复现

0x00 简介

ThinkCMF是一款基于PHP+MYSQL开发的中文内容管理框架,底层采用ThinkPHP3.2.3构建。该框架提供灵活的应用机制,开发者可以根据需求以应用形式进行扩展,各应用既能独立工作也能通过系统协同工作。

0x01 漏洞概述

攻击者可利用此漏洞构造恶意URL,向服务器写入任意内容的文件,实现远程代码执行(RCE)。

0x02 影响版本

  • ThinkCMF X1.6.0
  • ThinkCMF X2.1.0
  • ThinkCMF X2.2.0
  • ThinkCMF X2.2.1
  • ThinkCMF X2.2.2
  • ThinkCMF X2.2.3

0x03 环境搭建

  1. 下载ThinkCMFX 2.2.3版本
  2. 将文件放入phpstudy的WWW目录
  3. 访问/ThinkCMFX/路径,按照安装向导步骤进行安装
  4. 填写数据库信息(phpstudy默认数据库密码为root)
  5. 设置管理员账户信息
  6. 完成安装

0x04 漏洞利用

方法一:通过fetch方法写入文件

Payload:

?a=fetch&templateFile=public/index&prefix=''&content=<php>file_put_contents('test.php','<?php phpinfo(); ?>')</php>

利用步骤:

  1. 执行payload后页面显示空白
  2. 访问test.php文件,可看到phpinfo页面

方法二:通过display方法实现任意文件包含

Payload:

?a=display&templateFile=README.md

效果:
直接显示README.md文件内容

0x05 漏洞分析

  1. 入口分析: index.php显示项目路径在application目录下

  2. 控制器分析:

    • IndexController类继承自HomebaseController
    • 可通过g\m\a参数指定分组\模块\方法
    • 攻击者利用a参数直接调用HomebaseController中的public方法
  3. 漏洞函数分析:

    display函数:

    • 功能: 加载模板和页面输出
    • 参数: templateFile(模板文件地址), charset, contentType, content
    • templateFile参数经parseTemplate处理,当模板不存在时会在当前目录查找,导致文件包含

    fetch函数:

    • 功能: 获取页面内容,调用内置模板引擎
    • 参数: templateFile, content, prefix
    • 当content参数可控时,可注入PHP代码

0x06 修复方案

将HomebaseController.class.php和AdminbaseController.class.php中的display和fetch函数的修饰符从public改为protected。

补充说明

  1. 该漏洞利用需要服务器配置允许文件写入
  2. 实际攻击中可结合其他漏洞如文件上传扩大攻击面
  3. 建议升级到最新版本或应用官方补丁
ThinkCMF框架任意内容包含漏洞分析复现 0x00 简介 ThinkCMF是一款基于PHP+MYSQL开发的中文内容管理框架,底层采用ThinkPHP3.2.3构建。该框架提供灵活的应用机制,开发者可以根据需求以应用形式进行扩展,各应用既能独立工作也能通过系统协同工作。 0x01 漏洞概述 攻击者可利用此漏洞构造恶意URL,向服务器写入任意内容的文件,实现远程代码执行(RCE)。 0x02 影响版本 ThinkCMF X1.6.0 ThinkCMF X2.1.0 ThinkCMF X2.2.0 ThinkCMF X2.2.1 ThinkCMF X2.2.2 ThinkCMF X2.2.3 0x03 环境搭建 下载ThinkCMFX 2.2.3版本 将文件放入phpstudy的WWW目录 访问/ThinkCMFX/路径,按照安装向导步骤进行安装 填写数据库信息(phpstudy默认数据库密码为root) 设置管理员账户信息 完成安装 0x04 漏洞利用 方法一:通过fetch方法写入文件 Payload: 利用步骤: 执行payload后页面显示空白 访问test.php文件,可看到phpinfo页面 方法二:通过display方法实现任意文件包含 Payload: 效果: 直接显示README.md文件内容 0x05 漏洞分析 入口分析 : index.php显示项目路径在application目录下 控制器分析 : IndexController类继承自HomebaseController 可通过g\m\a参数指定分组\模块\方法 攻击者利用a参数直接调用HomebaseController中的public方法 漏洞函数分析 : display函数 : 功能: 加载模板和页面输出 参数: templateFile(模板文件地址), charset, contentType, content templateFile参数经parseTemplate处理,当模板不存在时会在当前目录查找,导致文件包含 fetch函数 : 功能: 获取页面内容,调用内置模板引擎 参数: templateFile, content, prefix 当content参数可控时,可注入PHP代码 0x06 修复方案 将HomebaseController.class.php和AdminbaseController.class.php中的display和fetch函数的修饰符从public改为protected。 补充说明 该漏洞利用需要服务器配置允许文件写入 实际攻击中可结合其他漏洞如文件上传扩大攻击面 建议升级到最新版本或应用官方补丁