在渗透测试或安全研究过程中,我们常常遇到部署了Web应用防火墙(WAF)的站点,它们会过滤或拦截常见的XSS攻击载荷。这时,掌握一些非主流或利用特定场景的绕过技巧就显得尤为重要。本文将分享一种利用<marquee>标签进行反射型XSS注入并尝试绕过基础过滤的案例。
攻击载荷分析
首先,我们来看一段用于测试的XSS攻击载荷代码:
">>>>>>><marquee onmouseover='alert(5)'>RXSS</marquee></head><abc></script><script>alert(origin)</script><meta
这段代码看似杂乱,但包含了几个关键的绕过思路:
- 前置闭合与垃圾数据:开头的
">>>>>> 试图提前闭合页面中可能存在的属性(如 value=")或标签,并通过大量 > 字符干扰简单的正则匹配。
- 利用
<marquee>标签:<marquee>是一个用于创建滚动文本的HTML标签,在现代前端开发中已不常用,但浏览器仍普遍支持。一些WAF的过滤规则可能未将其列入高危标签清单,从而为我们提供了可乘之机。这里为其添加了一个 onmouseover 事件处理器,当用户鼠标移过该滚动区域时,会触发 alert(5)。
- 混淆与干扰:在
<marquee>标签之后,代码尝试闭合</head>,并插入无意义的<abc>标签,以及试图通过</script><script>的拼接来干扰对<script>标签的检测,最后再尝试触发一个alert(origin)。
- 未闭合的
<meta:结尾的<meta标签故意不闭合,可能会破坏页面原有结构,导致后续的HTML解析出现意外行为,有时能辅助绕过某些依赖完整语法树进行检测的WAF。
如果目标站点的输入过滤不严谨,成功注入了类似上述的载荷,当其他用户访问被篡改的页面时,可能会看到如下图所示的弹窗:

上图中弹出的警告框正是 onmouseover='alert(5)' 或 <script>alert(origin)</script> 成功执行的结果,证明了漏洞的存在。
技巧总结与防御建议
这种绕过方式的核心在于利用了相对“冷门”的HTML标签和事件属性。它提醒我们,安全防护不能只针对高频出现的<script>、onclick、onerror等进行过滤,需要对所有可执行脚本的HTML标签和事件处理器保持警惕。
对于开发者而言,最有效的防御手段仍然是实施严格的输出编码。根据数据输出的上下文(HTML体、HTML属性、JavaScript、CSS、URL),选用正确的编码函数(如HTML实体编码、JavaScript编码)。同时,采用内容安全策略(CSP)可以大幅降低这类攻击的成功率与危害。
对于安全研究人员,深入理解前端安全的各种攻击向量与绕过手法,是进行有效漏洞挖掘和渗透测试的基础。不断探索WAF规则集的盲点,有助于推动整体安全防护水平的提升。
|