XSS跨站脚本攻击原理与常见的脚本及《XSS跨站脚本攻击剖析与防御》摘录总结

一.XSS跨站脚本攻击的原理

1.什么是XSS跨站脚本

跨站脚本(Cross-Site Scripting,XSS)是一种经常出现在Web应用程序中的的计算机安全漏洞,是由于Web应用程序对用户的输入过滤不足而产生的。攻击者利用网站漏洞把恶意的脚本代码(通过HTML代码和客户端Javascript脚本)注入到网页之中,当其他用户浏览这些网页时,就会执行其中的恶意代码,对受害者用户可能采取Cookie资料窃取、会话劫持、钓鱼欺骗等各种攻击。
开放式Web应用程序安全项目(Open Web Application Security Project,OWASP)是世界上最知名的Web安全与数据库安全研究组织,在该组织发布的2017年的统计中,XSS跨站脚本漏洞高居第三位
2107 OWASP Top10 Web漏洞

2.跨站脚本攻击产生因素

1.Web浏览器本身的设计。浏览器包含了解析和执行JavaScript等脚本语言能力,这些语言可以创建各种格式丰富的功能,而浏览器只会执行,不会判断数据和程序代码是否有恶意;
2.交互过程。输入与输出是Web应用程序最基本的交互,在这个过程中若没有做好安全防护,Web应用程序很容易出现XSS漏洞;
3.XSS漏洞危害意识。很多人没有真正意识到XSS漏洞的危害,导致XSS漏洞受到开发人员忽视;
4.触发方式简单。只要向HTML代码中注入脚本即可,且执行手段众多,譬如CSS、Flash等,完全防御是一件相当困难的事情;
5.Web2.0的流行。Web2.0时代鼓励用户信息分享与交互,产生了越来越丰富的交互功能,如论坛、博客或社交网络,所以产生XSS漏洞的概率增加。

二.XSS跨站脚本攻击的类别

1.反射型跨站脚本

反射型跨站脚本(Reflected Cross-site Scripting)也称作非持久型、参数型跨站脚本。这种类型的跨站脚本是最常见的,也是使用最广的一种,主要用于将恶意脚本附加到URL地址的参数中。

反射型XSS的利用一般是攻击者通过特定的手法(如电子邮件),诱使用户去访问一个包含有恶意代码的URL,当受害者点击这些链接的时候,恶意的JavaScript代码会直接在受害者主机上的浏览器执行。只有在用户点击时才触发,而且只执行一次,非持久化,恶意URL的暴露问题可通过各种编码转换解决,以增强其迷惑性。此类XSS通常出现在网站的搜索栏、用户登入口的地方,常用来窃取客户端Cookie或进行钓鱼欺骗

含恶意XSS链接
访问链接
上传数据
下载数据
执行恶意代码
传递隐私数据
或跳转钓鱼链接
获取到用户隐私数据
完成反射型XSS攻击
攻击者
用户
浏览器
正常服务器
恶意服务器

2.持久型跨站脚本

持久型跨站脚本(Persistent Cross-site Scripting)也称作存储型跨站脚本(Stored Cross-site Scripting),比反射型跨站脚本更具有威胁性,并且可能影响到Web服务器自身的安全。
持久型跨站脚本的利用不需要用户点击特定的URL,持久型XSS一般出现在网站的留言、评论、博客日志等交互处,攻击者事先将恶意的JavaScript代码上传或存储到具有漏洞的服务器中,只要用户浏览包含此恶意JavaScript代码的页面就会执行恶意代码。

恶意代码
正常访问
上传数据
恶意代码
执行恶意代码
上传用户数据
注入脚本
控制权限
用户数据
注入脚本
攻击者
漏洞服务器
用户
浏览器
漏洞服务器
恶意服务器
恶意服务器
攻击者

持久型跨站脚本的危害比反射型XSS大,更严重的是持久型跨站脚本能轻易编写危害性更大的XSS蠕虫,跨站蠕虫是使用Ajax/JavaScript脚本语言编写,能在网站中事先病毒的几何数级传播,其感染程度和攻击效果十分可怕。

三.XSS跨站脚本攻击的方式

1.XSS构造剖析

1. 绕过XSS-Filter
为了防御跨站脚本攻击,会在Web应用中设计一个XSS Filter,即跨站脚本过滤器,用于分析用户提交的输入,并消除潜在的跨站脚本攻击、恶意的HTML或简单的HTML格式错误。XSS Filter一般是基于黑白名单的安全过滤策略,在用户提交信息时,会对所有的输入进行检验,如检测到黑名单中的数据,便进行拦截、编码和消毒过滤等处理。
以下从“攻”的角度探讨一些测试用例:
(1)利用<>标记注入HTML/JavaScript
如果未限制<>等标记,那攻击者就能操作一个HTML标签,然后通过<script>标签插入恶意代码脚本;

<script>alert(1);</script>  //弹出窗口显示“1”

(2)利用HTML标签属性值执行XSS
很多HTML标记中的属性都支持JavaScript:[code]伪协议形式,这个特殊的协议类型声明了URL主体是任意的JavaScript代码,由JavaScript的解释器运行,攻击者可以利用部分HTML标记的属性值进行XSS攻击;此类攻击具有一定的局限性,并不是所有的浏览器都支持Javascript伪协议

<table background="javascript:alert(1);"></table>   //通过表格背景属性插入javascript代码
<img src="javascript=alert(1);">   //通过图片链接插入javascript代码
还有如下属性:href=、lowsrc=、bgsound=、value=、action=、dynsrc=

注:通常只有引用文件的属性才能触发跨站脚本,也并非所有嵌入到Web页面中的脚本都是Javascript,还允许有其他值,比如Vbscript。
(3)空格回车Tab键
如果XSS Filter仅仅把敏感的输入字符列入黑名单,对敏感字javascript而言,用户可以利用空格、回车和Tab键绕过限制:

<img src="java	script:alert(1);">   //java和script中的间隔为Tab键

产生原因为JavaScript语句通常以分号结尾,如果JavaScript引擎确定一个语句是完整的,而这一行的结尾有换行符,那就可以省略分号,如果同一行由多个语句,那么每个语句就必须使用分号结束。除了在引号中分割单词或强制结束语句外,额外的空白无论与何种方式添加都无所谓;

var a= true   //单语句可省略分号
var a= true; var b= "this is also true";  //同一行多语句以‘;’结束
var a
='hello word';   //换行赋值成功 

(4)对标签属性值转码
对普通的HTML标签属性值进行过滤,攻击者可以通过编码处理来绕过,因为HTML中属性值本身支持ASCII码形式。

<img src="javascript:alert(1);">   //标准代码
<img src="javascrip&#116&#58alert(1);">   //ASCII编码后
//‘t’的ASCII码值为166,用‘&#116’表示,‘:’则表示为‘&#58’
//此外Tab键的ASCII码‘&#9’、换行键的‘&#10’、回车键的‘&#13’可以被插入到代码的任意位置。 

为了防范利用HTML标签属性值编码的XSS,最好也过滤‘&’,‘#’,‘\’等字符;
(5)产生自己的事件
JavaScript与HTML之间的交互是通过事件来实现的,事件就是用户或浏览器自身执行的某些动作,而响应事件的函数就叫做事件处理函数(或事件侦听器)

//点击【click me】按钮,触发onclick事件,执行JavaScript代码
<input type="button" value="click me" onclick="alert('click me')" />

攻击者可以通过大量事件执行跨站脚本,只列举部分:

<img src=x onerror=alert(1)>
//onerror是img标记的一个事件,只要页面发生错误,该事件立即被激活

ondblclick   //鼠标双击某个对象
onkeypress   //某个键盘的键被按下或按住
onload   //某个页面或图像被完成加载
onmousemove   //鼠标被移动
onsubmit   //提交按钮被点击

(6)扰乱过滤原则

<img src="javascript:alert(1);">   //正常
<IMG SRC="javascript:alert(1);">   //转换大小写
<iMg sRC="jaVasCript:alert(1);">   //大小写混淆
<img src='javascript:alert(1);'>   //使用单引号
<img src=javascript:alert(1);>   //不使用引号
<img src="java/*javascript*/script:alert(1);">   //使用注释
//除了/**/之外,样式标签中的‘\’和结束符‘\0’也是被浏览器忽略

以上的XSS构造技巧只是冰山一角,由于Web浏览器种类、版本的不同,各自的HTML、CSS、JavaScript等引擎也存在着各种各样的差异,再加上各个站点采用了不同的XSS检测和防范策略,XSS构造技术五花八门、包罗万象。在测试XSS的过程中,需要尝试各种XSS注入语句,以绕过服务器端对跨站脚本的过滤,国外著名安全工程师Rsnake把自己对XSS的研究总结成XSS Cheat Sheet,当中罗列了各种各样的XSS代码,引用中文翻译的一片文章。
XSS Filter Evasion Cheat Sheet 中文版

四.XSS跨站脚本攻击的利用

XSS攻击属于被动式攻击,具有一定的局限性,只能在用户访问特定页面的时候才会触发漏洞,离开页面后攻击也随之失效。以下简单剖析一些常见的XSS攻击的利用:

1.Cookie窃取

窃取客户端Cookie资料是XSS攻击最常见的应用方式之一。
Cookie是用户浏览网页时网站存储在用户机器上的小文本文件,记录了与用户相关的一些状态或设置,比如用户名、ID、访问次数等,当用户再一次访问这个网站的时候,网站会先访问用户机器上对应的该网站的Cookie文件,并从中读取信息,以便快速访问。

2.会话劫持

Session会话控制:Session对象存储特定用户会话所需的属性及配置信息。当用户在应用程序的Web页之间跳转时,存储在Session对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web页时,如果该用户还没有会话,则Web服务器将自动创建一个 Session对象。当会话过期或被放弃后,服务器将终止该会话。Session 对象最常见的一个用法就是存储用户的首选项。Session和Cookie的最大区别在于:Session是保存在服务器端的内存里面,而Cookie保存于浏览器或客户端文件里面。
会话劫持指攻击者利用XSS劫持了用户的会话去执行某些恶意操作,这些操作往往能达到提升权限的目的。

3.网络钓鱼

**网络钓鱼(Phishing)**是一种利用网络进行欺诈的手段,主要通过受害者心理弱点、好奇心、信任度等心理陷阱来实现诈骗,属于社会工程学的一种。网络钓鱼利用有一定概率使人信任并相应的原则进行攻击,现今在很多客户端和大型Web网站加入了反钓鱼功能,因此成功率较低。
但人们未意识到集合XSS技术的网络钓鱼是最具威胁的一种攻击手段,传统的钓鱼攻击通过复制目标网站与用户进行交互而实现,这种钓鱼网站域名和页面一般是独立的,而结合XSS技术后,攻击者能通过JavaScript动态控制页面内容和Web客户端的逻辑,使XSS钓鱼的欺骗性和成功率大大增加。

4.XSS History Hack

运用一些JavaScript/CSS的技巧,攻击者能获取用户浏览器的某些历史记录,甚至是在搜索引擎输入的查询字符,其原理只是利用了CSS能定义和控制链接样式的特性

5.客户端信息刺探

通过JavaScript/XSS提取有用的客户端信息,如浏览器访问记录、IP地址、开发端口等,即可发动新一轮的攻击
(1)JavaScript实现端口扫描
JavaScript可对用户本地网络中的主机进行端口扫描,这可以探测其主机提供的计算机网络服务类型,这些服务与端口号相关,例如21端口对应FTP服务,3306端口对应Mysql服务等。
(2)截取剪切板内容
JavaScript有一个很强大的特性,就是可以操作客户端的剪贴板内容,在用户浏览网页时,粘贴复制的一些重要的信息,这些信息可能含有用户账号、密码等一些隐私数据。如果网站存在XSS漏洞,攻击者就可以窃取到这些重要的信息:

clearData(sDataFormat)   //删除剪贴板中指定格式的数据
getData(sDataFormat)   //从剪贴板获取指定格式的数据
setData(sDataFormat, sData)   //给剪贴板赋予制定格式的数据

(3)获取客户端IP地址
利用JavaScript脚本代码,还能够获取客户端内网IP,依托一些IP查询网站,即可获取外网IP。

6.其他恶意攻击剖析

(1)网页挂马:网页木马隐蔽性很高,看似正常的网页,在用户浏览时运行木马程序,因为在浏览器中执行下载运行,用户是无法察觉的。网页挂马技术门槛不高,但下载的病毒危害性很高。网页挂马方式很多,一般都是通过篡改网页来实现的,例如在XSS攻击中使用<iframe>标签,当挂马网页在浏览器执行后,边指引浏览器加载网页木马的链接:

<iframe  src=xxx width=0 height=0></iframe>
//由于高度宽度都设置为0,所以用户不会察觉到

(2)DOS和DDOS
DOS(Denial of Service)是拒绝服务攻击,这种攻击会利用大量数据包“淹没”目标主机,耗尽资源导致系统崩溃,使目标主机无法对用户作出相应反馈。

<script>for (;;) alert(1);</script>   //无尽弹框,但可被浏览器禁止
<meta http-equiv=“refresh” content=0>     //不断刷新页面

DDOS(Distributed Denial of Service)是指分布式拒绝服务攻击,是目前攻击者经常采用而难以防范的攻击手段。攻击者利用因特网上成千上万的Zombie(僵尸,即被利用的主机),对目标发动威力巨大的拒绝服务攻击。攻击者通过XSS注入恶意代码对一个网站持续不断地发送请求,或通过XSS劫持大量的浏览器实施此攻击

发送请求
发送请求
发送请求
发送请求
用户
服务器
用户
用户
用户

(3)XSS Virus/Worm:类似于个人计算机平台上的病毒,有潜伏、后门的特性,可以用于盗号、窃取用户隐私信息,主要在客户端执行恶意攻击,类似蠕虫病毒具有自我复制的攻击形态,因为使用JavaScript、Vbsccript等客户端语言编写,所以在Web平台能得到很好的支持。由于JavaScript等语言控制着Web客户端的逻辑,所以破坏性很强,能执行许多恶意操作,例如非法转账、任意篡改页面信息、删除目标文章等,如果利用XSS进行大批量的挂马,将造成更加严重的后果。

五.XSS跨站脚本攻击的工具

1.Google Chrome插件
(1)EditThisCookie
(2)HTTP Headers
(3)ModHeader
2.Firefox浏览器插件
3.Fiddler
Fiddler是一款免费且功能强大的HTTP/HTTPS网络调试器,该工具能检测和记录所有客户端和服务器之间的HTTP通信,此外还提供了清除IE缓存、请求构造器、文本转换等功能。
4.Kali-BeEF
BeEFThe Browser Exploitation Framework的缩写。它是一种专注于Web浏览器的功能强大的渗透测试工具。为经验丰富的渗透测试人员提供实用的客户端攻击向量。BeEF专注于利用浏览器漏洞来评估目标的安全状况。该框架包含许多使用简单而强大的API的命令模块,也支持自定义模块的开发。
5.在线XSS平台
XSS平台

六.XSS跨站脚本攻击的发掘

七.XSS跨站脚本攻击的防御

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值