DedeCMS plus/digg.php 顶踩注入(SQL注入)修复教程

一、漏洞说明

该漏洞属于前台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);
?>

代码问题分析:

  1. 参数未强转:id参数直接从GET请求中获取,未进行intval强转,可传入字符串类型的恶意参数,直接篡改SQL查询逻辑;
  2. 参数未过滤:未对id参数进行任何过滤、转义处理,允许传入包含SQL语句的恶意参数,触发注入漏洞;
  3. 无参数校验:未校验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:额外加固(可选,提升安全性)

  1. 添加参数合法性校验:在获取id、action参数后,添加判断逻辑,禁止空值、负数或非法参数,进一步拦截恶意请求,代码如下:

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

if(empty(id) \|\| id <= 0 || !in_array($action, array('digg', 'bury'))){

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

}

  1. 限制顶踩频率:通过Cookie或Session记录用户顶踩IP和时间,禁止同一IP短时间内多次顶踩,防止刷票和暴力注入尝试;
  2. 过滤action参数:如上述修复代码所示,对action参数进行addslashes过滤,防止XSS或连带注入风险。

步骤4:验证修复效果

  1. 访问恶意利用链接:http://你的网站域名/plus/digg.php?id=1′ and 1=2--&action=digg,若提示「非法请求,禁止访问」或无顶踩操作生效,则修复生效;
  2. 构造其他恶意参数(如 id=1′ UNION SELECT 1,2,3--&action=bury),无SQL注入现象,且页面无异常报错,修复生效;
  3. 测试正常顶踩功能:点击合法内容的顶踩按钮,顶踩次数正常增加,说明功能未受影响。

四、注意事项

  • 修复后需测试顶踩功能的正常使用,确保顶踩次数可正常增加、无异常报错,避免影响用户体验;
  • 若网站顶踩功能有二次开发(如自定义顶踩规则、顶踩统计),需确认修改后的代码与二次开发内容无冲突,尤其是涉及id参数的逻辑;
  • 该漏洞为全版本通用漏洞,无论使用哪个版本的DedeCMS,均需进行修复,避免攻击者利用漏洞获取敏感数据;
  • 建议定期查看顶踩数据,若发现异常顶踩记录(如短时间内顶踩次数激增),及时排查是否有攻击者尝试利用漏洞。

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

相关推荐
Turboex邮件分享2 小时前
邮件系统中的抗拒绝服务(DDoS)攻击防护
运维·网络·安全·ddos·软件需求
天启HTTP2 小时前
HTTP代理和隧道代理的底层区别与适用场景分析
开发语言·网络协议·tcp/ip·php
fengci.2 小时前
LilCTF2025web(前半部分)
开发语言·网络·学习·php
软件开发技术2 小时前
新版点微同城主题源码34.7+全套插件+小程序前后端 源文件
小程序·php
arvin_xiaoting2 小时前
OpenClaw学习总结_IV_认证与安全_3:Authorization与Policies详解
学习·安全
知识分享小能手2 小时前
MongoDB入门学习教程,从入门到精通,MongoDB 安全完全指南(19)
学习·安全·mongodb
Lyyaoo.2 小时前
【JAVA基础面经】线程安全的单例模式
java·安全·单例模式
汽车仪器仪表相关领域2 小时前
NHXJ-02汽车悬架检验台 实操型实战手册
人工智能·功能测试·测试工具·算法·安全·单元测试·可用性测试
EasyGBS2 小时前
国密GB35114+国标GB28181平台EasyGBS双标护航为交通视频监控筑牢安全防线
安全