Discuz!x3.4后台文件任意删除漏洞分析
字数 1058 2025-08-29 08:32:18

Discuz! X3.4后台文件任意删除漏洞分析报告

漏洞概述

Discuz! X3.4后台存在一个任意文件删除漏洞,攻击者需要管理员权限才能利用此漏洞。该漏洞位于source/admincp/admincp_forums.php文件中,由于对用户输入过滤不严,导致攻击者可以删除服务器上的任意文件。

漏洞详情

漏洞位置

source/admincp/admincp_forums.php文件第1793-1799行

漏洞代码分析

if(!$multiset) {
   if($_GET['delreplybg']) {
      $valueparse = parse_url($_GET['replybgnew']);
      if(!isset($valueparse['host']) && file_exists($_G['setting']['attachurl'].'common/'.$_GET['replybgnew'])) {
         @unlink($_G['setting']['attachurl'].'common/'.$_GET['replybgnew']);
      }
      $_GET['replybgnew'] = '';
   }

代码执行流程

  1. 检查$multiset是否为假(默认为0)
  2. 检查是否存在$_GET['delreplybg']参数
  3. $_GET['replybgnew']进行URL解析
  4. 检查解析结果中是否不包含host字段(防止URL输入)
  5. 检查文件是否存在
  6. 使用unlink()函数删除文件

漏洞利用条件

  • 需要管理员后台权限
  • 需要知道目标文件的相对路径

漏洞利用

利用步骤

  1. 登录Discuz!后台
  2. 进入"论坛"->"模块管理"
  3. 点击"提交"按钮
  4. 在请求中添加参数:&replybgnew=../../../index.php&delreplybg=1

参数说明

  • replybgnew: 指定要删除的文件路径(可使用../进行目录遍历)
  • delreplybg: 触发删除操作的标志

实际效果

上述利用方式会删除网站根目录下的index.php文件

漏洞修复

临时修复方案

  1. 删除安装脚本(Discuz! X3.4安装后默认会删除安装脚本)
  2. 限制后台访问IP

根本修复方案

  1. 对用户输入进行严格过滤
  2. 限制文件删除操作的范围
  3. 添加CSRF防护

技术细节

关键变量分析

  • $_G['setting']['attachurl']: 默认值为data/attachment/
  • 最终删除路径前缀: data/attachment/common/

绕过分析

虽然代码使用parse_url()检查输入是否为URL,但可以通过目录遍历(../)访问任意文件

安全建议

  1. 及时更新Discuz!到最新版本
  2. 限制后台管理员权限
  3. 定期检查服务器文件完整性
  4. 实施最小权限原则
  5. 对关键操作添加二次确认

参考链接

  • 项目地址: https://gitee.com/ComsenzDiscuz/DiscuzX/tree/master
  • 漏洞发现者: 晏师傅

总结

该漏洞虽然需要管理员权限,但危害性仍然较大,可能导致网站服务中断。建议管理员及时检查系统安全状况,并采取相应的防护措施。

Discuz ! X3.4后台文件任意删除漏洞分析报告 漏洞概述 Discuz! X3.4后台存在一个任意文件删除漏洞,攻击者需要管理员权限才能利用此漏洞。该漏洞位于 source/admincp/admincp_forums.php 文件中,由于对用户输入过滤不严,导致攻击者可以删除服务器上的任意文件。 漏洞详情 漏洞位置 source/admincp/admincp_forums.php 文件第1793-1799行 漏洞代码分析 代码执行流程 检查 $multiset 是否为假(默认为0) 检查是否存在 $_GET['delreplybg'] 参数 对 $_GET['replybgnew'] 进行URL解析 检查解析结果中是否不包含host字段(防止URL输入) 检查文件是否存在 使用 unlink() 函数删除文件 漏洞利用条件 需要管理员后台权限 需要知道目标文件的相对路径 漏洞利用 利用步骤 登录Discuz !后台 进入"论坛"->"模块管理" 点击"提交"按钮 在请求中添加参数: &replybgnew=../../../index.php&delreplybg=1 参数说明 replybgnew : 指定要删除的文件路径(可使用 ../ 进行目录遍历) delreplybg : 触发删除操作的标志 实际效果 上述利用方式会删除网站根目录下的 index.php 文件 漏洞修复 临时修复方案 删除安装脚本(Discuz ! X3.4安装后默认会删除安装脚本) 限制后台访问IP 根本修复方案 对用户输入进行严格过滤 限制文件删除操作的范围 添加CSRF防护 技术细节 关键变量分析 $_G['setting']['attachurl'] : 默认值为 data/attachment/ 最终删除路径前缀: data/attachment/common/ 绕过分析 虽然代码使用 parse_url() 检查输入是否为URL,但可以通过目录遍历( ../ )访问任意文件 安全建议 及时更新Discuz !到最新版本 限制后台管理员权限 定期检查服务器文件完整性 实施最小权限原则 对关键操作添加二次确认 参考链接 项目地址: https://gitee.com/ComsenzDiscuz/DiscuzX/tree/master 漏洞发现者: 晏师傅 总结 该漏洞虽然需要管理员权限,但危害性仍然较大,可能导致网站服务中断。建议管理员及时检查系统安全状况,并采取相应的防护措施。