XSS绕过某盾
字数 1290 2025-08-25 22:58:35

XSS绕过某盾WAF的技术分析与实践

前言

本文详细分析了一种绕过某盾WAF进行XSS攻击的技术方法,重点介绍了两种有效的绕过思路:使用不常见HTML5标签和通过事件属性拆分fuzz的方法。文章基于实际测试经验,提供了可操作的绕过技术细节。

WAF防护现状

该WAF更新迅速,对XSS攻击有较强的检测能力。测试发现:

  • 大多数常规XSS payload会被拦截(返回403)
  • 不同WAF之间存在规则差异(如长亭XSSChop可能判定为无风险)
  • 对Cookie的检查曾经不严格,但已更新修复

测试方法论

  1. Fuzz测试:首先构造大量payload进行模糊测试
  2. 有效payload构造:确保测试payload本身是有效的XSS向量
  3. 批量测试:使用大量payload进行测试,再分析能通过的样本

绕过技术详解

方法一:使用不常见HTML5标签

以下标签被发现可以绕过该WAF:

<details>
<button> 
<select>
<keygen> 
<textarea>

技术要点

  • 关注HTML5新特性中的新标签和新属性
  • 这些标签通常不被WAF规则集完全覆盖
  • 需要配合适当的事件属性才能触发XSS

方法二:事件属性拆分fuzz

XSS payload通常由四部分组成:

  1. [TAG]: 如img, svg, video, button等
  2. [ATTR]: 非必要属性如src=1, xmlns="..."等
  3. [EVENT]: 事件属性如onerror, onload等
  4. [PAYLOAD]: JavaScript代码如alert(1), top.alert(1)等

关键发现

  • 当移除[EVENT]部分时,payload不再被拦截
  • 需要对[EVENT]部分进行专门fuzz以找到可用的替代事件

Fuzz结果
通过fuzz测试,发现以下事件属性可用(返回200):

[此处应列出fuzz得到的有效事件属性]

Payload构造技巧

  • 将XSS payload分成多个部分
  • 对每部分分别进行fuzz测试
  • 组合有效的部分构造最终payload

特殊Payload示例

由于WAF拦截,作者提供了截图而非直接代码。关键点包括:

  1. 使用非常规标签组合
  2. 利用fuzz得到的事件属性
  3. 拆分JavaScript代码以避免检测

技术难点与解决方案

  1. 构造有效字符集

    • 需要收集和构造大量有效字符组合
    • 关注HTML5新特性和浏览器行为差异
  2. Fuzz工具使用

    • 推荐使用在线工具如https://xssfuzzer.com/fuzzer.html
    • 可自定义fuzz字典提高效率
  3. 实战限制

    • 实际环境中XSS注入点往往有限
    • 需要根据具体环境调整payload

后记与总结

  1. 本文重点在于提供绕过思路而非具体payload
  2. 本质是通过系统化fuzz找到WAF规则盲点
  3. 核心挑战在于构造有效的fuzz字符集
  4. 这种方法也可应用于其他WAF的绕过研究

实用建议

  1. 持续关注HTML5新特性,发现新标签和属性
  2. 建立自己的fuzz字典库,定期更新
  3. 测试时注意不同WAF间的规则差异
  4. 实际攻击中需结合具体环境调整方法

通过这种系统化的测试方法,可以有效提高绕过WAF进行XSS攻击的成功率,同时也为WAF的改进提供了参考方向。

XSS绕过某盾WAF的技术分析与实践 前言 本文详细分析了一种绕过某盾WAF进行XSS攻击的技术方法,重点介绍了两种有效的绕过思路:使用不常见HTML5标签和通过事件属性拆分fuzz的方法。文章基于实际测试经验,提供了可操作的绕过技术细节。 WAF防护现状 该WAF更新迅速,对XSS攻击有较强的检测能力。测试发现: 大多数常规XSS payload会被拦截(返回403) 不同WAF之间存在规则差异(如长亭XSSChop可能判定为无风险) 对Cookie的检查曾经不严格,但已更新修复 测试方法论 Fuzz测试 :首先构造大量payload进行模糊测试 有效payload构造 :确保测试payload本身是有效的XSS向量 批量测试 :使用大量payload进行测试,再分析能通过的样本 绕过技术详解 方法一:使用不常见HTML5标签 以下标签被发现可以绕过该WAF: 技术要点 : 关注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): 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的改进提供了参考方向。