欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

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

来源:本站整理 作者:佚名 时间:2019-04-17 TAG: 我要投稿


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

 
提醒
本文分两部分,前部分是总结新学的姿势,后半部分测试Waf。
 
数组方式
前两篇文章,我们利用js里的对象成员方法也可以用数组的形式的表示,以此构造了许多payload,在数组内将敏感函数拼接,以此来绕过。以top对象为演示的,在Javascrip中,可以连接数组的函数有其他可以补充的。
 
map()函数
map函数可以返回一个数组[1].map,而且我们在使用map函数的时候往往会传入一个函数,如果我们传递一个alert函数,那么将触发xss
[1].map(alert)

类似的数组操作函数不在少数,我所知的就有find,every,filter,forEach,findIndex。它们和map函数都有一个共同的特点,可以返回数组,而且在使用的同时还以可以传入一个函数,这就为我们构造payload提供更多的选择。
我们思考一下,在那些情况下我们可以使用,其实满多,可以先看个demo。
1 onerror=[1].filter(alert)>
成功弹窗

那么如何更进一步呢,我们先思考下面这个例子。
1 onerror=['ale'%2b'rt'].map(top['ev'%2b'al'])[0]['valu'%2b'eOf']()(/xss/)>
将alert函数以数组的方式拼接保存,通过嵌套top对象拆分带入eval函数,valueOf方法将返回值/xss/,成功弹窗。

从上面的例子中,我们不难看出,javascript的这类对象方法不在少数,如果我们要寻找其他类似函数,首先满足返回数组,或者字符串,再能够带入我们的函数。
 
function函数
在javascript,定义函数的方式有两种:一种是函数声明,另一种就是函数表达式。
这里返回结果为变量名demo,函数表达式也可以叫匿名函数,基本特征是没有函数名,

如果我们向匿名函数内添加形参为函数alert,再执行函数,那么可以达到弹窗的效果嘛?
Function('alert(1)')();答案显而易见。

然而alert关键字还是太敏感了,可以尝试将形参编码。
Function('alx65x72x74x281x29')();
成功弹窗。

拼接也是可以达到同样的效果Function('ale'%2b'rt(1)')();
 
open()属性
open()方法属性打开一个新的浏览器窗口,可在括号内加入参数open(alert(1))
成功弹窗。

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

 
神奇的constructor
还记得前篇文章测试WAF来学习XSS姿势(二)执行代码姿势补充那段嘛,当时我以为自己,已经把constructor的坑填完了,早上起来查资料学习,又发现一个可用知识。
constructor是一个对象的属性,这个属性存在在此对象的prototype中, 指向此对象的构造函数。如果该对象是它自己呢?
constructor.constructor(alert(1))
成功触发xss

如果constructor带入的是完整的函数,比如alert,prompt,confirm,那么不需要执行。怎么理解呢?
在这个demo中,我们将函数拼接,注意后面()括号,它是有必要的。
constructor.constructor('al'%2b'ert(1)')()

[1] [2] [3]  下一页

【声明】:黑吧安全网(http://www.ylxj.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载