1、Low
测试代码:<script>alert(document.cookie)</script>
,弹出当前Cookie
成功,未做任何防范。
查看源码:
其中:array_key_exists()
函数检查某个数组中是否存在指定的键名,如果键名存在则返回 true,如果键名不存在则返回 false。
2、Medium
继续尝试刚才的语句<script>alert(document.cookie)</script>
时,出现以下内容:
再次尝试:<img src = alert(1)>
,成功爆出
判断应该是对<script> </script>
进行了转义。
尝试大小写绕过<sCript>alert(1)</scRipt>
,成功注入!
尝试嵌套绕过<sc<script>ript>alert(1)</script>
,成功注入,且判断出只对<script>
进行了转义。
查看源码:
可见,只使用str_replace()
函数对<script>
进行了过滤,且该函数区分大小写。
3、High
尝试大小写绕过:<sCript>alert(1)</scRipt>
结果是一个尖括号:>
尝试普通注入:<script>alert(1)</script>
,结果是:>
尝试添加 > 注入:<script>alert(1)</script>>
,结果是:>>
尝试嵌套注入:<sc<script>ript>alert(1)</script>
,结果是:>
尝试img标签:<img src onerror=alert(1)>
,成功注入
尝试svg标签:<svg onload=alert(1)>
,成功注入
根据以上结果判断,依然是对<script>
标签进行了过滤。
查看源码:
源码显示,使用正则进行了过滤,因此嵌套和大小写绕过都失效。
根据正则,白盒测试,进行编码绕过。
对<>进行HTML编码,此时script语句为:<script>alert(1)</script>
,尝试注入:
查看页面元素,显示成功注入,但是语句被放入了pre实体文本标签内,尝试闭合pre标签,重新注入,但是依然失败。到此
4、Impossible
htmlspecialchars() 函数将内容转为HTML实体文本,又加入了Token,打消了任何念头。
来源:CSDN
作者:工科学生死板板
链接:https://blog.csdn.net/qq_43968080/article/details/104107317