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

一、漏洞说明

该漏洞属于前台SQL注入中危漏洞,存在于DedeCMS投票模块,攻击者无需登录,可通过构造恶意投票请求,触发SQL注入,获取网站数据库信息、篡改投票结果,甚至越权访问敏感数据,影响网站正常运营。

  • 漏洞编号:公开漏洞(无专属CVE/CNVD编号,为全版本通用漏洞)
  • 危害等级:中危
  • 影响版本:DedeCMS 全版本(含V5.7 SP2 ~ 5.7.118及衍生版本)
  • 漏洞文件:/plus/vote.php
  • 漏洞场景:前台投票功能中,程序未对voteid、id等参数进行严格过滤,直接代入SQL查询语句,导致攻击者可构造恶意参数触发SQL注入漏洞。

二、代码分析

漏洞核心原因:vote.php 文件中,对前台传入的voteid参数(用于指定投票主题)未进行任何过滤和类型强转,直接将其代入SQL查询语句,攻击者可构造恶意参数,篡改查询逻辑,实现SQL注入。

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

复制代码
<?php
// 原漏洞代码(投票主题查询逻辑)
$voteid = $_GET['voteid'];
$sql = "SELECT * FROM `#@__vote` WHERE id='$voteid'";
$row = $dsql->GetOne($sql);
// 投票逻辑...
?>

代码问题分析:

  1. 参数未过滤:voteid参数直接从GET请求中获取,未进行任何过滤、转义处理,允许传入包含SQL语句的恶意参数;
  2. 类型未强转:voteid参数应为整数类型(投票主题ID),程序未对其进行intval强转,可传入字符串类型的恶意参数;
  3. 无参数校验:未校验voteid参数的合法性,攻击者可随意构造参数,甚至查询不存在的投票主题,触发注入漏洞。

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

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

上述请求可通过注入获取管理员账号和密码,进一步登录后台控制网站,同时也可篡改投票结果,影响网站数据真实性。

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

本修复方案无需升级DedeCMS版本,仅修改vote.php文件,通过参数强转、合法性校验等方式封堵漏洞,不影响投票功能正常使用,步骤如下:

步骤1:备份漏洞文件

备份 /plus/vote.php 文件,备份路径示例:/plus/vote.php.bak,避免修改错误导致投票功能异常,便于后续回滚。

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

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

复制代码
<?php
// 修复1:参数强转int,确保voteid为整数,杜绝SQL注入
$voteid = intval($_GET['voteid']);
// 修复2:修改SQL查询语句,适配整数参数
$sql = "SELECT * FROM `#@__vote` WHERE id=".$voteid;
$row = $dsql->GetOne($sql);
// 投票逻辑...(保留原有代码,不做修改)
?>

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

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

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

if(empty(voteid) \|\| voteid <= 0){

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

}

  1. 限制投票频率:通过Cookie或Session记录用户投票IP和时间,禁止同一IP短时间内多次投票,防止刷票和暴力注入;
  2. 过滤投票选项参数:若投票功能有自定义选项参数,添加intval强转,防止其他参数引发注入漏洞。

步骤4:验证修复效果

  1. 访问恶意利用链接:http://你的网站域名/plus/vote.php?voteid=1′ and 1=2--,若提示「非法请求,禁止访问」或无有效投票主题展示,则修复生效;
  2. 构造其他恶意参数(如 voteid=1′ UNION SELECT 1,2,3,4--),无SQL注入现象,修复生效;
  3. 测试正常投票功能:选择投票选项、提交投票,可正常显示投票结果,说明功能未受影响。

四、注意事项

  • 修复后需测试投票功能的所有场景(查看投票、提交投票、查看结果),确保无异常;
  • 若网站投票模块有二次开发(如自定义投票样式、投票统计),需确认修改后的代码与二次开发内容无冲突;
  • 该漏洞为全版本通用漏洞,无论使用哪个版本的DedeCMS,均需进行修复;
  • 建议定期查看投票数据,若发现异常投票结果(如短时间内票数激增),及时排查是否有攻击者尝试利用漏洞。

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

相关推荐
唐青枫3 天前
MySQL JSON 实战详解:从存储、查询、更新到 JSON_TABLE 与索引
sql·mysql
掉头发的王富贵5 天前
【StarRocks】极限十分钟入门StarRocks
数据库·sql·mysql
两个人的幸福10 天前
Windows 桌面应用自研 PHP 队列(下):完整代码与六大工程化优化
php
zzzzzz31010 天前
9K Star 炸裂开源!这个 C 语言写的代码知识图谱,把 Linux 内核索引压缩到了 3 分钟
linux·服务器·sql
云技纵横12 天前
唯一索引 INSERT 死锁实战:5 秒复现交叉插入的 S 锁循环等待
sql·mysql
BingoGo12 天前
PHP 泛型之殇 泛型 RFC 提案被拒绝
后端·php
JaguarJack12 天前
PHP 泛型之殇 泛型 RFC 提案被拒绝
后端·php
用户30745969820713 天前
PHP 扩展——从入门到理解
php
鹏仔先生13 天前
拷贝漫画APP下载页PHP程序,后台带免费AI写作
php
云水一下14 天前
从零开始学 PHP 系列(一):PHP 的前世今生与开发环境搭建
开发语言·php