漏洞描述
DedeCMS-V5.7.91-UTF8后台广告分类管理存在XSS漏洞
影响版本
DedeCMS-V5.7.91-UTF8
漏洞分析
adtype_main.php
根据代码分析
在这段代码中,我们可以看到当 $check_new 存在且 $pname_new 不为空时,将 $pname_new 插入到数据库中作为广告类型名称。这里的 $pname_new 可以通过用户输入进行设置,如果用户输入恶意脚本或者HTML标签,则可能会导致XSS漏洞。
例如,如果攻击者将 pname_new 的值设置为以下内容:
<script>alert('XSS Attack!')</script>
那么在执行这个代码片段之后,数据库中的广告类型名称将会被设置为 "<script>alert('XSS Attack!')</script>"。当用户访问网站并显示这些广告类型时,这段脚本将会被执行,弹出一个恶意警告框。
这就是XSS漏洞的本质,攻击者通过注入恶意代码来在受害者的浏览器中执行自己的代码,从而窃取用户的信息或者进行其他恶意行为。在这个例子中,攻击者可以使用 pname_new 参数构造一个针对该网站用户的XSS攻击,如果网站没有对用户输入进行适当的过滤和验证,则可能会导致安全漏洞。
漏洞复现
http://192.168.6.139:8080/DedeCMS-V5.7.91-UTF8/uploads/dede/adtype_main.php
负载:"><script>alert(1)</script>
pname_new参数存在XSS
保存好,刷新页面弹窗,还是存储型XSS漏洞。
修复建议
为了修复"pname_new"参数中的XSS漏洞,可以使用PHP内置的"htmlspecialchars"函数对任何可能被解释为HTML或脚本代码的特殊字符进行编码。可以按如下方式修改代码:
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);
}
header("Content-Type: text/html; charset={$cfg_soft_lang}");
ShowMsg("成功更新广告分类列表!", 'adtype_main.php');
exit;
通过使用 PHP 内置的 "htmlspecialchars" 函数并设置 "ENT_QUOTES" 标记来修复 "pname_new" 参数中的 XSS 漏洞,任何单引号或双引号都将被替换为相应的 HTML 实体。这将防止用户通过 "pname_new" 参数将脚本代码注入页面。