Level1
首先观察网页没有发现存在输入框,所以我们查看网站的前端代码。
发现一个万能注入口将其改为<img src=”1” οnerrοr=”alert(1)”>(PS好像有图片的关卡都可以用),因为是第一关我们尝试最简单的,我们在URL上进行修改,将name=test修改为name=<script>alert(1)</script>。
Level2
进入第二关在输入框进行测试,发现无法用<script>alert(1)</script>注入,应该有过滤。
我们查看网页的前端代码
使用符号闭合进行XSS注入 "><script>alert('1')</script>(对input函数进行闭合)
我们打开虚拟机查看后端代码
存在htmlspecialchars()函数,其在php中,htmlspecialchars()函数是使用来把一些预定义的字符转换为HTML实体,返回转换后的新字符串,原字符串不变。如果 string 包含无效的编码,则返回一个空的字符串,除非设置了 ENT_IGNORE 或者 ENT_SUBSTITUTE 标志。
Level3
首先先对输入框进行常规测试,但是没有什么用。然后我们查看后端代码
此处的value值用了htmlspecialchars($str)对特殊字符进行了实体化,我们可以现在可以进行一些处理来跳出htmlspecialchars($str),我们找闭合点,发现闭合点是单引号,所以我们可以加上'οnmοuseοver='javascript:alert(1)。
Level4
尝试<script>alert(1)</script>,发现原样输出这样表示后端应该是进行了实体化
发现原样输出,但是文本框里的<>被过滤,同时/被转义为%2F,所以猜想可能后端过滤了<>,所以我们选择构造payload: "οnmοuseοver="javascript:alert(1)或者" οninput='alert(1)'
Level5
进行尝试<script>alert(1)</scipt>发现进行了过滤
尝试<img src=1 οnerrοr=alert(1)>发现on被过滤
在不利用script和on的时候,我们可以尝试闭合符号然后过构造超链接"><a href="javascript:alert(1)">xss</a>
在构造完成后文本框后面出现超链接,我们可以点击即可过关。
(L1-L5)