被 WAF 拦下的 XSS payload 怎么破:PayloadsAllTheThings 检测实战笔记
【免费下载链接】PayloadsAllTheThingsA list of useful payloads and bypass for Web Application Security and Pentest/CTF项目地址: https://gitcode.com/GitHub_Trending/pa/PayloadsAllTheThings
场景:payload 明明正确,却被拦在门外
先说结论:XSS 检测卡在"被拦截"这一环时,多数问题不在 payload 本身,而在它和过滤规则、注入上下文的配合上。手工把alert(1)塞进参数,回显正常却死活不弹窗,是新手最常撞上的情况——请求看着没毛病,浏览器却纹丝不动。下面这套做法,来自 PayloadsAllTheThings 的 XSS 检测与 payload 绕过思路:先弄清拦你的是什么,再挑对对应的变形手法。
PayloadsAllTheThings 是什么
一句话说清:PayloadsAllTheThings 是一个按 Web 漏洞类型组织的 payload 与绕过手法合集,专给渗透测试和 CTF 备查。它能解决的问题:
- 按漏洞类型找现成 payload 与绕过变体
- 每种 WAF 有对应的历史绕过案例
- 盲 XSS 等隐蔽注入点的探测思路

快速上手:怎么在这个仓库里找 XSS 检测素材
- 先克隆仓库:
git clone https://gitcode.com/GitHub_Trending/pa/PayloadsAllTheThings - 进入
XSS Injection/目录,从 README 总览 读起,再按目录跳专题页 - 过滤器与 WAF 的绕过集中在 XSS Filter Bypass 与 XSS Common WAF Bypass 两篇
- 要批量 fuzz 时,直接取
Intruders/下的 txt 清单导入工具
🧪 核心技巧:三个场景化的绕过思路
编码混淆为什么能绕过滤过
- WAF 多按明文特征匹配,浏览器却先解码再解析,两边判定存在落差
- 敏感词拆分:换行、Tab 插进协议头,如
java%0ascript:alert(1) - 大小写混写、HTML 实体、Unicode 变体同属这一类手法
- 细节:WAF 不解码而浏览器解码,就形成可利用的编码差分
事件属性与注入上下文要配对
- 事件属性负责触发,注入上下文决定 payload 外壳,两者必须匹配
- 属性值上下文要先闭合引号再开标签;DOM 写 innerHTML 可直接给标签
- 仓库里列了
onpointerover、ontoggle等冷门触发事件,可按场景替换 - 细节:回显在 JS 字符串里时,要先闭合字符串与注释再插代码
先定界再谈利用:PoC 的正确写法
- 用
alert(document.domain)或alert(window.origin)确认执行域 - 这一步能区分"真漏洞"和沙箱域里的假阳性
- 存储型场景
alert弹窗烦人,换console.log输出即可 - 细节:PoC 展示拿 cookie 或令牌的完整链路,比单纯弹窗更有说服力
🧭 检测工作流:手工三步加自动工具
- 第一步:把注入点分类,判断参数落回 HTML 属性值、JS 字符串还是纯文本
- 第二步:最小 payload 试探回显与转义行为,判断过滤规则强弱
- 第三步:再换编码混淆或事件属性变体逐条验证
- 配合 Dalfox、XSStrike 这类 XSS 漏洞检测工具扩大覆盖,报告里附手工验证过的最小 payload
- 盲注场景走仓库里的 Blind XSS 思路:探针 + 回调,覆盖 Referer、User-Agent 等头字段
🛡 安全边界
- 只在有书面授权的目标上测试,范围写清楚
- 验证用无害 payload,不做真实数据外带
- 发现问题走负责任披露流程
收束
- 编码混淆利用的是 WAF 与浏览器解析的落差
- 事件属性必须匹配注入上下文,别硬套
- 先用
alert(document.domain)定界,再谈利用 - 会构造 payload 的人,才写得防御得住
【免费下载链接】PayloadsAllTheThingsA list of useful payloads and bypass for Web Application Security and Pentest/CTF项目地址: https://gitcode.com/GitHub_Trending/pa/PayloadsAllTheThings
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考