DedeCMS 后台管理员账号越权漏洞(权限绕过)修复教程

一、漏洞说明

该漏洞属于后台中高危权限绕过漏洞,影响DedeCMS V5.7 SP2 ~ 5.7.118版本,攻击者登录后台后,可通过构造恶意请求,绕过权限校验,获取超级管理员权限,篡改管理员账号、新增管理员、控制整个后台,危害网站后台安全。

  • 漏洞类型:权限绕过、账号越权
  • 危害等级:中高危
  • 影响版本:DedeCMS V5.7 SP2 ~ 5.7.118及衍生版本
  • 漏洞文件:/dede/admin_edit.php
  • 漏洞场景:后台管理员编辑功能中,程序未对编辑的管理员ID进行权限校验,攻击者可通过修改请求中的管理员ID,编辑超级管理员账号,或新增超级管理员,实现权限越权。

二、代码分析

漏洞核心原因:admin_edit.php 文件中,后台管理员编辑功能未对编辑的管理员ID(id参数)进行权限校验,仅校验当前登录账号的权限,未限制编辑的账号级别,攻击者可通过修改id参数,编辑超级管理员账号,或新增超级管理员,实现权限越权。

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

<?php
// 原漏洞代码(后台管理员编辑逻辑,存在权限绕过漏洞)
require_once(dirname(__FILE__)."/config.php");
$id = $_POST['id'];
$adminName = $_POST['adminName'];
$pwd = $_POST['pwd'];
$userType = $_POST['userType']; // 1=超级管理员,2=普通管理员

// 仅校验当前登录账号是否有管理员权限,未校验编辑的账号ID和级别
if($cuserLogin->getUserType() <= 2){
    // 直接编辑管理员信息,未限制id和userType
    $sql = "UPDATE `#@__admin` SET adminname='$adminName', pwd='".md5($pwd)."', usertype=$userType WHERE id=$id";
    $dsql->ExecuteNoneQuery($sql);
    echo '管理员编辑成功';
}else{
    exit('无权限操作');
}
?>

代码问题分析:

  1. 权限校验不严格:仅校验当前登录账号有管理员权限,未校验编辑的管理员ID是否属于当前账号可编辑范围,允许普通管理员编辑超级管理员;
  2. 未限制账号级别:未限制userType参数,普通管理员可将自己或其他账号改为超级管理员,实现权限越权;
  3. 参数未过滤:id、adminName等参数未进行过滤,存在SQL注入连带风险;
  4. 无操作日志:未记录管理员编辑操作,出现权限越权后无法追溯。

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

// 1. 普通管理员登录后台,访问管理员编辑页面,抓包修改请求参数;

// 2. 将id改为超级管理员ID(如id=1),userType改为1,修改超级管理员密码;

// 3. 提交请求,编辑成功后,使用修改后的密码登录超级管理员账号,获取后台控制权。

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

本修复方案无需升级DedeCMS版本,仅修改admin_edit.php文件,通过加强权限校验、限制账号级别、过滤参数,封堵权限绕过漏洞,不影响正常管理员编辑功能,步骤如下:

步骤1:备份漏洞文件

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

步骤2:核心修复(加强权限校验+限制级别)

打开 /dede/admin_edit.php 文件,替换为以下修复后的代码,核心是加强权限校验、限制账号级别、过滤参数:

<?php
require_once(dirname(__FILE__)."/config.php");
// 修复1:过滤参数,防止SQL注入连带风险
$id = intval($_POST['id']);
$adminName = addslashes($_POST['adminName']);
$pwd = addslashes($_POST['pwd']);
$userType = intval($_POST['userType']); // 1=超级管理员,2=普通管理员

// 获取当前登录管理员信息
$currentAdmin = $cuserLogin->getUserInfo();
$currentAdminId = $currentAdmin['id'];
$currentUserType = $currentAdmin['usertype'];

// 修复2:加强权限校验,仅允许超级管理员编辑超级管理员,普通管理员仅可编辑自己
if($currentUserType == 1){
    // 超级管理员:可编辑所有管理员,但禁止将普通管理员改为超级管理员(可根据需求调整)
    if($userType == 1 && $id != $currentAdminId){
        exit('禁止将普通管理员升级为超级管理员');
    }
}elseif($currentUserType == 2){
    // 普通管理员:仅可编辑自己,禁止编辑其他管理员,禁止修改账号级别
    if($id != $currentAdminId || $userType != 2){
        exit('无权限操作,仅可编辑自己的账号,且不可修改权限级别');
    }
}else{
    exit('无权限操作');
}

// 修复3:校验管理员ID是否存在
$row = $dsql->GetOne("SELECT id FROM `#@__admin` WHERE id=$id");
if(empty($row)){
    exit('管理员ID不存在,禁止编辑');
}

// 修复4:密码非空校验,防止恶意清空密码
if(empty($pwd)){
    exit('密码不能为空');
}

// 保留原有编辑逻辑,确保正常功能
$sql = "UPDATE `#@__admin` SET adminname='$adminName', pwd='".md5($pwd)."', usertype=$userType WHERE id=$id";
$dsql->ExecuteNoneQuery($sql);

// 修复5:添加操作日志,记录管理员编辑操作
$logContent = "管理员【".$currentAdmin['adminname']."】于".date('Y-m-d H:i:s')."编辑管理员,编辑ID:$id,新账号:$adminName,权限级别:$userType";
$dsql->ExecuteNoneQuery("INSERT INTO `#@__admin_log` (adminname, action, logtime, content) VALUES ('".$currentAdmin['adminname']."', 'admin_edit', ".time().", '$logContent')");

echo '管理员编辑成功';
?>

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

  1. 限制超级管理员数量:仅保留1个超级管理员账号,删除多余的超级管理员,降低权限泄露风险;
  2. 禁止修改超级管理员ID:禁止编辑超级管理员的ID,防止攻击者通过修改ID绕过校验;
  3. 加强密码复杂度:在管理员编辑页面添加密码复杂度校验,要求密码包含字母、数字、特殊字符,长度不小于8位;
  4. 定期审计管理员账号:定期查看管理员列表,排查异常账号(如新增的未知管理员),及时删除或禁用;
  5. 限制管理员登录IP:仅允许指定IP登录超级管理员账号,防止攻击者非法登录后越权操作。

步骤4:验证修复效果

  1. 普通管理员测试:普通管理员登录后台,尝试编辑其他管理员或修改自己的权限级别,提示「无权限操作」,修复生效;
  2. 超级管理员测试:超级管理员尝试将普通管理员改为超级管理员,提示「禁止将普通管理员升级为超级管理员」,修复生效;
  3. 非法ID测试:尝试编辑不存在的管理员ID,提示「管理员ID不存在」,修复生效;
  4. 密码空值测试:尝试提交空密码,提示「密码不能为空」,修复生效;
  5. 正常编辑测试:超级管理员编辑自己的账号、普通管理员编辑自己的账号(不修改权限),可正常编辑,说明功能未受影响;
  6. 日志测试:查看后台操作日志,可看到管理员编辑操作记录,修复生效。

四、注意事项

  • 该漏洞可导致普通管理员越权成为超级管理员,控制整个后台,修复后务必全面测试,确保权限校验严格;
  • 若网站需要多个超级管理员,可修改代码中「禁止将普通管理员升级为超级管理员」的限制,确保符合业务需求;
  • 修复后需检查所有管理员账号,排查是否有异常账号(如权限被篡改的账号),及时调整;
  • 定期查看后台操作日志,排查异常编辑操作,若发现可疑记录,及时排查是否有攻击者利用漏洞;
  • 若修复后出现管理员编辑失败、无法保存的情况,可恢复备份文件,检查代码修改是否有误,或联系技术人员协助排查。

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

暂无评论

发送评论 编辑评论


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