一篇很早在先知发的一篇xss挑战,之前只做了前几题,最近js的书刚看完了,便把以前收藏的一些xss的题目拿来做做。
xsstest1
查看源码如下
由setTimeout的用法:setTimeout(function, milliseconds, param1, param2, …)
可以发现闭合前面的函数aa,再传入一个alert函数即可
xsstest2
查看源码
看到div标签内有实体化编码后的xss语句,看到后面的js中,aa函数执行了$(“#xx”)x;
在jQuery中$(“#xx”)类似于dom中的getElementById,在jQuery中有text函数,会将html编码后的数据还原
因此一种做法是将aa函数内的x,y分别传入html与text,其中window.location.search.substring(1);获取?后的参数,再有split分割分别传入x,y参数
xsstest3
查看源码
传参px
刚开始看到以为做法是利用传参闭合,但是上下都要闭合,不然会一直出现报错,但是后面盲测用+号的时候,发现进行连接直接弹窗了
但是的确没明白什么原因,跑去问一朋友告诉我用了运算符的原因,把符号换成了一些运算符,例如*,-号等发现的确也弹窗了
想着应该是在进行计算时,先要确定每一项的值,确定第二项alert的时候使alert函数执行
xsstest4
第四题和第三题只是多了一些过滤,一些基本的运算符不能使用了,但是翻资料发现了其他没有过滤的运算符
利用instanceof即可
后面看到作者题解的时候才发现是非预期,作者没有过滤全部的运算符才能这么解,这里作者发的解法是利用模板字符串
在js当中中单引号和双引号不能直接去换行,直接换行会导致报错
但是模板字符串是可以包括换行,即将字符串包裹在``中
回到题目中,在px传入`,成功将上下闭合
再闭合后面的语句使语法正确即可
xsstest5
打开页面如下
有个callback参数,传入的值会输出到页面,抓包发现页面response是text/javascript,所以利用callback直接弹窗肯定是不行了,想办法引入这个链接,去掉user.php后可以看到页面的源码
看到源码后发现传参就可以了,script src已经给你写好了
uin=/test/xsstest5/user.php&pn=callback=alert(1)
xsstest7
与前面的的题目一样。传入px参数
进行闭合的时候发现单引号被转义了
有趣的是没对\进行转义,直接让’逃逸出来了,但是后面的单引号无法闭合
但是可以看到px参数同时上下输出了,再次利用模板字符串
但是模板字符串的上下输出内容不在一个script标签内,想要闭合显然是不存在的,去看了一下作者的题解,提到了 <!–进行闭合
带到题目中看一下
这里script标签被转义了,在后面加一个空格即可
可以很清楚的看到第一个和传入的标签进行了闭合,再次利用模板字符串
可以看到传入的aaa逃逸了出来,并闭合了单引号
文章地址:https://xz.aliyun.com/t/7909