DedeCMS 后台文件管理目录遍历漏洞修复教程

一、漏洞说明

该漏洞属于后台中危目录遍历漏洞,影响DedeCMS全版本,攻击者登录后台后,可利用文件管理功能,通过构造恶意路径参数,遍历网站服务器上的任意目录,查看敏感文件(如配置文件、数据库备份文件、管理员密码文件),获取网站敏感信息,为进一步攻击奠定基础。

  • 漏洞类型:目录遍历
  • 危害等级:中危
  • 影响版本:DedeCMS 全版本(含V5.7 SP2 ~ 5.7.118及衍生版本)
  • 漏洞文件:/dede/file_manage_main.php
  • 漏洞场景:后台文件管理功能中,程序未对用户提交的目录路径(path参数)进行严格校验,允许传入上级目录路径(如 ../),攻击者可构造恶意path参数,遍历服务器任意目录,查看敏感文件。

二、代码分析

漏洞核心原因:file_manage_main.php 文件中,后台文件管理功能未对path参数进行严格校验,未限制可遍历的目录范围,允许传入 ../ 等上级目录路径,攻击者可通过构造恶意path参数,突破目录限制,遍历服务器上的任意目录,查看敏感文件。

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

<?php
// 原漏洞代码(后台文件管理遍历逻辑,存在目录遍历漏洞)
require_once(dirname(__FILE__)."/config.php");
$path = $_GET['path']; // 未校验路径,允许传入上级目录

// 直接使用传入的路径,遍历目录
$dir = opendir($path);
while($file = readdir($dir)){
    if($file != '.' && $file != '..'){
        $filePath = $path.'/'.$file;
        echo $filePath.'<br/>';
    }
}
closedir($dir);
?>

代码问题分析:

  1. 路径未校验:path参数直接从GET请求中获取,未进行任何路径合法性校验,允许传入 ../ 等上级目录路径;
  2. 无目录范围限制:未限制可遍历的目录范围,攻击者可遍历服务器上的任意目录,包括网站根目录以外的敏感目录;
  3. 无权限细分:未对文件管理权限进行细分,普通管理员也可使用目录遍历功能,扩大漏洞利用范围;
  4. 无操作日志:未记录目录遍历操作,出现敏感信息泄露后无法追溯;
  5. 未过滤危险路径:未过滤 ../、../../ 等危险路径字符,直接使用路径进行遍历,导致目录突破。

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

// 1. 普通管理员登录后台,访问文件管理页面,URL为:http://你的网站域名/dede/file_manage_main.php?path=./upload;

// 2. 修改path参数为:path=../,构造URL:http://你的网站域名/dede/file_manage_main.php?path=../;

// 3. 提交请求,可遍历网站根目录下的所有文件(如 config.php、database.php);

// 4. 继续构造path=../../,可遍历服务器上级目录,查看更多敏感文件,获取数据库账号密码等信息。

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

本修复方案无需升级DedeCMS版本,仅修改file_manage_main.php文件,通过限制目录范围、校验路径合法性、过滤危险路径,封堵目录遍历漏洞,不影响正常文件管理功能,步骤如下:

步骤1:备份漏洞文件

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

步骤2:核心修复(限制目录+校验路径+过滤)

打开 /dede/file_manage_main.php 文件,替换为以下修复后的代码,核心是限制可遍历目录、校验路径合法性、过滤危险路径:

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

// 修复2:过滤和校验path参数,防止目录遍历
$path = $_GET['path'];
// 过滤 ../、../../ 等危险路径字符
$path = str_replace(array('../', '..', '/..', '..'), '', $path);
// 限制可遍历的目录范围(仅允许遍历网站根目录下的指定目录)
$allowDirs = array(
    realpath(dirname(__FILE__).'/upload'),
    realpath(dirname(__FILE__).'/templets'),
    realpath(dirname(__FILE__).'/cache')
);
$currentPath = realpath($path);
// 校验当前路径是否在允许的目录范围内
$isAllow = false;
foreach($allowDirs as $allowDir){
    if(strpos($currentPath, $allowDir) === 0){
        $isAllow = true;
        break;
    }
}
if(!$isAllow){
    exit('非法目录,禁止访问');
}

// 修复3:获取当前登录管理员信息,用于日志记录
$currentAdmin = $cuserLogin->getUserInfo();
$adminName = $currentAdmin['adminname'];
$logContent = "管理员【$adminName】于".date('Y-m-d H:i:s')."遍历目录,目录路径:$currentPath";
$dsql->ExecuteNoneQuery("INSERT INTO `#@__admin_log` (adminname, action, logtime, content) VALUES ('$adminName', 'file_manage_list', ".time().", '$logContent')");

// 保留原有遍历逻辑,确保正常文件管理功能
if(is_dir($currentPath)){
    $dir = opendir($currentPath);
    while($file = readdir($dir)){
        if($file != '.' && $file != '..'){
            $filePath = $currentPath.'/'.$file;
            // 输出时转义路径,防止XSS连带风险
            $showFilePath = htmlspecialchars($filePath, ENT_QUOTES);
            echo $showFilePath.'<br/>';
        }
    }
    closedir($dir);
}else{
    exit('目录不存在');
}
?>

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

  1. 缩小可遍历目录范围:根据网站实际需求,仅保留必要的可遍历目录(如 upload、templets),删除不必要的目录;
  2. 限制目录访问权限:通过服务器配置,禁止文件管理功能访问敏感目录(如 config、database 目录);
  3. 记录文件访问日志:添加上下文访问日志,记录管理员查看的具体文件,便于后续排查异常访问;
  4. 禁用目录列表功能:在服务器配置中禁用目录列表功能,即使突破限制,也无法查看目录内文件列表。

步骤4:验证修复效果

  1. 目录遍历测试:构造path=../、path=../../等恶意路径,提交后提示「非法目录,禁止访问」,修复生效;
  2. 低权限账号测试:使用非超级管理员账号登录,尝试访问文件管理页面,提示「无权限操作」,修复生效;
  3. 合法目录测试:访问允许的目录(如 upload、templets),可正常遍历文件,说明功能未受影响;
  4. 不存在目录测试:访问不存在的目录,提示「目录不存在」,修复生效;
  5. 日志测试:查看后台操作日志,可看到目录遍历操作记录,修复生效。

四、注意事项

  • 该漏洞可导致服务器敏感文件泄露,为攻击者进一步攻击提供条件,修复后务必全面测试,确保目录遍历被彻底封堵;
  • 若网站有自定义可访问目录,可在allowDirs数组中添加对应目录路径,确保不影响正常业务;
  • 修复后需检查文件管理功能,确保正常的文件查看、遍历功能不受影响;
  • 定期查看目录遍历操作日志,排查异常访问记录,若发现可疑操作,及时排查是否有攻击者利用漏洞;
  • 若修复后出现目录无法访问、文件列表无法显示的情况,可恢复备份文件,检查代码修改是否有误,或联系技术人员协助排查。

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

暂无评论

发送评论 编辑评论


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