Level1
观察题目和网页可以推测为反射型注入:
反射型注入简单来说就是通过GET传参的方式输入恶意弹窗代码。
输入的恶意代码会在后端进行处理,仅一次有效,不会在后端进行储存。
Payload
GET传参
?name=<script>alert(1)</script>
Level2
第二关多了一个输入框,可以知道输入的内容就是打印出来的内容,试着输入第一关的payload
代码被打印出来但并没有被执行,查看页面源代码。
发现左右的尖括号被替换了,但是下面一行却完整的输出的内容,于是我们利用下面一行。
就需要把input标签闭合掉,才能成功执行script标签。
payload
"><script>alert(1)</script>
Level3
老规矩,尝试一下<script>alert</script>
打印出来了但没有执行,查看源代码
15行和17行两处都对尖括号进行了替换,那么我们就可以考虑其他payload了
onclick事件:
在点击输入框之后才会执行onclick后面输入的事件
代码:οnclick="事件"
闭合17行的value标签后
于是试着输入'οnclick="alert(1)"
错误,查看源代码发现双引号也被替换了,所以尝试一下单引号。
payload
'οnclick='alert(1)'
提交后单击输入框出现弹窗
Level4
老规矩输入script后分析源代码
这次直接把尖括号替换成了空,那就尝试不需要尖括号的onclick事件
注意需要对value标签进行闭合
payload
"οnclick="alert(1)"
提交后单击输入框出现弹窗
Level5
老规矩看源代码
script被替换为了scr_ipt
尝试onclick事件(双引号闭合value)
但是注意看,这次的题目并没有对尖括号下手,所以我们可以进行一个新的标签作为payload
<a href=javascript:alert(1)>
这个标签是插入链接的标签,
利用它构造的payload为:
"><a href=javascript:alert(2)>
提交后有两处字体变蓝,说明生成了链接,任意点击一处即可执行代码出现弹窗。
Level6
老规矩分析源代码
看起来好像和第五关的过滤方式一样,尝试一下第五关的payload
发现href也被过滤了
绕过方法:大小写变化
有的代码对字母的大小写区分不明显,它们往往只过滤了小写字母或者大写字母的其中一种
于是这道题的payload
"><a hReF=javascript:alert(1)>
也可以是
"><sCrIpt>alert(1)</sCrIpt>
Level7
老规矩分析源代码
这次直接把script替换为空了
双写绕过:
当代码把一个字符串替换为空时,通过双写可以绕过
payload
"><scscriptript>alert(1)</scscriptript>
Level8
老规矩分析源代码
script被替换了,但是输入的字符串是放在了<a href>标签中,所以我们根据前面的知识,试着直接输入
javascript:alert(1)
script仍然被替换了
unicode编码绕过:
通过讲字符串进行Unicode编码,来绕过代码对固定字符串的过滤。
于是对javascript:alert(1)进行Unicode编码可以构造payload
javascript:alert(1)
Level9
老规矩分析源代码
这里说链接不合法
输入合法链接后就正常显示了,那么我们把合法链接加入到payload中尝试一下。
发现正常显示了,但是JavaScript还是会被替换。那么就对javascript:alert(1)这句代码进行Unicode编码,参考level8:
得到payload:
javascript:alert(1)//http://www.baidu.com
Level10
这道题没有输入框,但可以发现是GET方式传参,那么就用GET方式传参就好。
老规矩:
发现只有一个输出点,而且尖括号也被替换了,