一、跨站脚本漏洞概述
1、漏洞概述
- XSS漏洞一直是web漏洞中危害比较大的漏洞,在OWASP TOP10中一直是排在前三的。
- XSS是一种发生在Web前端的漏洞,所以其危害的对象也主要是前端用户。
- XSS通常可以用于带钓鱼、前端JS挖矿、获取用户cookie等。甚至结合浏览器自身漏洞可以对用户主机进行控制。
2、攻击流程(窃取cookie)
- 用户访问XSS页面,触发XSS脚本,服务器返回“带恶意JS的”页面
- 客户端执行脚本,发送窃取到的cookie
- 攻击者使用窃取到的cookie伪造用户登录,造成破坏
3、漏洞形成原因
形成XSS漏洞的主要原因是程序对输入与输出的控制不够严格,导致精心构造的脚本输入后,在输出到前端时被浏览器当作有效代码进行解析从而产生危害。
二、跨站脚本漏洞类型及其测试流程
1、基本分类
反射型: 交互的数据一般不存放于数据库中,一次性的,所见即所得,一般出现在信息查询、显示页面等。
存储型: 与数据库之间存在数据交互,永久性存储,一般出现在留言板、注册等界面。
DOM型: 类似于反射型,也可以说是反射型的一种,主要特点是不与服务器进行交互,通过DOM操作前端代码输出的时候产生的问题。
2、一般测试流程
- 在目标站点上找到输入点,比如查询接口,登录注册界面等
- 输入一组“特殊字符+唯一标识符”,提交后,检查返回的源码是否有做对应的处理。
- 通过搜索定位到唯一标识符,结合唯一标识符前后的语法确认是否可以构造JS代码
- 提交构造的JS脚本(以及各种绕过姿势),看是否可以执行成功,如果能,则说民存在XSS漏洞。
注:
- 一查询接口容易出现反射型XSS,留言板,注册界面等容易出现存储型XSS
- 由于后台一般存在过滤措施,所以构造的script可能会被过滤掉,从而无法生效。
- 通过变换不同的script,可以尝试绕过后台过滤机制。
三、反射型XSS的实验演示
实验平台环境: Windows10 ,Firefox浏览器,pikachu漏洞练习平台
第一步:
输入一个特殊字符+自定义的标识符(<>666),输入内容被直接返回。
第二步:
检查html源码,发现输入内容是直接通过一个p标签显示出来的。
第三步:
使用script标签构造JS语句,进行测试,尝试弹出一个提示框,发现输入内容长度具有限制,检查HTNL源码,发现是前端设置的限制,手动修改后继续输入。
通过输入语句<script> alert("hello!") </script>
后提交表单,发现执行成功,说明存在XSS漏洞!
并且发现该XSS漏洞页面使用的是get提交方法,所以可以确定的是这是一个基于get的反射型XSS漏洞。
四、存储型XSS的实验演示
实验环境:Windows10 ,Firefox,DVWA漏洞练习平台
第一步:
随便输入一个特殊字符+自定义标识符,发现所有内容都被显示到留言板中,检查HTML源码,发现输入的内容是通过一个列表的<br>
标签显示,并没有做任何的过滤。
第二步:
输入构造的JS代码(<script>alert(23164834563276)</script>
),进行测试后发现留言板内容为空,但相应的JS代码会被执行,切换到其他页面后再切换回来发现依然会显示JS代码的执行效果,说明这是一个存储型的XSS漏洞。