DedeCMS 后台缓存管理漏洞(文件篡改)修复教程

一、漏洞说明

该漏洞属于后台中危文件篡改漏洞,影响DedeCMS全版本,攻击者登录后台后,可利用缓存管理功能,篡改网站缓存文件,植入恶意代码,当用户访问网站时,恶意代码被执行,导致XSS攻击、恶意广告植入,甚至获取用户Cookie信息,危害网站用户安全和形象。

  • 漏洞类型:文件篡改
  • 危害等级:中危
  • 影响版本:DedeCMS 全版本(含V5.7 SP2 ~ 5.7.118及衍生版本)
  • 漏洞文件:/dede/cache_edit.php
  • 漏洞场景:后台缓存管理功能中,程序未对缓存文件内容进行过滤,未限制缓存文件的修改范围,攻击者可编辑缓存文件,写入恶意代码,篡改缓存内容,影响网站展示和用户访问。

二、代码分析

漏洞核心原因:cache_edit.php 文件中,后台缓存编辑功能未对缓存文件内容进行过滤,未限制可编辑的缓存文件范围,未校验缓存文件的合法性,攻击者登录后台后,可编辑任意缓存文件,写入恶意代码,篡改缓存内容,当缓存文件被调用时,恶意代码被执行。

关键漏洞代码(原文件片段):

<?php
// 原漏洞代码(后台缓存编辑逻辑,存在文件篡改漏洞)
require_once(dirname(__FILE__)."/config.php");
$filename = $_POST['filename'];
$content = $_POST['content'];

// 未限制缓存文件范围,未过滤内容,直接写入
$fp = fopen($filename, 'w');
fwrite($fp, $content);
fclose($fp);
echo '缓存文件编辑成功';
?>

代码问题分析:

  1. 内容未过滤:content参数直接从POST请求中获取,未进行任何过滤、转义处理,允许写入恶意代码(如XSS脚本、PHP代码);
  2. 文件范围未限制:未限制可编辑的缓存文件范围,攻击者可编辑任意缓存文件,甚至非缓存文件,扩大漏洞危害;
  3. 无权限校验:未对缓存编辑权限进行细分,只要登录后台,拥有缓存管理权限的账号均可利用该漏洞;
  4. 无文件合法性校验:未校验缓存文件的合法性,允许编辑非缓存文件,导致文件篡改风险;
  5. 无操作日志:未记录缓存编辑操作,出现文件篡改后无法追溯。

漏洞利用示例(仅用于学习,请勿非法测试):

// 1. 登录后台,访问缓存管理页面,选择任意缓存文件(如 index_cache.htm);

// 2. 在缓存内容中写入XSS恶意脚本:<script>alert(document.cookie)</script>;

// 3. 保存缓存文件,当用户访问网站首页时,缓存文件被调用,恶意脚本执行,劫持用户Cookie。

三、修复方法(原位修复,不升级、不影响模板)

本修复方案无需升级DedeCMS版本,仅修改cache_edit.php文件,通过限制缓存文件范围、过滤内容、添加权限校验,封堵文件篡改漏洞,不影响正常缓存管理功能,步骤如下:

步骤1:备份漏洞文件

备份 /dede/cache_edit.php 文件,备份路径示例:/dede/cache_edit.php.bak,避免修改错误导致后台缓存管理功能异常,便于后续回滚操作。

步骤2:核心修复(限制范围+过滤内容+权限校验)

打开 /dede/cache_edit.php 文件,替换为以下修复后的代码,核心是限制缓存文件范围、过滤恶意内容、添加权限校验和操作日志:

<?php
require_once(dirname(__FILE__)."/config.php");
// 修复1:添加权限校验,仅允许超级管理员编辑缓存文件
if($cuserLogin->getUserType() != 1){
    exit('无权限操作,请联系超级管理员');
}
$filename = $_POST['filename'];
$content = $_POST['content'];

// 修复2:限制缓存文件范围,仅允许编辑dede/cache目录下的缓存文件
$allowDir = realpath(dirname(__FILE__).'/cache');
$filename = realpath($filename);
// 允许编辑的缓存文件后缀(可根据实际缓存类型补充)
$allowExt = array('htm', 'html', 'php', 'txt');
$ext = pathinfo($filename, PATHINFO_EXTENSION);
if(strpos($filename, $allowDir) === false || !in_array($ext, $allowExt)){
    exit('非法缓存文件,禁止编辑');
}

// 修复3:过滤恶意内容,禁止写入XSS、PHP恶意代码
$forbidChars = array('<script>', '</script>', 'eval', 'exec', 'system', '<?php', '?>', 'document.cookie', 'alert(');
foreach($forbidChars as $char){
    if(strpos($content, $char) !== false){
        exit('缓存内容包含非法字符,禁止提交');
    }
}

// 修复4:转义特殊字符,进一步防范恶意内容注入
$content = htmlspecialchars($content, ENT_QUOTES);

// 修复5:添加操作日志,记录缓存编辑操作
$currentAdmin = $cuserLogin->getUserInfo();
$adminName = $currentAdmin['adminname'];
$logContent = "管理员【$adminName】于".date('Y-m-d H:i:s')."编辑缓存文件,文件路径:$filename";
$dsql->ExecuteNoneQuery("INSERT INTO `#@__admin_log` (adminname, action, logtime, content) VALUES ('$adminName', 'cache_edit', ".time().", '$logContent')");

// 保留原有写入逻辑,确保缓存编辑功能正常
$fp = fopen($filename, 'w');
fwrite($fp, $content);
fclose($fp);
// 设置文件权限为644,禁止执行
chmod($filename, 0644);
echo '缓存文件编辑成功';
?>

步骤3:额外加固(可选,提升安全性)

  1. 定期清理缓存文件:设置缓存文件有效期,定期自动清理过期缓存,减少恶意篡改后的影响范围;
  2. 备份缓存文件:定期备份cache目录下的缓存文件,若发现缓存被篡改,可及时恢复,降低损失;
  3. 限制缓存编辑频率:通过Session记录编辑时间,禁止短时间内多次编辑缓存,防止攻击者快速尝试注入恶意代码;
  4. 监控缓存文件变动:添加缓存文件变动监控,若发现文件被异常修改,及时提醒管理员排查。

步骤4:验证修复效果

  1. 低权限账号测试:使用非超级管理员账号登录后台,尝试编辑缓存文件,提示「无权限操作」,修复生效;
  2. 非法文件测试:尝试编辑非cache目录下的文件(如 /config.php),提示「非法缓存文件」,修复生效;
  3. 恶意内容测试:在缓存内容中写入XSS脚本或PHP代码,提示「缓存内容包含非法字符」,修复生效;
  4. 正常编辑测试:编辑合法缓存内容(如HTML、织梦缓存标签),可正常保存,说明功能未受影响;
  5. 日志测试:查看后台操作日志,可看到缓存编辑操作记录,修复生效。

四、注意事项

  • 修复后需测试网站缓存生成和展示功能,确保缓存正常更新,不影响网站访问速度和展示效果;
  • 若网站有自定义缓存文件,需在allowExt中添加对应后缀,避免影响正常业务;
  • 定期检查cache目录下的缓存文件,排查是否有恶意代码植入,若发现异常,及时恢复备份文件;
  • 建议仅给超级管理员分配缓存管理权限,其他后台账号取消该权限,减少漏洞利用入口;
  • 若修复后出现缓存编辑失败、缓存无法生成的情况,可恢复备份文件,检查代码修改是否有误,或联系技术人员协助排查。

本文由 流觞运维 原创整理,如需 DedeCMS 该漏洞代修复、全站点漏洞扫描、安全加固、挂马清理服务,可联系微信:lnmp_wuyi(备注:dede修复)。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇