【实验目的】
了解XSS脚本及其分类和危害
【实验目的】
了解XSS脚本及其分类和危害
【实验原理】
跨站脚本:
跨站脚本(Cross-Site Scripting,XSS)是一种经常出现在Web应用程序中的计算机安全漏洞,是由于Web应用程序对用户的输入过滤不足而产生的。攻击者利用网站漏洞把恶意的脚本代码(通常包括HTML代码和客户端Javascript脚本)注入到网页之中,当其他用户浏览这些网页时,就会执行其中的恶意代码,对受害用户可能采取Cookie资料窃取、会话劫持、钓鱼欺骗等各种攻击。
XSS跨站脚本攻击本身对Web服务器没有直接危害,它借助网站进行传播,使网站的大量用户受到攻击。攻击者一般通过留言、电子邮件或其他途径向受害者发送一个精心构造的恶意URL,当受害者在Web浏览器中打开该URL的时侯,恶意脚本会在受害者的计算机上悄悄执行。
【实验步骤】
步骤1:了解xss跨站脚本
1.1 跨站脚本(Cross-Site Scripting,XSS)是一种经常出现在Web应用程序中的计算机安全漏洞,是由于Web应用程序对用户的输入过滤不足而产生的。攻击者利用网站漏洞把恶意的脚本代码(通常包括HTML代码和客户端Javascript脚本)注入到网页之中,当其他用户浏览这些网页时,就会执行其中的恶意代码,对受害用户可能采取Cookie资料窃取、会话劫持、钓鱼欺骗等各种攻击。
XSS跨站脚本攻击本身对Web服务器没有直接危害,它借助网站进行传播,使网站的大量用户受到攻击。攻击者一般通过留言、电子邮件或其他途径向受害者发送一个精心构造的恶意URL,当受害者在Web浏览器中打开该URL的时侯,恶意脚本会在受害者的计算机上悄悄执行。
1.2 为什么XSS跨站漏洞会如此普遍和流行?这是由多个因素造成的:
Web浏览器本身的设计是不安全的。浏览器包含了解析和执行JavaScript等脚本语言的能力,这些语言可用来创建各种格式丰富的功能,而浏览器只会执行,不会判断数据和程序代码是否恶意。
输入与输出是Web应用程序最基本的交互,在这过程之中若没做好安全防护,Web程序很容易会出现XSS漏洞。
现在的应用程序大部分是通过团队合作完成的,程序员之间的水平参差不齐,很少有人受过正规的安全培训,因此,开发出来的产品难免存在问题。
不管是开发人员还是安全工程师,很多都没有真正意识到 XSS 漏洞的危害,导致这类漏洞普遍受到忽视。很多企业甚至缺乏专门的安全工程师,或者不愿意在安全问题上花费更多的时间和成本。
触发跨站脚本的方式非常简单,只要向 HTML 代码中注入脚本即可,而且执行此类攻击的手段众多,譬如利用CSS、Flash等。XSS技术的运用如此灵活多变,要做到完全防御是一件相当困难的事情。
随着Web 2.0的流行,网站上交互功能越来越丰富。Web 2.0鼓励信息分享与交互,这样用户就有了更多的机会去查看和修改他人的信息,比如通过论坛、Blog 或社交网络,于是黑客也就有了更广阔的空间发动XSS攻击。
1.3 JavaScript如此流行的原因之一是:把JavaScript加入到Web页面中非常简单,只要页面中包含一个 script 标记,就可以增加想要的JavaScript代码。
HTML的script元素标记中间包含JavaScript,当浏览器遇到这一标记时,它不会将其内容处理成 HTML 或者 XHTML,而是把对于其内容的控制权移交给另一个内置的浏览器代理——脚本处理引擎。
XSS攻击就是将非法的JavaScript、VBscript等脚本注入到用户浏览的网页上执行,而Web浏览器本身的设计是不安全的,它只负责解释和执行JavaScript等脚本语言,而不会判断代码本身是否对用户有害。
1.4 如果不明白跨站脚本漏洞的成因,请思考下面的代码:
<html>
<head></head>
<body>
<script> alert("XSS")</script>
</body>
</html>
这是一段很简单的HTML代码,其中包括一个JavaScript语句块,该语句块使用内置的alert()函数来打开一个消息框,消息框中显示XSS信息。把以上代码保存为HTM或HTML文件,然后用浏览器打开,就会看到如下图所示的效果:
步骤2:XSS分类
XSS根据其特性和利用手法的不同,主要分成三大类型:反射型跨站脚本;持久型跨站脚本和DOM型跨站脚本。
2.1 反射型跨站脚本(Reflected Cross-site Scripting)
也称作非持久型、参数型跨站脚本。这种类型的跨站脚本是最常见,也是使用最广的一种,主要用于将恶意脚本附加到URL地址的参数中,例如:
http://www.test.com/input.php?name="><script>alert("XSS")</script>
反射型XSS的利用一般是攻击者通过特定手法(比如利用电子邮件),诱使用户去访问一个包含恶意代码的URL,当受害者单击这些专门设计的链接的时候,恶意JavaScript代码会直接在受害者主机上的浏览器执行。它的特点是只在用户单击时触发,而且只执行一次,非持久化,所以称为反射型跨站式脚本。
此类 XSS 通常出现在网站的搜索栏、用户登入口等地方,常用来窃取客户端 Cookies 或进行钓鱼欺骗。
反射型XSS的危害往往不如持久型XSS,因为恶意代码暴露在URL参数中,并且时刻要求用户单击方可触发,稍微有点安全意识的用户可以轻易看穿该链接是不可信任的。如此一来,反射型XSS的攻击成本要比持久型XSS高得多。
2.2 持久型XSS
持久型跨站脚本(Persistent Cross-site Scripting)也等于存储型跨站脚本(Stored Cross-site Scripting),比反射型跨站脚本更具威胁性,并且可能影响到Web服务器自身的安全。
此类XSS不需要用户单击特定URL就能执行跨站脚本,攻击者事先将恶意JavaScript代码上传或存储到漏洞服务器中,只要受害者浏览包含此恶意JavaScript代码的页面就会执行恶意代码。
持久型 XSS 一般出现在网站的留言、评论、博客日志等交互处,恶意脚本被存储到客户端或者服务器的数据库中,当其他用户浏览该网页时,站点即从数据库中读取恶意用户存入的非法数据,然后显示在页面中,即在受害者主机上的浏览器执行恶意代码。
持久型XSS不需要用户去单击URL进行触发,所以它的危害比反射型XSS大,黑客可以利用它渗透网站、挂马、钓鱼……
更严重的是,利用此类 XSS 能够轻易编写危害性更大的 XSS 蠕虫,跨站蠕虫是使用Ajax/JavaScript脚本语言编写的蠕虫病毒,能够在网站中实现病毒的几何数级传播,其感染速度和攻击效果都非常可怕。XSS蠕虫会直接影响到网站的所有用户,也就是一个地方出现XSS漏洞,同站点下的所有用户都可能被攻击。
由此可见,XSS攻击作为Web业务的最大威胁,危害的不仅仅是Web业务本身,对使用Web服务的用户也会造成直接的影响。
2.3 DOM 型XSS
DOM-Based XSS 是一种基于文档对象模型(Document Object Model,DOM) 的 Web 前端漏洞,简单来说就是 JavaScript 代码缺陷造成的漏洞。与普通 XSS 不同的是,DOM XSS 是在浏览器的解析中改变页面 DOM 树,且恶意代码并不在返回页面源码中回显,这使我们无法通过特征匹配来检测 DOM XSS,给自动化漏洞检测带来了挑战。在 2012 年,腾讯安全平台部就研发并使用了基于 QTWebkit 引擎的检测方案。
然而,由于 Web 前端语言灵活多变,各项业务代码复杂不一,加上部分前端开发人员安全意识不足,仍源源不断有存在 JavaScript 缺陷的页面产生,使得 DOM XSS 的检测出现了不少 "漏网之鱼"。更加雪上加霜的是,由于 JavaScript 是一门客户端脚本语言,其代码逻辑可以被任意用户查看到,所以不少"治标不治本" 的 DOM XSS 对抗策略被攻击者再次绕过,刚爬出一个坑,又跌落另一个坑。
DOM XSS 就像行人在广场随地乱吐的口香糖,成了 Web 前端挥之不去的安全梦魇。被随手编写出来容易,查找和修复却反反复复,费时费力。无论是目前安全平台部研发的门神系统,还是 DOM XSS 安全 JS,都只能称作缓兵之计。若能在开发过程中,有针对性的留意容易造成 DOM XSS 的 JavaScript 代码多留一个心眼,对传入的数据做严格的过滤,将其限制在可控范围内,才有可能从根本上解决 DOM XSS。
步骤3:XSS的危害
3.1 早期,XSS跨站脚本一直被当做是一类鸡肋漏洞,没有什么好利用的地方,只能弹出对话框而已,稍微有点危害的就是用来盗取用户Cookies资料和网页挂马。
通常情况下,攻击者通过注入如alert('xss')之类的JavaScript代码来证明XSS,该代码能够导致应用程序弹出带有XSS字样的窗口。从技术角度来说,这种示例确实证明XSS漏洞的存在性,但并没有真实地反映其危害性。
诚然,XSS可能不如SQL注射、文件上传等能够直接得到较高操作权限的漏洞,但是它的运用十分灵活(这使它成为最深受黑客喜爱的攻击技术之一),只要开拓思维,适当结合其他技术一起运用,XSS的威力还是很大的。
3.2 最近几年来,越来越多的人投入到对XSS技术的研究,基于XSS的漏洞利用技术层出不穷,危害也越来越严重,特别是Web 2.0出现以后,运用了Ajax技术的XSS攻击威胁颇大!比如,世界上的第一个跨站脚本蠕虫(XSS Worm)Samy,于2005年10月出现在国外知名网络社区MySpace,并在20小时内迅速传染了一百多万个用户,最终导致该网站瘫痪。不久后,国内一些著名的SNS应用网站,如校内网、百度空间也纷纷出现了XSS蠕虫。
另外,许多基于XSS的攻击框架和利用平台也大量涌现,如国外著名的 BeEF、XSS Shell、attackAPI;国内的Anehta等,导致XSS的攻击利用场景越来越多。
3.3 如今,只要一个站点存在跨站脚本漏洞,该站点的所有用户都可能受到危害。黑客一旦挖掘到XSS漏洞,就可以利用该漏洞实施会话劫持、资料窃取、渗透入侵和传播蠕虫病毒等一系列攻击。
3.4 XSS可能会给网站和用户带来的危害简单概括如下:
网络钓鱼,包括盗取各类用户账号;
窃取用户cookies资料,从而获取用户隐私信息,或利用用户身份进一步对网站执行操作;
劫持用户(浏览器)会话,从而执行任意操作,例如进行非法转账、强制发表日志、发送电子邮件等;
强制弹出广告页面、刷流量等;
网页挂马;
进行恶意操作,例如任意篡改页面信息、删除文章等;
进行大量的客户端攻击,如DDoS攻击;
获取客户端信息,例如用户的浏览历史、真实IP、开放端口等;
控制受害者机器向其他网站发起攻击;
结合其他漏洞,如CSRF漏洞,实施进一步作恶;
提升用户权限,包括进一步渗透网站;
传播跨站脚本蠕虫等;