恭喜大家成功来到了靶场的第三关!加油!
在第三关中,经过测试,发现并没有对用户输入的参数进行过滤,于是我们首先尝试输入第二关的payload来看看效果:
令我们失望的是,我们的代码并没有被成功执行,让我们来查看一下源代码:
<form action="level3.php" method="GET">
<input name="keyword" value=""><script>alert("xxss")</script><"">
<input type="submit" name="submit" value="搜索">
</form>
我们发现,代码并没有成功被执行的原因是<input>标签并没有被成功闭合,因为我们输入的引号(")和尖括号(<>)都被被实体化了,我们再输入单引号('),发现并没有被实体化,遇到这种情况,我们可以采用html的一些事件来规避尖括号等的使用,我们可以采用onblur事件来构造payload
onblur事件是html中自带的一个事件,主要用于脱离输入框时的事件执行,关于onblur的更多拓展内容可以访问该链接:onblur 事件 | 菜鸟教程
言归正传,我们利用onblur事件构造如下payload:
'οnblur='alert(/xss/)'"
同样的,我们要注意引号的闭合!
提交后发现页面并没有警告框弹出,我们只需要点击输入框再点击输入框外的位置使其退出输入模式,便可以成功执行代码,效果如图:
到这里我们就成功通过第三关了!