XSS攻击概述

1.概念

  跨站脚本攻击(Cross-Site Scripting,XSS)出现在上世纪 90年代中,由于跨站脚本的缩写和层叠样式表(Cascading Style Sheets,CSS)的缩写一样,为了防止混淆,故缩写成XSS。XSS攻击是由于Web应用程序对用户输入过滤不足而产生的,使得攻击者输入的特定数据变成了JavaScript脚本或HTML代码。

  XSS攻击在开放式 Web 应用程序安全项目(Open Web Application Security Project, OWASP)2007 年、 2010 年、2013 年发布的十大 Web 安全应用风险的排名始终位于前三, 并且根据 2017 年的十大 Web 应用安全风险,XSS 存在于大约三分之二的 Web 应用程序中,攻击类型排名第七。

2.分类

  XSS 漏洞根据其特性和利用手法的不同主要分为三类:反射型 XSS(reflected XSS)、存储型 XSS(stored XSS)和基于 DOM 的 XSS(DOM-based XSS)。

(1)反射型 XSS:

  反射型 XSS 也称为非持久性、 间接性、参数型XSS。攻击者构造一个含有恶意代码的 URL,诱骗用户点击此 URL,恶意代码就会在用户的客户端被解析和执行,产生攻击行为。 因为恶意代码只有在用户点击 URL 时触发,只执行一次,因此叫做反射型跨站脚本。 对于该类型的 XSS 漏洞,攻击者除了基于构造的 URL 进行攻击外,还可以基于页面输入和 HTTP 请求(GET)报文进行攻击。eg:

http://IP地址/dvwa/vulnerabilities/xss_r/?name=<script> alert(/xss/)</script>

  

(2)存储型XSS

  存储型 XSS 也称为持久性、直接性 XSS。存储型 XSS 不需要用户点击特定的 URL 就能进行攻击。在这种类型的 XSS 中,攻击者将恶意代码直接注入到目标站点或与该站点共享同一个数据库的其它站点, 其在执行第一次攻击后,恶意代码在 Web 上对所有用户永久保存。也就是说,它将恶意代码注入到存储在服务器的数据,执行该行为后可以获得权限的提升。之所以会出现这种结果,是因为大多数用户都激活了默认账户(管理员)。由于恶意代码已经被插入到目标站点的数据库中,每当用户对目标站点进行正常的访问请求时,服务器端将从数据库取出恶意样本嵌入到响应, 用户接收到响应,其中的恶意样本就会被解析执行,攻击发生。

  存储型 XSS 一般出现在博客日志、网站留言、评论和转发处,并且常常被用于编写更危害性更大的 XSS 蠕虫。 由于恶意代码是上传到服务器端,因此存储型 XSS 比反射型 XSS 的危害更大。

(3)DOM型XSS

  DOM 型 XSS 也称为本地 XSS,这种类型的 XSS 是基于 DOM 文档对象模型的一种漏洞(DOM的全称为Document Object Model,即文档对象模型,DOM通常用于代表在HTML、XHTML和XML中的对象,使用DOM可以允许程序和脚本动态地访问和更新文档的内容、结构和样式),反射型 XSS 和存储型 XSS 一般存于服务器端,而 DOM 型 XSS 受客户端浏览器的脚本代码所影响。客户端 JavaScript 访问浏览器的 DOM,通过 DOM 可以动态地修改页面的内容。当 HTML 页面采用不安全的方式从 document、referrer、window、location 或者其它攻击者可以修改的对象获取数据时,攻击者构造包含恶意代码的 URL 使得恶意代码作为 URL 中的参数传递,当客户端浏览器将 URL 中的恶意脚本作为 DOM 操作的参数进行解析执行时,产生攻击行为。 

3.危害

(1)网络钓鱼,包括盗取各类用户账号

  网络钓鱼是指通过欺骗性的电子邮件和伪造的 Web 站点进行网络诈骗。传统的钓鱼攻击通常复制目标网站再设法使该网站与用户进行交互从而实现攻击,其域名较容易被识破。但是基于 XSS 的钓鱼网站则更加隐蔽,常见的 XSS 钓鱼方式包括:①XSS 重定向钓鱼:将真实网站定向到恶意网站;②XSS 跨框架钓鱼:通过<iframe>标签嵌入远程域的页面进行钓鱼;③HTML 注入钓鱼:直接利用 XSS漏洞将 HTML/javascript 代码注入到页面。

(2)窃取用户cookies资料,从而获取用户隐私信息,或利用好用户身份进行一部对网站执行操作

  HTTP 为无状态协议,即 Web 浏览器和 Web 服务器之间不需要建 立持久的连接。因此,Web 服务器为了鉴别用户身份就需要生成 cookie,将访问用户的一些基本信息 (身份识别码、密码等)保存在用户浏览器端,以便用户再次访问 Web 站点时,附带相应的 cookie 与服务器交互。 由于cookie 保存在客户端,因此攻击者可以利用 XSS 漏洞进行盗取和滥用。攻击者只要设法让用户触发 cookie 窃取的恶意脚本,就可以获取用户 cookie 信息发送到攻击者指定的远程服务器。

(3)劫持用户(浏览器)会话,从而执行任意操作,例如非法转账、强制发表日志、发送电子邮件等

  在 session 会话机制中,服务器通过 session ID 来识别用户身份和维持会话。session ID 本质上也是一种 cookie,但是 session ID 存储于内存而非浏览器或客户端文件里。倘若在某一阶段的会话中,攻击者获取到了用户的 session ID,就能假冒用户与服务器进行通讯。常见的 XSS 会话劫持如:在目标站点留言板提交 XSS 恶意脚本。当用户或是管理员登录触发此脚本时,他们的 session ID 就会被窃取,攻击者就可以利用 session ID 劫持用户或管理员与服务器的对话。若假冒管理员, 则可通过权限提升进一步扩大攻击影响。

(4)强制弹出广告页面、刷流量等

(5)网页挂马

  将Web网页技术和木马技术结合起来就是网页挂马。攻击者将恶意脚本隐藏在Web网页中,当用户浏览该网页时,这些隐藏的恶意脚本将在用户不知情的情况下执行,下载并启动木马程序。

(6)进行恶意操作,例如任意篡改页面信息、删除文章等

(7)进行大量的客户端攻击,如DDoS攻击

  DDOS(Distributed Denial of Service ,分布式拒绝服务),凡是攻击者通过控制在网络上的傀儡主机,同时发动他们向目标主机进行拒绝服务攻击的方式称为分布式拒绝服务攻击。利用XSS漏洞插入恶意代码,向用户浏览器中插入一个隐藏的iframe,其地址指向DDos攻击者的C&C服务器,从而进行DDos攻击。

(8)提取客户端信息(信息刺探),例如用户的浏览历史、真实IP、开放端口等

  攻击者可以利用XSS漏洞向页面注人恶意代码,利用DOM操作中的getComputedStyle()方法检查相应超链接的style属性,从而辨别用户是否访问过某个页面。更进一步,攻击者还可以用同样的思路针对某个搜索引擎生成大量包含查询关键字的链接来判断用户是否在该搜索引擎中检索过某个字符串。通过这种方式可以大量搜集用户的访问历史数据,危害用户个人隐私。

(9)控制受害者机器向其它网站发起攻击

(10)结合其他漏洞,如CSRF漏洞,进一步扩大攻击

  CSRF(Cross-site request forgery)跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。XSS主要是利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求,来利用受信任的网站。

(11)提升用户权限,包括进一步渗透网站

(12)传播跨站脚本蠕虫

  XSS蠕虫是指利用XSS攻击进行传播的一类恶意代码,一般利用存储型XSS攻击。XSS蠕虫的基本原理就是将一段JavaScript代码保存在服务器上,其他用户浏览相关信息时,会执行JavaScript代码,从而引发攻击。

4.防御

(1)cookie加上HttpOnly属性

  HttpOnly是一个应用给cookie的标志,而且所有现代浏览器都支持它。 HttpOnly标志的用途是指示浏览器禁止任何脚本访问cookie内容,这样就可以降低通过JavaScript发起的XSS攻击偷取cookie的风险。

(2)前端传过来的参数值,要对其进行过滤

  过滤或js事件标签,对传来的参数,根据常见的XSS绕过方式进行字符过滤,eg:

private String cleanXSS(String value) {
		value = value.replaceAll("\\(", "(").replaceAll("\\)", ")");
		value = value.replaceAll("'", "'");
		value = value.replaceAll("\"", """);
		value = value.replaceAll("eval\\((.*)\\)", "");
		value = value.replaceAll("[\\\"\\\'][\\s]*javascript:(.*)[\\\"\\\']", "\"\"");
		return value;
}

(3)安全编码

  PHP语言中针对XSS攻击的安全编码函数有htmlentities和 htmlspecialchars等,这些函数对特殊字符的安全编码方式如: 小于号(<)转换成&lt、大于号(>)转换成&gt、与符号(&)转 换成&amp、双引号(")转换成&quot、单引号(')转换成&#39。

 

参考:

[1]孙伟,张凯寓,薛临风,徐田华.XSS 漏洞 研究综述.信息安全研究,2016,2(12):1068- 1079.

[2]https://blog.csdn.net/shippingxing/article/details/88523912

posted @ 2020-11-21 14:11  etamsylate  阅读(428)  评论(0编辑  收藏  举报