Low
存储型XSS漏洞与反射型不同的是,存储型持续时间会很长,即便刷新页面或者关闭页面,再次打开时XSS漏洞依然会发挥作用。
这里name字段限制了输入最大长度,所以把payload放进message中:
<script>alert(document.cookie)</script>
成功,没有任何过滤
刷新页面或者退出页面时,我们注入的XSS攻击仍然有效,这就是存储型漏洞的特点
Medium
来到中级别,这里注意要将之前的代码清除,我们可以点击Clear Guestbook按钮清除评论
在message栏添加XSS代码:
<script>alert("You've been hacked!")</script>
没有蹦出弹窗,而是将代码内容显示在评论区
查看源代码可知
加入了几个新函数用于过滤输入:
strip_tags():去除字符串中的html、php和xml标签
str_replace():将字符串替换成别的内容
htmlspecialchars():将特殊字符转换成html字符实体
addslashes():在预定义字符串前添加反斜杠
而这些操作都是对message栏目实施的,name栏只是简单的替换了标签<script>,但name栏有输入长度限制。F12打开控制台更改页面源代码,将长度限制进行修改:
接下来用大小写绕过name过滤机制
成功
High
和存储型漏洞一样的是,这回我们仍然换标签,源代码中用正则表达式绕过了标签<script>,我们可以换成<img>或<iframe>
第一步先改长度限制
上代码
<img src=0 οnerrοr=alert(documnet.cookie)>
攻击成功!
Impossible
分析源代码
源代码对name参数也增加了更加严格的过滤机制,同时使用了Anti-CSRF token机制
generateSessionToken()
完全防御了XSS攻击和CRSF漏洞
XSS存储型漏洞就到这里了,欢迎反馈和交流