存储型 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