XSS payload 被 WAF 拦下的 3 层原因:从检测到绕过的思路拆解
2026/8/29 8:48:37 网站建设 项目流程

XSS payload 被 WAF 拦下的 3 层原因:从检测到绕过的思路拆解

【免费下载链接】PayloadsAllTheThingsA list of useful payloads and bypass for Web Application Security and Pentest/CTF项目地址: https://gitcode.com/GitHub_Trending/pa/PayloadsAllTheThings

你往回显参数里塞一段<script>标签,页面没弹框,刷新后参数只剩半截乱码——大概率是 WAF 在中间动了手脚。本文带你把 PayloadsAllTheThings 仓库当弹药库,走通"检测 → 绕过 → 验证"的完整闭环,拿到一套能落地的 XSS payload 选型方法。

🔍 WAF 拦下 payload 的三层原因

很多人第一反应是"换个编码就能绕",但拦截往往发生在不同层面,归因错了就白折腾。

  • 过滤层:正则或关键字匹配。WAF 直接扫请求体里的<script>javascript:等特征串,命中就断。这一层对明文特征敏感,对实体编码(如&#x3C;)的识别则参差不齐。
  • 解析层:WAF 会自己做一遍标签结构解析,判断你塞的片段是不是一个"合法标签"。结构不完整或协议名被截断时,它可能直接跳过检测。
  • 上下文层:同一串字符放在<body>文本节点和属性引号里,浏览器最终渲染结果完全不同。WAF 若没做上下文感知,就可能在错误的位置放行或误拦。

理解了这三层,你再看绕过方案就不会盲目试错——先判断目标 WAF 卡在哪一层,再选对应策略。

📦 把仓库当弹药库:payload 清单怎么读

XSS Injection/目录本身就是按"场景 → 技巧"两级组织的。打开XSS Injection/README.md,你能看到它从基础 payload、HTML5 标签、DOM 型、JS 上下文,一路排到 Blind XSS 和变异 XSS,每节都附了可直接粘贴的示例。

![文件上传绕过思路思维导图,覆盖 XSS、Shell、配置注入等分支](https://raw.gitcode.com/GitHub_Trending/pa/PayloadsAllTheThings/raw/5443cbde384134094f25b1b440695757a2803d55/Upload Insecure Files/Images/file-upload-mindmap.png?utm_source=gitcode_repo_files)

想快速定位可用 payload,建议按这个顺序翻:

  • XSS Injection/1 - XSS Filter Bypass.md:针对过滤层的编码与结构变形,适合第一手排查
  • XSS Injection/3 - XSS Common WAF Bypass.md:按 Cloudflare、Akamai 等具体 WAF 归档的历史绕过记录,适合对标目标环境
  • Upload Insecure Files/:文件上传场景的完整绕过路线,和 XSS 交叉的部分主要在 SVG、HTML 等可执行载体上

🎯 三种注入场景的 payload 选型

同一个漏洞点,payload 长什么样取决于它落在什么"位置"。下面三种是新手最常碰到的。

HTML 标签属性(回显框)

<!-- src 故意写错以激活 onerror 事件 --> <img src=x onerror="alert(document.domain)"> <!-- 用 domain 替代数字,可确认脚本跑在哪个源下 -->

要点:alert(1)只能证明能弹框;换成document.domain你能确认执行域,后续判断 cookie 是否可拿才有依据。

URL 伪协议(跳转参数)

# Tab 字符(%09)打断协议名 # 绕过按 "javascript:" 整串连续匹配的检测规则 java%09script:prompt(document.domain)

要点:这类 payload 的关键不是编码多花哨,而是找到 WAF 正则里"必须连续匹配"的缝隙。

文件上传(头像、附件)

<!-- SVG 原生支持 onload,无需闭合的 script 标签 --> <svg xmlns="http://www.w3.org/2000/svg" onload="alert(document.domain)"/>

要点:上传场景先确认服务器是否改写了 Content-Type 或做了二次校验;如果只查扩展名,SVG 里的事件属性通常能存活。

🛠 检测工具速查

手动构造 payload 效率有限,下面几个工具各管一段,配合仓库里的 payload 清单使用:

工具是什么适合谁
DalfoxGo 编写的自动 XSS 扫描器,内置大量 polyglot payload想批量跑参数、快速筛出疑似点的人
XSStrikePython 框架,支持反射/存储/DOM 三种模式探测需要对单个注入点做深度调试的人
xsser基于 headless 浏览器执行并回传结果关注 DOM 型、服务端无日志的场景
domdig专注 DOM 型 XSS 的无头 Chrome 测试器专门排查前端 sink 点的人

建议先用 Dalfox 扫一遍全量参数,把疑似点筛出来,再用手动 payload 逐个确认,避免对着几百个参数盲打。

🚧 盲 XSS 闭环与合规红线

有些注入点(联系表单、工单系统、管理后台的 Referer 日志)你在自己浏览器里根本看不到回显。这就是盲 XSS:脚本在别人(通常是管理员)打开页面时才执行,服务器日志里查不到你的输入。

闭环思路不复杂:把 payload 换成一个回调请求,比如<img src=//your-collab/x>,当你的协作平台收到这个请求时,说明 payload 在某个人的浏览器里跑了。XSS Injection/README.md里的 Blind XSS 小节给了完整的 endpoint 列表和最小验证方法。

合规红线只有三条,但每条都是硬约束:

  • 授权范围:只测书面授权的目标和路径,不碰未列出的子域或 API
  • 无害 payload:验证阶段用alert(document.domain)或回调图片,不执行真实数据外传
  • 及时报告:发现后 48 小时内走漏洞披露流程,附最小复现步骤

WAF 不是"换种编码就绕过去"的简单关卡,它卡你的位置不同,解法完全不同。PayloadsAllTheThings 的价值不在于给你一份永远够用的清单,而在于让你知道"被拦在哪一层"之后该翻哪一页。把检测、绕过、验证串成闭环,再守住合规底线,你手上的 payload 才算真正能用。

【免费下载链接】PayloadsAllTheThingsA list of useful payloads and bypass for Web Application Security and Pentest/CTF项目地址: https://gitcode.com/GitHub_Trending/pa/PayloadsAllTheThings

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询