XSS
跨站脚本攻击(Cross-Site Scripting,简称XSS)是一种常见的Web安全漏洞,一直被评估为web漏洞中危害较大的漏洞,在OWASP TOP10的排名中一直属于前三的江湖地位。
XSS是一种发生在web前端的漏洞,所以其危害的对象也主要是前端用户。
XSS漏洞可以用来进行钓鱼攻击、前端js挖矿、用户cookie获取。甚至可以结合浏览器自身的漏洞对用户主机进行远程控制等。
形成XSS漏洞的主要原因:
程序对输入和输出的控制不够严格,导致“精心构造”的脚本输入后,在输出到前端时被浏览器当作有效代码解析执行从而产生危害。
三种类型
危害:存储型>反射型>DOM型
1.存储型XSS(存在数据库里面,一般出现在注册页、留言板等)
存储型XSS是指应用程序通过Web请求获取不可信赖的数据,在未检验数据是否存在XSS代码的情况下,便将其存入数据库。当下一次从数据库中获取该数据时程序也未对其进行过滤,页面再次执行XSS代码持续攻击用户。存储型XSS漏洞大多出现在留言板、评论区,用户提交了包含XSS代码的留言到数据库,当目标用户查询留言时,那些留言的内容会从服务器解析之后加载出来。
2.反射型XSS(不会存在数据库里面,一般出现在查询页面)
反射型XSS,又称非持久型XSS,攻击相对于受害者而言是一次性的。攻击者构造一个带有恶意脚本的URL,诱使用户点击该URL,当用户点击后,恶意脚本被注入到响应页面中,并被浏览器解析执行。
3.DOM型XSS(不与后台服务器交互数据 也属于反射型的一种 一种通过dom操作前端输出的时候产生问题)
攻击者通过修改页面的DOM结构,使恶意脚本被执行。
DOM,全称Document Object Model,是一个平台和语言都中立的接口,可以使程序和脚本能够动态访问和更新文档的内容、结构以及样式,DOM-XSS简单理解就是不与后台服务器产生数据交互,是一种通过DOM操作前端代码输出的时候产生的问题。
区别
1.被攻击对象的不同
反射型XSS的被攻击对象一般是攻击者去寻找的
存储型XSS是广撒网的方式或者指定的方式,危害性更大,范围更广
DOM型XSS的被攻击对象其实和反射型XSS被攻击对象差不多,就是给攻击对象放送URL。
2.解析位置不同
反射型XSS的脚本被解析的地方是浏览器
存储型XSS的脚本被解析的地方是服务器
DOM型XSS也是浏览器,但是反射型XSS需要联网,而DOM型不需要
3.存储时间不同
反射型XSS是一次性
存储型XSS是存储在服务器上,只要服务器不挂机或者是被干掉,就一直会有
4.允许输入点的不同(这是DOM型与其他两种的区别)
反射型XSS在搜索框啊,或者是页面跳转啊这些地方
存储型XSS一般是留言,或者用户存储的地方
DOM是在DOM位置上,不取决于输入环境上
跨站脚本漏洞测试流程
1.在目标站点上找到输入点,比如查询接口、留言板等;
2.输入一组“特殊字符+唯一识别字符”,点击提交后,查看返回的源码,是否有做对应的处理;
3.通过搜索定位到唯一字符,结合唯一字符前后语法确认是否可以构造执行js的条件(构造闭合);
4.提交构造的脚本代码(以及各种绕过姿势),看是否可以成功执行,如果成功执行则说明存在XSS漏洞;