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'] = '';
}
代码执行流程
- 检查
$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
- 漏洞发现者: 晏师傅
总结
该漏洞虽然需要管理员权限,但危害性仍然较大,可能导致网站服务中断。建议管理员及时检查系统安全状况,并采取相应的防护措施。