DedeCMS组合漏洞分析
字数 1499 2025-08-25 22:59:02

DedeCMS组合漏洞分析与利用教学文档

1. 概述

本文档详细分析DedeCMS中的两个安全漏洞及其组合利用方式:

  1. DedeCMS代码注入漏洞(CVE-2022-36216)
  2. DedeCMS任意文件删除漏洞(CVE-2022-30508)

这两个漏洞单独使用时存在局限性,但组合利用可以形成更严重的攻击链。

2. 代码注入漏洞(CVE-2022-36216)

2.1 漏洞影响文件

  • /uploads/dede/member_toadmin.php
  • /uploads/include/common.inc.php

2.2 漏洞流程分析

  1. 参数传入流程

    • 通过/uploads/include/common.inc.php处理用户输入
    • 调用_RunMagicQuotes()函数
    • 使用addslashes($svar)对输入进行转义
  2. 漏洞触发点

    $arr_password[$id] = "{$timestamp}";
    $content = " <?php \r\n\ $str_password = '".json_encode($arr_password)."' ; ";
    $fp = fopen($filename, 'w');
    
  3. 关键代码片段

    // common.inc.php
    if (!defined('DEDEREQUEST')) {
        foreach(Array('_GET','_POST','_COOKIE') as $_request) {
            foreach(
    

\[_request as $_k => $_v) { if($_k == 'nvarname') ${$_k} = $_v; else ${$_k} = _RunMagicQuotes($_v); } } } function _RunMagicQuotes(&$svar) { if(!get_magic_quotes_gpc()) { if(is_array($svar)) { foreach($svar as $_k => $_v) $svar[$_k] = _RunMagicQuotes($_v); } else { $svar = addslashes($svar); } } return $svar; } ``` ### 2.3 漏洞成因 1. `_RunMagicQuotes()`使用`addslashes()`转义输入 2. `json_encode()`对反斜杠进行二次转义,导致单引号逃逸 3. 逃逸的单引号与开头单引号闭合,实现代码注入 ### 2.4 漏洞复现步骤 1. **启用会员注册功能**: - 修改`uploads/install/config.cache.inc.php` - 将`$cfg_mb_open = 'N';`改为`$cfg_mb_open = 'Y';` 2. **注册会员账号** 3. **后台操作**: - 进入"会员"→"注册会员列表"→"提升" - 填写提升表单但暂不提交 4. **拦截并修改请求**: - 使用Burp Suite拦截请求 - 修改`id`参数为`3'.phpinfo()?>` - 放行请求 5. **验证注入**: - 访问`/uploads/data/password.data.php` - 确认代码执行 ### 2.5 漏洞局限性 当`password.data.php`文件已存在时,漏洞无法利用: ```php if (file_exists($filename)) { require_once(DEDEDATA . '/password.data.php'); $arr_password = json_decode($str_password, true); } ``` ## 3. 任意文件删除漏洞(CVE-2022-30508) ### 3.1 漏洞影响文件 - `/uploads/dede/upload.php` ### 3.2 漏洞代码分析 ```php $delete = preg_replace(delete); ... if ($dopost === 'delete') { $uploadTmp = DEDEDATA . '/uploadtmp'; if (unlink($uploadTmp delete)) { echo 'success'; exit(); } echo 'fail'; } ``` ### 3.3 漏洞成因 - `preg_replace()`过滤不严格 - 允许路径穿越 - 通过`unlink()`实现任意文件删除 ### 3.4 漏洞复现 1. 在网站根目录创建测试文件`test.txt` 2. 访问URL: ``` /uploads/dede/upload.php?dopost=delete&delete=/Rebmal/test.txt ``` 3. 确认文件已被删除 ### 3.5 漏洞局限性 单独使用时仅能删除文件,无法直接获取系统权限或数据 ## 4. 组合漏洞利用 ### 4.1 利用思路 1. 使用任意文件删除漏洞删除`password.data.php` 2. 再使用代码注入漏洞写入恶意代码 ### 4.2 详细步骤 1. **删除现有文件**: ``` /uploads/dede/upload.php?dopost=delete&delete=/Rebmal/../../password.data.php ``` 2. **执行代码注入**: - 按照2.4节的步骤注入恶意代码 3. **维持持久化访问**: - 注入Webshell代码 - 建立持久后门 ### 4.3 组合利用优势 - 突破单独漏洞的局限性 - 实现无限制的代码注入 - 可获取系统完全控制权 ## 5. 防御建议 1. **代码注入漏洞防御**: - 对`json_encode()`输出进行严格过滤 - 使用`htmlspecialchars()`等函数进行二次转义 - 限制写入文件的内容格式 2. **任意文件删除漏洞防御**: - 严格校验文件路径 - 禁止路径穿越 - 限制可删除的文件目录 3. **通用防御措施**: - 及时更新DedeCMS到最新版本 - 最小化文件写入权限 - 实施Web应用防火墙规则 ## 6. 总结 本文详细分析了DedeCMS中的两个关键漏洞及其组合利用方式。通过理解这些漏洞的成因和利用方法,安全研究人员可以更好地评估系统风险,管理员可以采取更有针对性的防御措施。组合漏洞利用展示了看似有限的漏洞如何通过创造性组合形成更严重的攻击链。\]

DedeCMS组合漏洞分析与利用教学文档 1. 概述 本文档详细分析DedeCMS中的两个安全漏洞及其组合利用方式: DedeCMS代码注入漏洞(CVE-2022-36216) DedeCMS任意文件删除漏洞(CVE-2022-30508) 这两个漏洞单独使用时存在局限性,但组合利用可以形成更严重的攻击链。 2. 代码注入漏洞(CVE-2022-36216) 2.1 漏洞影响文件 /uploads/dede/member_toadmin.php /uploads/include/common.inc.php 2.2 漏洞流程分析 参数传入流程 : 通过 /uploads/include/common.inc.php 处理用户输入 调用 _RunMagicQuotes() 函数 使用 addslashes($svar) 对输入进行转义 漏洞触发点 : 关键代码片段 : 2.3 漏洞成因 _RunMagicQuotes() 使用 addslashes() 转义输入 json_encode() 对反斜杠进行二次转义,导致单引号逃逸 逃逸的单引号与开头单引号闭合,实现代码注入 2.4 漏洞复现步骤 启用会员注册功能 : 修改 uploads/install/config.cache.inc.php 将 $cfg_mb_open = 'N'; 改为 $cfg_mb_open = 'Y'; 注册会员账号 后台操作 : 进入"会员"→"注册会员列表"→"提升" 填写提升表单但暂不提交 拦截并修改请求 : 使用Burp Suite拦截请求 修改 id 参数为 3'.phpinfo()?> 放行请求 验证注入 : 访问 /uploads/data/password.data.php 确认代码执行 2.5 漏洞局限性 当 password.data.php 文件已存在时,漏洞无法利用: 3. 任意文件删除漏洞(CVE-2022-30508) 3.1 漏洞影响文件 /uploads/dede/upload.php 3.2 漏洞代码分析 3.3 漏洞成因 preg_replace() 过滤不严格 允许路径穿越 通过 unlink() 实现任意文件删除 3.4 漏洞复现 在网站根目录创建测试文件 test.txt 访问URL: 确认文件已被删除 3.5 漏洞局限性 单独使用时仅能删除文件,无法直接获取系统权限或数据 4. 组合漏洞利用 4.1 利用思路 使用任意文件删除漏洞删除 password.data.php 再使用代码注入漏洞写入恶意代码 4.2 详细步骤 删除现有文件 : 执行代码注入 : 按照2.4节的步骤注入恶意代码 维持持久化访问 : 注入Webshell代码 建立持久后门 4.3 组合利用优势 突破单独漏洞的局限性 实现无限制的代码注入 可获取系统完全控制权 5. 防御建议 代码注入漏洞防御 : 对 json_encode() 输出进行严格过滤 使用 htmlspecialchars() 等函数进行二次转义 限制写入文件的内容格式 任意文件删除漏洞防御 : 严格校验文件路径 禁止路径穿越 限制可删除的文件目录 通用防御措施 : 及时更新DedeCMS到最新版本 最小化文件写入权限 实施Web应用防火墙规则 6. 总结 本文详细分析了DedeCMS中的两个关键漏洞及其组合利用方式。通过理解这些漏洞的成因和利用方法,安全研究人员可以更好地评估系统风险,管理员可以采取更有针对性的防御措施。组合漏洞利用展示了看似有限的漏洞如何通过创造性组合形成更严重的攻击链。