反射型low:
直接输入<script>alert(document.cookie)</script>
成功弹窗
可以看到源码都是get,array_key_exists函数判断name变量是否存在,并判断是否非空若存在且非空,判断不为空则执行echo,没有任何过滤所以直接执行
反射型medium
没有生效,同时发现script消失了
看到源码里有替换<script>标签成空
我这里就用事件型<img src=1 οnerrοr=alert(1)>
这里可以双写,可以用事件型绕开<script>过滤等等,这种方法掌握越多越好
成功弹窗
反射型high
过滤<script>过滤得很干净,看看源代码:
还是过滤<script>不过是用了正则一个个过滤,还是用上我们的事件型
成功弹窗
存储型low
输不进去,F12点开发现是前端限制了长度
修改前端
输入<script>alert(1)</script>成功弹窗
存储型medium
看看源码:
也是匹配到<script>就替换,采用双写试试看
说明:htmlspecialchars()函数、mysqli_real_escape_string()对$message参数做了严格过滤(html实体转义以及转义SQL语句中使用的特殊字符,杜绝了对$message关于xss的利用),但对$name参数做的过滤不严格。
成功弹窗
存储型high
很像啊很像,直接采用反射型high一样的事件型
成功弹窗
dom型low
DOM型XSS其实是一种特殊类型的反射型XSS,它是基于DOM文档对象模型的一种漏洞,其触发不需要经过服务器端,也就是说,服务端的防御并不起作用。
先试探一下,
直接弹窗
dom型medium
可以看到服务端只做script过滤
可以看到我们输入的地方在哪里,在两个标签里面,所以我们要先闭合标签,才能成功注入
成功弹窗
dom型high
前端代码不变,后端代码如下所示。服务器设置了白名单,default 参数只接受 French,English,German 以及 Spanish 这几个单词。
既然是白名单,那我们就无法在原先的代码上操作了,这时候我们考虑dom特有的#也就是锚点注入
English #<script>alert(document.cookie)</script>
描点注入在这三种难度下其实都可以用,这是dom型特有的注入方式,但也很好防御,
上面url最后面的就是描点,你可以设置白名单这样就十分方便