存储型 XSS 攻击实战
文章目录
8. 存储型 XSS 攻击实战
8.1 Low 级别存储型 XSS 攻击实战
- 安全级别设置为
Low,点击XSS (Stored),进入存储型XSS攻击页面。发现该页面是个留言板,随意输入留言内容,可以直接显示在当前页面,如图 8-1

图 8-1
- 尝试在 Message 框提交弹窗脚本输出当前
cookie,<script>alert(document.cookie)</script>,可以直接弹窗,如图 8-2。说明当前级别没有对攻击脚本做任何过滤和转义

图 8-2
8.2 Medium 级别存储型 XSS 攻击实战
- 安全级别设置为
Medium,进入存储型XSS攻击页面,直接在Message框提交输出cookie脚本,发现脚本内容被显示,说明脚本被转义,如图 8-3

图 8-3
- 查看页面源码,发现对
Message框提交的内容使用了htmlspecialchars函数,Message框的XSS基本已不可能;但是我们发现对Name框提交的内容只是简单的使用str_replace函数进行了简单替换,与Medium反射型XSS一样,如图 8-4。我们只需要更换大写字母,或者<script>中再嵌套一层<script>即可绕过防御

图 8-4
- 在
Message框随意输入内容,Name框输入脚本<script>alert(document.cookie)</script>,发现脚本无法完整输入,页面对Name框的字符长度进行了前端限制,如图 8-5

图 8-5
- 由于只是在浏览器前端进行的字符长度限制,我们只需要在
Burpsuite中修改数据包就可以轻松绕过限制。配置好Burpsuite和浏览器的代理,抓包后,修改txtName变量的值为脚本<scr<script>ipt>alert(document.cookie)</script>(也可以把script转换为大写),如图 8-6。放行数据包后,可以成功提交,并弹窗输出cookie,如图 8-7

图 8-6

图 8-7
8.3 High 级别存储型 XSS 攻击实战
- 设置安全级别为
High,进入存储型XSS攻击页面,查看页面源码,发现Message字段仍然使用了htmlspecialchars函数;而Name字段使用了与 High 级别反射型XSS攻击一样的防护方法,使用preg_replace函数调用正则表达式对script做逐字匹配,并使用/i来不区分大小写,如图 8-8

图 8-7
- 方法与反射型 XSS 一致,不能使用
<script>标签,但可以使用<img>标签。由于前端仍然有字符长度限制,所以仍需要使用Burpsuite来修改数据包。在Burpsuite中修改数据包中的txtName内容为<img src=1 onerror=alert(document.cookie)>,如图 8-8。放行数据包后成功弹出cookie,如图 8-9

图 8-8

图 8-9
8.4 Impossible 级别存储型 XSS 攻击
查看页面源码,发现 Name 框和 Message 框提交的内容都使用了 htmlspecialchars 函数,如图 8-10,彻底杜绝了 XSS 攻击。

图 8-10