漏洞描述
DedeCMS-V5.7.91-UTF8后台story_books.php存在XSS漏洞
影响版本
DedeCMS-V5.7.91-UTF8
漏洞分析
story_books.php
在这段代码中,$keyword 变量被用于构建 SQL 查询语句的一部分,具体在以下这段代码中:
if($keyword!="")
{
$addquery .= " And (b.bookname LIKE '%$keyword%' OR b.author LIKE '%$keyword%') ";
}
$query = "
SELECT b.bid,b.catid,b.bookname,b.booktype,b.litpic,b.ischeck,b.postnum,b.senddate,c.id AS cid,c.classname FROM #@story_books b
LEFT JOIN #@story_catalog c ON c.id = b.catid WHERE b.bid>0 $addquery $orderby
";
在这里,如果 $keyword 变量中包含了恶意的脚本或标签,那么就有可能构成 XSS 攻击。例如,如果将 $keyword 的值设置为 <script>alert("XSS");</script>,那么就会在页面中弹出一个含有 "XSS" 的警告框。
一般来说,避免 XSS 攻击的方法是对用户的输入进行过滤和转义。可以使用一些 PHP 提供的内置函数,如 htmlspecialchars 或 strip_tags,将用户输入中的 HTML 标签转义或删除。此外,也可以使用 Web 应用程序防火墙(WAF)来过滤恶意的输入。
漏洞复现
http://192.168.6.139:8080/DedeCMS-V5.7.91-UTF8/uploads/dede/story_books.php?keyword=%22%3E%3Cscript%3Ealert%281%29%3C%2Fscript%3E&catid=0&Submit=%E6%90%9C+%E7%B4%A2
负载:"><script>alert("XsS")</scRiPt></p>
<p><img src="https://xzfile.aliyuncs.com/media/upload/picture/20230417100434-32e40b66-dcc4-1.png" alt=""></p>
<p><strong>修复建议</strong><br>
针对这个代码中的XSS漏洞,以下是一些可能的修复建议:</p>
<p>过滤特殊字符:可以对 $keyword 进行过滤,例如使用 strip_tags() 函数去除所有HTML标签,使用 htmlspecialchars() 函数将特殊字符转义为HTML实体,以防止它们被解释为HTML代码。</p>
<p>使用预定义的函数:可以使用PHP的预定义函数来过滤和转义输入数据,例如 filter_input() 函数可以过滤输入数据, htmlspecialchars() 函数可以转义特殊字符。</p>
<p>输入验证:可以对 $keyword 变量进行输入验证,限制用户只能输入预定义的字符或者字符集,或者可以使用正则表达式对输入数据进行验证,以确保它们不包含任何非法字符。</p>
<p>输出编码:可以使用 htmlspecialchars() 函数对 $keyword 变量进行输出编码,以确保任何包含在变量中的特殊字符都不会被解释为HTML代码。</p>
<p>总之,为了防止XSS攻击,需要过滤和验证输入数据,对输出数据进行编码,并避免直接在HTML代码中使用用户输入的数据。</p>
</script>