level1
我没问查看发现,他提交了一个name参数,并且值为test,长度为4.
我们直接在name参数插入代码测试:<script>alert(1)</script>
我们查看一下源码
echo "<h2 align=center>欢迎用户".$str."</h2>";这里没有过滤直接输出接收到的字符串,那么用户恶意输入,当然也会执行,所以构成了xss漏洞。
level2
我们直接插入代码试试<script>alert(1)</script>
我们发现这里报错了,查看一下源码。
可以看到在<h2> </h2>
标签之中的恶意代码被编码了。这里的>和<都被编码成了html里面的实体。猜测是被htmlspecialchars()
函数做了特殊处理了。但是input中的恶意代码没有被编码,我们可以从这里下手。
构造闭合标签,并注释掉后边的,"> <script>alert('xss')</script> //
,可以发现,成功弹窗。
less3
我们输入测试语句尝试一下,依旧报错,查看源码
我们发现与第三关不同的是不仅h2标签里面的被实体化了,就连input里面的value也被处理了
我们输入' " < > /
,测试一下哪些被处理了,哪些没被处理。我们发现单引号和反斜杠没有被处理,而value也是用单引号闭合的,所以我们构造闭合
' οnclick='javascript:alert(/xss/)
less4
继续输入测试语句查看
我们发现输入框中的<>没有了,我们查看源码
这里发现上面箭头处的<>被实体化了,下面的<>被删除了
我们直接构造value的闭合就行了"οnclick="javascript:alert(/xss/)