XSS绕过某盾
字数 1290 2025-08-25 22:58:35
XSS绕过某盾WAF的技术分析与实践
前言
本文详细分析了一种绕过某盾WAF进行XSS攻击的技术方法,重点介绍了两种有效的绕过思路:使用不常见HTML5标签和通过事件属性拆分fuzz的方法。文章基于实际测试经验,提供了可操作的绕过技术细节。
WAF防护现状
该WAF更新迅速,对XSS攻击有较强的检测能力。测试发现:
- 大多数常规XSS payload会被拦截(返回403)
- 不同WAF之间存在规则差异(如长亭XSSChop可能判定为无风险)
- 对Cookie的检查曾经不严格,但已更新修复
测试方法论
- Fuzz测试:首先构造大量payload进行模糊测试
- 有效payload构造:确保测试payload本身是有效的XSS向量
- 批量测试:使用大量payload进行测试,再分析能通过的样本
绕过技术详解
方法一:使用不常见HTML5标签
以下标签被发现可以绕过该WAF:
<details>
<button>
<select>
<keygen>
<textarea>
技术要点:
- 关注HTML5新特性中的新标签和新属性
- 这些标签通常不被WAF规则集完全覆盖
- 需要配合适当的事件属性才能触发XSS
方法二:事件属性拆分fuzz
XSS payload通常由四部分组成:
- [TAG]: 如img, svg, video, button等
- [ATTR]: 非必要属性如src=1, xmlns="..."等
- [EVENT]: 事件属性如onerror, onload等
- [PAYLOAD]: JavaScript代码如alert(1), top.alert(1)等
关键发现:
- 当移除[EVENT]部分时,payload不再被拦截
- 需要对[EVENT]部分进行专门fuzz以找到可用的替代事件
Fuzz结果:
通过fuzz测试,发现以下事件属性可用(返回200):
[此处应列出fuzz得到的有效事件属性]
Payload构造技巧:
- 将XSS payload分成多个部分
- 对每部分分别进行fuzz测试
- 组合有效的部分构造最终payload
特殊Payload示例
由于WAF拦截,作者提供了截图而非直接代码。关键点包括:
- 使用非常规标签组合
- 利用fuzz得到的事件属性
- 拆分JavaScript代码以避免检测
技术难点与解决方案
-
构造有效字符集:
- 需要收集和构造大量有效字符组合
- 关注HTML5新特性和浏览器行为差异
-
Fuzz工具使用:
- 推荐使用在线工具如https://xssfuzzer.com/fuzzer.html
- 可自定义fuzz字典提高效率
-
实战限制:
- 实际环境中XSS注入点往往有限
- 需要根据具体环境调整payload
后记与总结
- 本文重点在于提供绕过思路而非具体payload
- 本质是通过系统化fuzz找到WAF规则盲点
- 核心挑战在于构造有效的fuzz字符集
- 这种方法也可应用于其他WAF的绕过研究
实用建议
- 持续关注HTML5新特性,发现新标签和属性
- 建立自己的fuzz字典库,定期更新
- 测试时注意不同WAF间的规则差异
- 实际攻击中需结合具体环境调整方法
通过这种系统化的测试方法,可以有效提高绕过WAF进行XSS攻击的成功率,同时也为WAF的改进提供了参考方向。