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

相关推荐
fengci.2 小时前
php反序列化(复习)(第二章)
android·开发语言·学习·php
cch89182 小时前
五大PHP框架对比:如何选择最适合你的?
开发语言·php
小小程序员.¥2 小时前
oracle--plsql块、存储过程、存储函数
数据库·sql·oracle
cch89182 小时前
Laravel vs 主流PHP框架:终极对决
开发语言·php·laravel
代龙涛3 小时前
WordPress 首页模板怎么写(index.php 与 front-page.php)
android·php·android studio
航Hang*3 小时前
网络安全技术基础——第3章:网络攻击技术
运维·网络·笔记·安全·web安全·php
玛卡巴卡ldf3 小时前
【Springboot7】ApachePOI文件导入导出
java·spring boot·sql
不会写DN3 小时前
SQL 单表操作全解
java·服务器·开发语言·数据库·sql
Leon-Ning Liu4 小时前
Oracle 26ai新特性:SQL Firewall(SQL 防火墙)的使用方法
数据库·sql·oracle