DedeCMS plus/list.php 参数注入(SQL注入)修复教程

一、漏洞说明

该漏洞属于前台SQL注入中危漏洞,存在于DedeCMS列表页模块,攻击者无需登录,可通过构造恶意列表页请求,触发SQL注入,获取网站数据库信息、篡改列表数据,影响网站正常展示,漏洞核心为tid、id参数未过滤导致注入风险。

  • 漏洞类型:SQL注入
  • 危害等级:中危
  • 影响版本:DedeCMS 全版本(含V5.7 SP2 ~ 5.7.118及衍生版本)
  • 漏洞文件:/plus/list.php
  • 漏洞场景:前台列表页展示功能中,程序未对tid(栏目ID)、id(内容ID)参数进行严格过滤,直接代入SQL查询语句,导致攻击者可构造恶意参数触发SQL注入漏洞。

二、代码分析

漏洞核心原因:list.php 文件中,对前台传入的tid、id参数未进行任何过滤和类型强转,直接将其代入SQL查询语句,攻击者可构造恶意参数,篡改查询逻辑,实现SQL注入,获取敏感数据或篡改列表数据。

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

复制代码
<?php
// 原漏洞代码(列表页查询逻辑,tid、id未过滤)
$tid = $_GET['tid'];
$id = $_GET['id'];
// 直接将未过滤的tid、id代入SQL查询,存在注入风险
if(!empty($tid)){
    $sql = "SELECT * FROM `#@__arctype` WHERE id='$tid'";
}elseif(!empty($id)){
    $sql = "SELECT * FROM `#@__archives` WHERE id='$id'";
}
$row = $dsql->GetOne($sql);
// 列表页展示逻辑...
?>

代码问题分析:

  1. 参数未过滤:tid、id参数直接从GET请求中获取,未进行任何过滤、转义处理,允许传入包含SQL语句的恶意参数;
  2. 类型未强转:tid、id参数应为整数类型(栏目ID、内容ID),程序未对其进行intval强转,可传入字符串类型的恶意参数,直接篡改SQL查询逻辑;
  3. 无参数校验:未校验tid、id参数的合法性(如是否为正数、是否存在对应栏目/内容),攻击者可随意构造参数,触发注入漏洞。

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

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

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

本修复方案无需升级DedeCMS版本,仅修改list.php文件,通过过滤tid、id参数,彻底封堵SQL注入漏洞,不影响列表页正常功能,步骤如下:

步骤1:备份漏洞文件

备份 /plus/list.php 文件,备份路径示例:/plus/list.php.bak,避免修改错误导致列表页功能异常,便于后续回滚操作。

步骤2:核心修复(过滤tid、id参数)

打开 /plus/list.php 文件,找到上述漏洞代码片段,替换为以下修复后的代码,核心是对tid、id参数进行过滤和强转,杜绝注入风险:

复制代码
<?php
// 修复1:对tid、id参数进行intval强转,确保为整数,彻底杜绝SQL注入
$tid = intval($_GET['tid']);
$id = intval($_GET['id']);
// 修复2:修改SQL查询语句,适配整数参数,消除注入风险
if(!empty($tid)){
    $sql = "SELECT * FROM `#@__arctype` WHERE id=".$tid;
}elseif(!empty($id)){
    $sql = "SELECT * FROM `#@__archives` WHERE id=".$id;
}
$row = $dsql->GetOne($sql);
// 列表页展示逻辑...(保留原有代码,不做修改)
?>

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

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

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

if((empty(tid) \&\& empty(id)) || (tid \<= 0 \&\& id <= 0)){

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

}

  1. 过滤其他可控参数:检查list.php文件中其他用户可控参数(如page、orderby等),若存在未过滤的情况,同样添加对应过滤,防止连带注入风险;
  2. 限制列表页访问频率:通过Apache/Nginx配置或代码添加IP限制,禁止单个IP短时间内多次访问列表页链接,防止攻击者暴力测试和注入尝试。

步骤4:验证修复效果

  1. 访问恶意利用链接:http://你的网站域名/plus/list.php?tid=1′ and 1=2--,若提示「非法请求,禁止访问」或无有效列表内容展示,则修复生效;
  2. 构造其他恶意参数(如 tid=1′ UNION SELECT 1,2,3,4--),无SQL注入现象,且页面无异常报错,修复生效;
  3. 测试正常列表页功能:访问合法的列表页链接(如 http://你的网站域名/plus/list.php?tid=1),可正常展示列表内容,说明功能未受影响。

四、注意事项

  • 修复后需全面测试列表页的展示、分页、筛选等功能,确保无异常,避免影响网站前台展示效果;
  • 若网站列表页有二次开发(如自定义列表样式、内容筛选规则),需确认修改后的代码与二次开发内容无冲突,尤其是涉及tid、id参数的逻辑;
  • 该漏洞为全版本通用漏洞,无论使用哪个版本的DedeCMS,均需进行修复,避免攻击者利用漏洞获取敏感数据;
  • 建议定期检查列表页数据,若发现异常内容展示,及时排查是否有攻击者尝试利用漏洞。

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

相关推荐
skilllite作者2 小时前
SkillLite 多入口架构实战:CLI / Python SDK / MCP / Desktop / Swarm 一页理清
开发语言·人工智能·python·安全·架构·rust·agentskills
软件开发技术2 小时前
最新网络游戏账户交易平台系统源码 全开源版本 全新UI 自适应移动端
php
酿情师2 小时前
PHP 反序列化漏洞与 POP 链详解:网络安全小白从零入门
android·web安全·php
数厘2 小时前
2.3MySQL 表结构设计:提升 SQL 查询性能的关键
android·sql·mysql
攻城狮在此3 小时前
华三交换机端口隔离配置(VLAN内二层互访隔离)
网络·安全
arvin_xiaoting3 小时前
OpenClaw学习总结_IV_认证与安全_4:Multi-Account Patterns详解
人工智能·学习·安全
小羽网安3 小时前
Linux 服务器如何进行安全加固?
linux·服务器·安全
xinhuanjieyi3 小时前
MCP分析某wordpress网站 时间所在的背景动画,并用php框架webman复刻下来
开发语言·php
jwn9993 小时前
Laravel1.x:PHP框架的初心与革新
开发语言·php