目录
前言
XSS全称(Cross Site Scripting)跨站脚本攻击,是最常见的Web应用程序安全漏洞之一,位于OWASP top 10 2013/2017年度分别为第三名和第七名,XSS是指攻击者在网页中嵌入客户端脚本,通常是JavaScript编写的危险代码,当用户使用浏览器浏览网页时,脚本就会在用户的浏览器上执行,从而达到攻击者的目的。
一、XSS原理是什么?
攻击者会使用一些特殊构造的语句插入到一些特定的地方例如搜索框、留言板、 HTML context、Attribute Context、URL Context、Style Context、Script Context、有输入有输出的地方都有可能存在XSS,XSS有三种类型分别为反射性、存储型和DOM-based型, 反射性和DOM-baseed型可以归类为非持久性XSS攻击,非持久性XSS是因为有些网站的过滤不严格导致语句被传输到后端之后由浏览器解析最后成功攻击,存储型可以归类为持久性XSS攻击而这种类型危害较重会将攻击者构造的语句保存在网站数据库导致所有登入网站的人都会遭受到攻击。XSS可能存在的地方
二、攻击方式
1.反射性XSS
插入代码 -> 执行到后端 - > 后端发送到前端 -> 浏览器解析
交互的数据一般不会被存在在数据库里面,只是简单的把用户输入的数据反射给浏览器,一次性,所见即所得。
2.DOM XSS
插入代码 - > 也可能会发送后端 -> 返回响应 -> js代码处理 -> 浏览器解析
不与后台服务器产生数据交互,通过前端的dom节点形成的XSS漏洞
3.储存型XSS
交互的数据会被存在在数据库里面,永久性存储,具有很强的稳定性
插入代码 - > 执行到后端 -> 存储到数据库 - > 调用数据 -> 后端发送到前端 -> 浏览器解析
4.手法
href a标签:"/><a href = 'javascript:alert(1)'>11</a><"
大小写href a标签:"/><a Href = 'javascript:alert(1)'>11</a><"
双引号:"οnmοuseοver="alert(1)
单引号:'οnmοuseοver='alert(1)
常规:<script>alert("1")</script>
双写:<scrscriptipt>alert("by+nbzb+xss")</scrscriptipt>
unicode编码绕过:将javascript:通过uniconde转换代替
回车url编码%0d:javascript:%0dhttp://%0dalert(1)
转换类型type:"type="text"%20οnclick="alert(1)
5.XSS测试方法
1、工具扫描:APPscan、AWVS
2、手工测试:Burpsuite、firefox(hackbar)、XSSER XSSF 使用手工检测Web应用程序是否存在XSS漏洞时,最重要的是考虑那里有输入,输入的数据在什么地方输出。在进行手工检测XSS时,人毕竟不像软件那样不知疲惫,所以一定要选择有特殊意义的字符,这样可以快速测试是否存在XSS。
(1)在目标站点上找到输入点,比如查询接口,留言板等;
(2)输入一组"特殊字符+唯一识别字符",点击提交后,查看返回的源码,是否有做对应的处理;
(3)通过搜索定位到唯一字符,结合唯一字符前后语法确认是否可以构造执行js的条件(构造闭合);提交构造的脚本代码,看是否可以成功执行,如果成功执行则说明存在XSS漏洞;
最重要的是考虑那里有输入,输入的数据在什么地方输出
三、一些绕过姿势
一般站点会装一下安全设备例如一些开源的安全狗、云锁这些,那么想用xss就要对其进行绕过否则会被过滤掉。
XSS绕过
前端限制绕过
大小写混合
双写绕过
编码
注释干扰后台绕过
没有分号
htmlspecialchars()函数
htmlspecialchars()函数的作用
& (和号)成为 & " (双引号)成为 " ’ (单引号)成为' < (小于)成为 < >(大于)成为 >
htmlspecialchars()函数配置参数
可用的quotestyle类型:ENT_COMPAT - 默认。仅编码双引号 (可绕过)ENT_QUOTES - 编码双引号和单引号(a标签可绕过)ENT_NOQUOTES - 不编码任何引号 & (和号)成为 & " (双引号)成为 " ’ (单引号)成为' < (小于)成为 < >(大于)成为 >
四、一些防御方法
XSS防御的总体思路是:对输入进行过滤,对输出进行编码过滤:根据业务需求进行过滤,比如输出点要求输入手机号,则只允许输入手机号格式的数字。
转义:所有输出到前端的数据都根据输出点进行转义,比如输出到html中进行html实体转义,输入到JS里面的进行JS转义(\)
总结
XSS的危害
劫持用户cookie
点击构造的链接触发劫持cookie
框架钓鱼、刷流量、挂马、键盘记录(需要设置跨域)等等