跨站脚本漏洞(XSS)概述

概述:

Cross-Site Scripting 简称为“CSS”,为避免与前端叠成样式表的缩写”CSS”冲突,故又称XSS。一般XSS可以分为如下几种常见类型:

    1.反射性XSS;

    2.存储型XSS;

    3.DOM型XSS;

XSS漏洞一直被评估为web漏洞中危害较大的漏洞,在OWASP TOP10的排名中一直属于前三的江湖地位。

XSS是一种发生在前端浏览器端的漏洞,所以其危害的对象也是前端用户。

形成XSS漏洞的主要原因是程序对输入和输出没有做合适的处理,导致“精心构造”的字符输出在前端时被浏览器当作有效代码解析执行从而产生危害。

因此在XSS漏洞的防范上,一般会采用“对输入进行过滤”和“输出进行转义”的方式进行处理:

  输入过滤:对输入进行过滤,不允许可能导致XSS攻击的字符输入;

  输出转义:根据输出点的位置对输出到前端的内容进行适当转义

常见类型:

  • 反射型:
    交互的数据一般不会被存在数据库里,一次性,所见就所得,一般出现在查询类页面里

  • 存储型:
    交互的数据会被存在数据库里,永久性存储,一般出现在留言板里,注册等页面

  • DOM型:
    不与后台服务器产生数据交互,是一种通过DOM操作前端代码输出的时候产生的问题,一次性也属于反射型

           **危害性:存储型 > 反射型 > DOM型**
    

测试流程:

  1. 在目标站点上找到输入点,比如查询接口,留言板等
  2. 输入一组“特殊字符+唯一识别字符“,点击提交后,查看返回的源码,是否对其做了相应的处理
  3. 通过搜索定位到唯一字符,结合唯一字符前后语法确认是否可以构造执行JS的条件(构造闭合)
  4. 提交构造的脚本代码(以及各种绕过姿势)看是否成功,如果成功则存在XSS漏洞

tips:

  1. 一般查询接口容易出现反射型XSS,留言板容易出现存储型XSS
  2. 由于后台可能存在过滤措施,构造的script可能会被过滤掉,而无法失效,或者环境限制了执行(比如浏览器)
  3. 通过变化不同的script,尝试绕过后台过滤机制

环境:

测试目标:Pikachu或者DVWA

测试工具:火狐+开发者工具+burp