第十一关,HTTP请求头注入
打开level11.php

查看代码,发现从前端传递过来的keyword、t_sort都被htmlspecialchars进行了转义,无法进行XSS攻击。
观察第19行,$_SERVER[‘HTTP_REFERER’]可获取当前请求来源的URL,并把它拼接到27行input标签名为t_ref的name属性的vlaue属性中,并且后端没有对$str33除<、>其他的特殊字符作转义过滤。
此外,前端的所有输入框均被隐藏。

所以这一点是第十一关的解题关键。
tips:只要遇到只过滤<、>,没有过滤引号的关卡,就可以尝试使用事件属性进行绕过。
例如:onclick、onmouseover、onfocus等。
由于常规浏览器访问无法自定义伪造请求来源的头部信息,所以要用到抓包工具或者Hackbar等能进行伪造的工具,这里展示Burp Suite + Hackbar。
(1)Burp Suite
在Header区域构造Referer请求头,里面的payload:
Referer:”type=”text” onclick=”alert()
type前面的双引号用来闭合原有的value属性双引号,onclick=后的双引号则是用来和原value属性剩下的一个双引号一起包裹住alert()
传递过去payload最后变成:
type”text onclick=”alert()”

点击send,并在response窗口里选择,Render

可以看到此时已经有输入框了。右键reponse区域,选择Show response in browser,复制URL,并在开启burpsuite代理的浏览器里访问


访问后点击输入框,即可通关,如图所示:

(2)Hackbar
这个比较轻松,原理就不解释了,都是在Header区域构造Referer请求头。
F12,选择Hackbar
输入URL后点击LOAD

选择Modify Header

选择Referer请求头,属性值我们要构造的payload:“type=”text” onclick=”alert()

选择EXECUTE

点击输入框

此时第十一关完成咯。
