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

张开发
2026/4/9 10:16:12 15 分钟阅读

分享文章

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); // 后续下载逻辑... ?代码问题分析参数未过滤id参数直接从GET请求中获取未进行任何过滤、转义处理攻击者可传入包含SQL语句的恶意参数类型未强转id参数应为整数类型下载文件ID但程序未对其进行intval强转允许传入字符串类型的恶意参数未使用预处理查询直接将用户可控参数代入SQL字符串拼接未使用参数化查询无法抵御SQL注入攻击。漏洞利用示例仅用于学习请勿非法测试http://你的网站域名/plus/download.php?id1′ 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额外加固可选提升安全性添加参数合法性校验在获取id参数后添加判断逻辑禁止空值或非法参数代码如下// 新增参数合法性校验if(!isset($_GET[‘id’]) || !is_numeric($_GET[‘id’]) || $id 0){exit(‘非法请求禁止访问’);}过滤其他参数检查download.php文件中其他用户可控参数如cid、aid等若存在未过滤的情况同样添加intval强转或addslashes过滤限制数据库查询权限给网站数据库账号分配最小权限禁止其执行drop、delete等高危SQL语句降低注入攻击的危害。步骤4验证修复效果访问恶意利用链接http://你的网站域名/plus/download.php?id1′ and 12–若提示「非法请求禁止访问」或无有效数据返回则修复生效构造其他恶意参数如 id1′ UNION SELECT 1,2,3,4–无SQL注入现象修复生效测试正常下载功能访问合法的下载链接如 http://你的网站域名/plus/download.php?id1可正常下载文件说明功能未受影响。四、注意事项修复后务必测试前台下载功能确保所有合法下载链接均可正常使用避免影响用户体验若网站有二次开发如自定义下载逻辑需确认修改后的代码与二次开发内容无冲突尤其是涉及id参数的逻辑该漏洞影响多个版本即使升级到5.7.112版本仍需检查该文件是否存在相同问题如有需同步修复建议定期检查download.php文件避免二次开发或版本更新时重新引入该漏洞。本文由 流觞运维 整理https://www.lnmpweb.cn/archives/7485

更多文章