前言在 Bugcrowd 上挖洞最怕的不是找不到漏洞点而是找到了漏洞点却被 WAF 无情拦截。本文记录一次某目标主站 XSS 漏洞的完整挖掘与 Bypass 过程从寻找输入输出点到最终成功弹窗希望能给正在做漏洞挖掘的师傅们一些思路。一、寻找漏洞点1. 扩大攻击面拿到目标后首先不要只盯着主站首页。我的习惯是先用爬虫工具如rad结合 JS 审计尽可能多地构造请求和参数寻找一切可能的输入输出点。2. 判断漏洞点找到疑似注入点后先不急着上 payload而是做闭合测试测试 1标签闭合/div xx观察页面是否正常闭合如果xx逃逸到了标签外说明存在 HTML 注入的可能。测试 2HTML 标签渲染input stylewidth:200px;height:200px;background:red如果页面出现了红色区域说明输入点可以渲染 HTML 标签XSS 有戏。二、初探 WAF构造一个经典的 XSS POC1details/open/ontogglealert(1)结果直接触发 WAF 拦截。看来目标对敏感事件做了防护简单粗暴的 payload 行不通。三、Bypass 之路从 Fuzz 到精准打击1. Fuzz 敏感关键字WAF 拦截不可怕可怕的是不知道它拦了什么。我的方法很笨但有效逐个关键字测试。通过 Burp Suite 发送大量包含不同事件、标签的请求观察哪些被拦截。经过一轮 fuzz发现目标对常规事件处理器如onclick、onerror、onload等比较敏感。2. 收集冷门事件既然常见事件被杀了那就找冷门的。我整理了 HTML 元素的事件列表参考 MDN 和前辈们的博客保存为events.txt用 Burp Intruder 批量遍历。参考资源HTML 事件属性大全HTML 事件整理3. 发现突破口onbounce经过一段时间的尝试发现onbounce事件没有被拦截但onbounce是什么怎么用查了一下 MDN发现它是marquee标签的专属事件当内容在 marquee 中反弹时触发。Marquee 元素 - MDN四、最终 POC参考 MDN 示例构造如下 payload12marquee behavioralternate onbouncealert(document.cookie) This text will bounce /marquee效果页面加载后marquee 内容开始滚动触碰到边界反弹时延迟几秒钟后成功弹窗五、踩坑总结WAF 规则不是万能的它拦住了常见事件但拦不住冷门标签冷门事件的组合。MDN 是最好的字典当你不知道某个 HTML 元素有什么事件时去 MDN 查往往有意外收获。浏览器兼容性问题这个 POC只能在 Firefox 中触发Chrome 等浏览器可能不支持onbounce事件。实战提交漏洞时记得注明环境。结语XSS Bypass 的核心思路永远是它认识script但不一定认识marquee。多积累冷门标签和事件配合 fuzz 和耐心WAF 并非不可逾越。