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

相关推荐
@小柯555m1 小时前
MySql(高级操作符--操作符混合运用)
数据库·sql·mysql
其实防守也摸鱼1 小时前
CTF密码学综合教学指南--第三章
开发语言·网络·python·安全·网络安全·密码学
其实防守也摸鱼1 小时前
CTF密码学综合教学指南--第四章
网络·笔记·安全·网络安全·密码学·ctf
DevilSeagull2 小时前
电脑上安装的服务会自动消失? 推荐项目: localhostSCmanager. 更好管理你的服务!
测试工具·安全·react·vite·localhost·hono·trpc
@insist1233 小时前
信息安全-防火墙技术演进全景:从代理NAT 到下一代及专项防火墙
网络·安全·web安全·软考·信息安全工程师·软件水平考试
不会编程的懒洋洋4 小时前
C# P/Invoke 基础
开发语言·c++·笔记·安全·机器学习·c#·p/invoke
时空系5 小时前
第10篇:归属权与借用——Rust的安全保障 Rust中文编程
开发语言·安全·rust
Chockmans6 小时前
春秋云境CVE-2017-3506
安全·web安全·网络安全·系统安全·安全威胁分析·春秋云境·cve-2017-3506
开开心心就好6 小时前
近200个工具的电脑故障修复合集
安全·智能手机·pdf·电脑·consul·memcache·1024程序员节
一拳一个娘娘腔6 小时前
精通Metasploit Framework:网络安全攻防实战与全链路渗透解析
安全