DedeCMS plus/download.php SQL注入漏洞修复教程

一、漏洞说明

该漏洞属于前台SQL注入高危漏洞,主要存在于DedeCMS下载模块中,攻击者无需登录,仅需构造恶意下载请求,即可通过注入获取数据库信息,包括管理员账号密码、网站数据等,严重时可导致网站被接管。

  • 漏洞编号:公开漏洞(CNVD收录同类漏洞)
  • 危害等级:高危
  • 影响版本:DedeCMS V5.7 SP2 ~ 5.7.112(含各类衍生版本)
  • 漏洞文件:/plus/download.php
  • 漏洞场景:前台下载功能中,程序未对URL中的id参数进行严格过滤,直接代入SQL查询语句,导致攻击者可构造恶意参数触发SQL注入漏洞。

二、代码分析

漏洞核心原因:download.php 文件中,对获取的id参数未进行任何过滤、转义或类型强转,直接将其代入SQL查询语句,属于典型的SQL注入漏洞,攻击者可通过构造特殊参数,篡改SQL查询逻辑,获取敏感数据。

关键漏洞代码(原文件片段):

复制代码
<?php
// 原漏洞代码
$id = $_GET['id'];
$sql = "SELECT * FROM `#@__downloads` WHERE id='$id'";
$row = $dsql->GetOne($sql);
// 后续下载逻辑...
?>

代码问题分析:

  1. 参数未过滤:id参数直接从GET请求中获取,未进行任何过滤、转义处理,攻击者可传入包含SQL语句的恶意参数;
  2. 类型未强转:id参数应为整数类型(下载文件ID),但程序未对其进行intval强转,允许传入字符串类型的恶意参数;
  3. 未使用预处理查询:直接将用户可控参数代入SQL字符串拼接,未使用参数化查询,无法抵御SQL注入攻击。

漏洞利用示例(仅用于学习,请勿非法测试):

http://你的网站域名/plus/download.php?id=1′ UNION SELECT 1,admin,pwd,1 FROM #@__admin--

上述请求可直接获取管理员账号(admin字段)和加密密码(pwd字段),攻击者破解密码后即可登录网站后台,控制整个网站。

三、修复方法(原位修复,不升级、不影响模板)

本修复方案无需升级DedeCMS版本,仅修改漏洞文件,通过参数过滤、类型强转等方式彻底封堵SQL注入漏洞,不影响前台下载功能,步骤如下:

步骤1:备份漏洞文件

先备份 /plus/download.php 文件,建议使用命令行或FTP工具备份,备份路径示例:/plus/download.php.bak,避免修改错误导致下载功能异常,备份后可随时回滚。

步骤2:核心修复(参数过滤+类型强转)

打开 /plus/download.php 文件,找到上述漏洞代码片段,替换为以下修复后的代码:

复制代码
<?php
// 修复1:参数过滤+类型强转,确保id为整数,彻底杜绝SQL注入
$id = intval($_GET['id']);
// 修复2:修改SQL查询语句,适配强转后的整数参数
$sql = "SELECT * FROM `#@__downloads` WHERE id=".$id;
$row = $dsql->GetOne($sql);
// 后续下载逻辑...(保留原有代码,不做修改)
?>

步骤3:额外加固(可选,提升安全性)

  1. 添加参数合法性校验:在获取id参数后,添加判断逻辑,禁止空值或非法参数,代码如下:

// 新增:参数合法性校验

if(!isset(_GET\['id'\]) \|\| !is_numeric(_GET'id') || $id <= 0){

exit('非法请求,禁止访问');

}

  1. 过滤其他参数:检查download.php文件中其他用户可控参数(如cid、aid等),若存在未过滤的情况,同样添加intval强转或addslashes过滤;
  2. 限制数据库查询权限:给网站数据库账号分配最小权限,禁止其执行drop、delete等高危SQL语句,降低注入攻击的危害。

步骤4:验证修复效果

  1. 访问恶意利用链接:http://你的网站域名/plus/download.php?id=1′ and 1=2--,若提示「非法请求,禁止访问」或无有效数据返回,则修复生效;
  2. 构造其他恶意参数(如 id=1′ UNION SELECT 1,2,3,4--),无SQL注入现象,修复生效;
  3. 测试正常下载功能:访问合法的下载链接(如 http://你的网站域名/plus/download.php?id=1),可正常下载文件,说明功能未受影响。

四、注意事项

  • 修复后务必测试前台下载功能,确保所有合法下载链接均可正常使用,避免影响用户体验;
  • 若网站有二次开发(如自定义下载逻辑),需确认修改后的代码与二次开发内容无冲突,尤其是涉及id参数的逻辑;
  • 该漏洞影响多个版本,即使升级到5.7.112版本,仍需检查该文件是否存在相同问题,如有需同步修复;
  • 建议定期检查download.php文件,避免二次开发或版本更新时重新引入该漏洞。

本文由 流觞运维 整理https://www.lnmpweb.cn/archives/7485

相关推荐
绵绵细雨中的乡音3 小时前
监控显示一切正常,可用户根本打不开网站——Blackbox Exporter帮我找到了真相(1)
开发语言·php
右耳朵猫AI4 小时前
PHP周刊2026W22 | WordPress 7.0发布、Laravel 13.10.0、Polyfill 1.38.1、Symfony 8.1
php·laravel·symfony
码不停蹄的玄黓5 小时前
MySQL慢SQL瓶颈定位
sql·mysql
czhc11400756635 小时前
6.11:halcon,Sqlserver;项目sql连接;git
git·sql·sqlserver
这个DBA有点耶5 小时前
核心系统的高可用与容灾架构:从主从到两地三中心全面解析
java·开发语言·数据库·sql·mysql·架构·运维开发
AC赳赳老秦5 小时前
OpenClaw+AWS 深度应用:自动生成 CloudFormation 模板、批量管理 S3 存储桶
java·python·面试·职场和发展·php·deepseek·openclaw
IpdataCloud6 小时前
信贷审核中如何验证用户地址与IP属地一致性?用IP查询工具实现反欺诈
开发语言·tcp/ip·金融·php·ip
未秃头的程序猿6 小时前
别再手写SQL了!我用Text2SQL让产品经理自己查数据,Java后端终于解脱了
后端·sql·ai编程
超哥--6 小时前
B站视频内容智能分析系统(六):Text-to-SQL 结构化查询
数据库·sql·音视频
安妮的小熊呢6 小时前
CRMEB BZ v6.0 使用教程:从安装部署到后台基础配置
php·thinkphp·电商系统·crmeb