DedeCMS-V5.7.91-UTF8后台广告分类管理存在XSS漏洞
字数 1066 2025-08-11 08:36:24

DedeCMS-V5.7.91-UTF8后台广告分类管理XSS漏洞分析与防护指南

漏洞概述

DedeCMS-V5.7.91-UTF8版本的后台广告分类管理功能存在存储型XSS(跨站脚本)漏洞,攻击者可通过构造恶意输入在数据库中植入恶意脚本,当管理员或其他用户查看广告分类时触发执行。

漏洞详情

影响版本

  • DedeCMS-V5.7.91-UTF8

漏洞文件

  • /dede/adtype_main.php

漏洞原理

adtype_main.php文件中,当$check_new存在且$pname_new不为空时,系统直接将用户输入的$pname_new值插入数据库作为广告类型名称,未进行任何过滤或转义处理。

漏洞代码段:

if(isset($check_new) && $pname_new!='') {
    $query = "INSERT INTO `#@__myadtype`(typename) VALUES('{$pname_new}');";
    $dsql->ExecuteNoneQuery($query);
}

攻击方式

攻击者可构造如下恶意负载:

"><script>alert('XSS Attack!')</script>

当该值被存储到数据库并随后在页面中显示时,浏览器会将其解析为可执行脚本而非普通文本。

漏洞危害

  1. 存储型XSS:恶意脚本持久存储在服务器数据库中
  2. 权限提升:攻击者可窃取管理员会话cookie
  3. 网站篡改:可修改页面内容或重定向用户
  4. 恶意软件传播:可植入恶意下载链接

漏洞复现步骤

  1. 访问后台广告分类管理页面:

    http://[目标地址]/DedeCMS-V5.7.91-UTF8/uploads/dede/adtype_main.php
    
  2. 在广告分类名称字段输入XSS攻击载荷:

    "><script>alert(1)</script>
    
  3. 提交保存后刷新页面,观察是否弹出警告框

修复方案

方案一:输入过滤(推荐)

使用htmlspecialchars函数对输入进行转义:

if(isset($check_new) && $pname_new!='') {
    $pname_new = htmlspecialchars($pname_new, ENT_QUOTES, 'UTF-8');
    $query = "INSERT INTO `#@__myadtype`(typename) VALUES('{$pname_new}');";
    $dsql->ExecuteNoneQuery($query);
}

参数说明:

  • ENT_QUOTES:转义单引号和双引号
  • UTF-8:指定字符编码

方案二:输出编码

在显示广告分类名称的位置进行HTML编码:

echo htmlspecialchars($row['typename'], ENT_QUOTES, 'UTF-8');

方案三:内容安全策略(CSP)

添加HTTP头限制脚本执行:

Content-Security-Policy: default-src 'self'

防御建议

  1. 输入验证

    • 对所有用户输入进行严格验证
    • 使用白名单机制限制允许的字符
  2. 输出编码

    • 在数据显示前进行适当的上下文相关编码
    • 对HTML、JavaScript、CSS和URL上下文使用不同的编码方式
  3. 安全函数

    • 使用框架提供的安全函数处理用户输入
    • 避免直接拼接SQL语句,使用参数化查询
  4. 定期更新

    • 及时更新CMS系统和插件到最新版本
    • 关注官方安全公告和补丁

扩展知识

XSS类型区分

  1. 存储型XSS:恶意脚本永久存储在目标服务器上
  2. 反射型XSS:恶意脚本作为请求的一部分立即返回
  3. DOM型XSS:通过客户端脚本修改DOM环境触发

其他防护措施

  1. 设置HttpOnly标志保护cookie
  2. 实施X-XSS-Protection头
  3. 使用现代前端框架(如React、Vue)的内置XSS防护

通过以上措施,可有效防范此类XSS漏洞,提升系统安全性。

DedeCMS-V5.7.91-UTF8后台广告分类管理XSS漏洞分析与防护指南 漏洞概述 DedeCMS-V5.7.91-UTF8版本的后台广告分类管理功能存在存储型XSS(跨站脚本)漏洞,攻击者可通过构造恶意输入在数据库中植入恶意脚本,当管理员或其他用户查看广告分类时触发执行。 漏洞详情 影响版本 DedeCMS-V5.7.91-UTF8 漏洞文件 /dede/adtype_main.php 漏洞原理 在 adtype_main.php 文件中,当 $check_new 存在且 $pname_new 不为空时,系统直接将用户输入的 $pname_new 值插入数据库作为广告类型名称,未进行任何过滤或转义处理。 漏洞代码段: 攻击方式 攻击者可构造如下恶意负载: 当该值被存储到数据库并随后在页面中显示时,浏览器会将其解析为可执行脚本而非普通文本。 漏洞危害 存储型XSS :恶意脚本持久存储在服务器数据库中 权限提升 :攻击者可窃取管理员会话cookie 网站篡改 :可修改页面内容或重定向用户 恶意软件传播 :可植入恶意下载链接 漏洞复现步骤 访问后台广告分类管理页面: 在广告分类名称字段输入XSS攻击载荷: 提交保存后刷新页面,观察是否弹出警告框 修复方案 方案一:输入过滤(推荐) 使用 htmlspecialchars 函数对输入进行转义: 参数说明: ENT_QUOTES :转义单引号和双引号 UTF-8 :指定字符编码 方案二:输出编码 在显示广告分类名称的位置进行HTML编码: 方案三:内容安全策略(CSP) 添加HTTP头限制脚本执行: 防御建议 输入验证 : 对所有用户输入进行严格验证 使用白名单机制限制允许的字符 输出编码 : 在数据显示前进行适当的上下文相关编码 对HTML、JavaScript、CSS和URL上下文使用不同的编码方式 安全函数 : 使用框架提供的安全函数处理用户输入 避免直接拼接SQL语句,使用参数化查询 定期更新 : 及时更新CMS系统和插件到最新版本 关注官方安全公告和补丁 扩展知识 XSS类型区分 存储型XSS :恶意脚本永久存储在目标服务器上 反射型XSS :恶意脚本作为请求的一部分立即返回 DOM型XSS :通过客户端脚本修改DOM环境触发 其他防护措施 设置HttpOnly标志保护cookie 实施X-XSS-Protection头 使用现代前端框架(如React、Vue)的内置XSS防护 通过以上措施,可有效防范此类XSS漏洞,提升系统安全性。