XSS(Stored)

XSS 攻击全称跨站脚本攻击。是指用户在 Web 页面中提交恶意脚本,从而使浏览包含恶意脚本的页面的用户在不知情的情况下执行该脚本,导致被攻击的行为。

与 SQL 注入类似,XSS 也是利用提交恶意信息来实现攻击效果的攻击行为。但是 XSS 一般提交的是 Javascript 脚本,运行在 Web 前端,也就是用户的浏览器;而 SQL 注入提交的SQL 指令是在后台数据库服务器执行。所以两者攻击的对象是不一样的。

XSS 按照攻击的手法,一般可以分为反射型 XSS(Reflected)、存储型 XSS(Strored)、DOM 型 XSS(DOM)。

反射型 XSS 是指恶意的攻击脚本包含在 URL 中,只有当用户访问了包含恶意脚本的 URL,才会被害。反射型的攻击,攻击脚本不会写入网站的数据库,是一次性的攻击,所以黑客一般需要诱骗用户点击包含攻击脚本的 URL,才能攻击成功。

存储型 XSS 则是把攻击脚本提交到网站后台数据库,只要有人访问了显示该数据内容的页面,就会被攻击。比较常见的场景就是黑客发表了一篇包含攻击脚本的帖子,那么只要有人访问该帖子内容的用户,就会自动在他们的浏览器上执行攻击脚本。相对于反射型,存储型的 XSS 成功率更高。

DOM 型 XSS 是指基于 DOM 文档对象模型的 XSS 攻击。编写网页时,经常会用到各种 DOM 对象,如document.referer、document.write 等等。DOM 型XSS 攻击的输出点就位于 DOM 对象上。严格来说,DOM 型 XSS 即有可能是反射型,也有可能是存储型

Low级别存储型XSS攻击实战

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

1

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

2

Medium级别存储型XSS攻击实战

1.安全级别设置为Medium,进入存储型XSS攻击页面,直接在Message框提交输出cookie脚本,发现脚本内容被显示,说明脚本被转义。

1

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

2

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

3

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

4

5

High级别存储型XSS攻击实战

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

1

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

2

3

Impossible 级别存储型 XSS 攻击

1.查看页面源码,发现 Name 框和 Message 框提交的内容都使用了 htmlspecialchars函数,彻底杜绝了 XSS 攻击。

1