接下来我们来到了靶场的第四关:
我们依然采取老办法,讲上一关的payload传入这一关来判断靶场的防御机制,结果如图:
我们发现我们的代码并没有被成功执行,接下来我们来对其前端代码进行分析:
<form action="level4.php" method="GET">
<input name="keyword" value="'onblur='alert(/xss/)'">
<input type="submit" name="submit" value="搜索">
</form>
我们发现,程序并未对引号进行过滤,但是我们上一关的单引号显然无法将前面的双引号闭合,导致代码无法执行,于是,我们便有了如下的设想:
<input name="keyword" value=""onblur="alert(/xss/)">
双引号的巧妙利用使得我们成功闭合了前面的引号,并利用一个双引号将代码进行了巧妙的闭合,完整的payload如下:
"οnblur="alert(/xss/)
现在我们将构建好的payload再次传入,发现已经可以成功执行代码了!
该关主要考察了在<>号被过滤的情况下熟练使用html事件构造payload,并使用符号对前后语句闭合的技巧