一、漏洞说明
该漏洞属于前台SQL注入中危漏洞,存在于DedeCMS顶踩功能模块,攻击者无需登录,可通过构造恶意顶踩请求,触发SQL注入,获取网站数据库信息、篡改顶踩数据,影响网站数据真实性,漏洞核心为id参数未进行intval强转导致注入风险。
- 漏洞类型:SQL注入
- 危害等级:中危
- 影响版本:DedeCMS 全版本(含V5.7 SP2 ~ 5.7.118及衍生版本)
- 漏洞文件:/plus/digg.php
- 漏洞场景:前台顶踩功能中,程序未对id参数进行intval强转,直接代入SQL查询语句,导致攻击者可构造恶意参数触发SQL注入漏洞。
二、代码分析
漏洞核心原因:digg.php 文件中,对前台传入的id参数(用于指定顶踩的文章/内容ID)未进行intval强转,仅简单获取后直接代入SQL查询语句,攻击者可构造恶意参数,篡改查询逻辑,实现SQL注入,获取敏感数据或篡改顶踩记录。
关键漏洞代码(原文件片段):
<?php
// 原漏洞代码(顶踩逻辑,id未进行intval强转)
$id = $_GET['id'];
$action = $_GET['action'];
// 直接将未强转的id代入SQL查询,存在注入风险
if($action == 'digg'){
$sql = "UPDATE `#@__digg` SET digg=digg+1 WHERE id='$id'";
}else{
$sql = "UPDATE `#@__digg` SET bury=bury+1 WHERE id='$id'";
}
$dsql->ExecuteNoneQuery($sql);
?>
代码问题分析:
- 参数未强转:id参数直接从GET请求中获取,未进行intval强转,可传入字符串类型的恶意参数,直接篡改SQL查询逻辑;
- 参数未过滤:未对id参数进行任何过滤、转义处理,允许传入包含SQL语句的恶意参数,触发注入漏洞;
- 无参数校验:未校验id参数的合法性(如是否为正数、是否存在对应顶踩记录),攻击者可随意构造参数,触发注入漏洞。
漏洞利用示例(仅用于学习,请勿非法测试):
http://你的网站域名/plus/digg.php?id=1′ UNION SELECT 1,admin,pwd FROM #@__admin--&action=digg
三、修复方法(原位修复,不升级、不影响模板)
本修复方案无需升级DedeCMS版本,仅修改digg.php文件,核心是对id参数进行intval强转,彻底封堵SQL注入漏洞,不影响顶踩功能正常使用,步骤如下:
步骤1:备份漏洞文件
备份 /plus/digg.php 文件,备份路径示例:/plus/digg.php.bak,避免修改错误导致顶踩功能异常,便于后续回滚操作。
步骤2:核心修复(intval强转id参数)
打开 /plus/digg.php 文件,找到上述漏洞代码片段,替换为以下修复后的代码,核心是对id参数进行intval强转,杜绝注入风险:
<?php
// 修复1:对id参数进行intval强转,确保为整数,彻底杜绝SQL注入
$id = intval($_GET['id']);
$action = addslashes($_GET['action']); // 额外过滤action参数,防止连带漏洞
// 修复2:修改SQL查询语句,适配整数参数,消除注入风险
if($action == 'digg'){
$sql = "UPDATE `#@__digg` SET digg=digg+1 WHERE id=".$id;
}else{
$sql = "UPDATE `#@__digg` SET bury=bury+1 WHERE id=".$id;
}
$dsql->ExecuteNoneQuery($sql);
?>
步骤3:额外加固(可选,提升安全性)
- 添加参数合法性校验:在获取id、action参数后,添加判断逻辑,禁止空值、负数或非法参数,进一步拦截恶意请求,代码如下:
// 新增:参数合法性校验
if(empty(id) \|\| id <= 0 || !in_array($action, array('digg', 'bury'))){
exit('非法请求,禁止访问');
}
- 限制顶踩频率:通过Cookie或Session记录用户顶踩IP和时间,禁止同一IP短时间内多次顶踩,防止刷票和暴力注入尝试;
- 过滤action参数:如上述修复代码所示,对action参数进行addslashes过滤,防止XSS或连带注入风险。
步骤4:验证修复效果
- 访问恶意利用链接:http://你的网站域名/plus/digg.php?id=1′ and 1=2--&action=digg,若提示「非法请求,禁止访问」或无顶踩操作生效,则修复生效;
- 构造其他恶意参数(如 id=1′ UNION SELECT 1,2,3--&action=bury),无SQL注入现象,且页面无异常报错,修复生效;
- 测试正常顶踩功能:点击合法内容的顶踩按钮,顶踩次数正常增加,说明功能未受影响。
四、注意事项
- 修复后需测试顶踩功能的正常使用,确保顶踩次数可正常增加、无异常报错,避免影响用户体验;
- 若网站顶踩功能有二次开发(如自定义顶踩规则、顶踩统计),需确认修改后的代码与二次开发内容无冲突,尤其是涉及id参数的逻辑;
- 该漏洞为全版本通用漏洞,无论使用哪个版本的DedeCMS,均需进行修复,避免攻击者利用漏洞获取敏感数据;
- 建议定期查看顶踩数据,若发现异常顶踩记录(如短时间内顶踩次数激增),及时排查是否有攻击者尝试利用漏洞。
本文由 流觞运维 整理https://www.lnmpweb.cn/archives/7493