浅析XSS跨站脚本攻击
目 录
第1章 XSS概述... 1
1.1 XSS定义... 1
1.2 XSS危害... 1
1.3 XSS攻击原理... 1
第2章 XSS攻击类型... 2
2.1 反射型XSS. 2
2.2 存储型XSS. 3
2.3 DOM XSS. 3
第3章 XSS攻击案例分析... 4
3.1 实验环境... 4
3.2 XSS攻击过程分析... 5
第4章 XSS攻击防御措施... 12
4.1 关于服务器端防御措施... 12
4.2 关于客户端防御措施... 12
第5章 总结... 13
参考文献 13
1.1 XSS定义... 1
1.2 XSS危害... 1
1.3 XSS攻击原理... 1
第2章 XSS攻击类型... 2
2.1 反射型XSS. 2
2.2 存储型XSS. 3
2.3 DOM XSS. 3
第3章 XSS攻击案例分析... 4
3.1 实验环境... 4
3.2 XSS攻击过程分析... 5
第4章 XSS攻击防御措施... 12
4.1 关于服务器端防御措施... 12
4.2 关于客户端防御措施... 12
第5章 总结... 13
参考文献 13
第1章 XSS概述
1.1 XSS定义
XSS(Cross Site Scripting)跨站脚本攻击(为何不使用CSS简称?由于CSS是层叠样式表(Cascading Style Sheets)的缩写,同时Cross与X发音类似,所以用其替代)指的是攻击者在Web页面中插入恶意代码,当用户浏览该页面时,嵌入其中的恶意代码会 被执行,从而达到窃取信息、恶意攻击等目的。1.2 XSS危害
XSS涉及的场景较广泛,主要包括一些支持Html解析和JavaScript解析的客户端软件(例如QQ、一些音乐播放器等)、Html文档、Xml文档、Flash、PDF以及一些浏览器的功能界面等[1]。根据XSS执行环境不同(Internet域、本地域、特殊域等),所产生的危害也不同,攻击者可以通过绕过客户端安全策略访问敏感信息,窃取或修改回话Cookie,进行客户端渗透攻击。综述所具有的危害性,大致分为以下几类:
- 挂马
- 盗取用户Cookie
- Dos客户端浏览器
- 钓鱼攻击
- 劫持用户web行为,内网渗透
- 爆发Web2.0蠕虫攻击。蠕虫式DDoS攻击
- 蠕虫式挂马攻击、刷广告、刷流量
- 编写XSS病毒,删除目标文章、篡改用户数据……
1.3 XSS攻击原理
XSS攻击主要是利用web应用程序对用户输入内容的安全验证过滤不严密,从而得以被攻击者利用,提交一些非法参数,导致用户数据泄露。例如在许多 比较流行的Web论坛、blog、留言本以及其他允许用户交互的Web应用程序中,用户提交内容中可以包含HTML以及JavaScript及其他脚本代 码,如果Web应用程序对这些代码输入的合法性没有进行有效的验证与过滤,就很有可能让这些恶意代码逻辑包含在服务器动态产生或者更新的网页中。第2章 XSS攻击类型
XSS攻击类型主要分为三种[3]:反射型XSS(非持久性XSS)、存储型XSS(持久型XSS)和DOM XSS。2.1 反射型XSS
当用户提交请求时,XSS代码出现在浏览器的URL中,作为输入内容提交到服务端,服务端解析并将该段XSS代码展示在响应内容中,最后浏览器解析执行。这一过程被称为反射过程。例:编写XSStest.php代码如下:
<?php
echo $_GET [‘x’];
?>
输入x的值未经任何过滤即可直接输出,在浏览器url位置可以提交如下内容:http://127.0.0.1/xsstest.php?x=<script>alert("hello xss")</script>
该请求被服务端解析,echo则会完整地输出<script>alert("hello xss")</script>到响应体中,然后浏览器解析执行触发(如图2.1所示)
图2.1 浏览器解析并执行
Fig.2.1 The browser executes Js code
2.2 存储型XSS
存储型XSS主要是指提交的XSS代码会存储在服务器端(数据库、内存或者文件系统等),下次请求目标页面时不用再提交XSS代码,危害较大,同时攻击具有隐蔽性。典型的存储型XSS例子则是网络留言板,用户提交一条包含XSS代码的留言存储到数据库,目标用户查看留言板时,提交的留言内容会从数据库查询并显示出来,浏览器发现有XSS代码,就会当做正常的HTML与JS进行解析,此时则会触发XSS攻击。
2.3 DOM XSS
DOM树的概念对于Web前端安全非常重要,简而言之,HTML文档就可以看做为一个DOM树,树形结构主要包 括<html>、<head>、<title>等相关标签,其中<html>被称为DOM树根,其它标 签则称为树的节点。DOM XSS攻击的XSS代码不需要服务器端参与解析响应,触发XSS主要依赖浏览器端的DOM解析。
例如编写domxss.html代码如下:
<? php
echo $_GET ['x'];
?>
触发XSS方式为:http://127.0.0.1/test.html#alert("1")
图2.2 触发XSS结果
Fig.2.2 Activation of XSS
url中#后的内容是不会发送至服务端的,在客户端被接收并解析执行。
第3章 XSS攻击案例分析
3.1 实验环境
演示环境:Win7 X64 旗舰版;wamp集成环境;存在XSS漏洞的phpBB论坛源码。特别提示:所有演示步骤均在本地测试,请勿攻击他人网站,否则造成一切严重的后果均由个人承担。
实验环境中phpBB论坛的部分页面代码经过修改,存在XSS安全漏洞的位置位于posting.php以及viewtopic.php文件中,主要漏洞代码如图3.1所示。案例分析将基于该代码漏洞进行演示[2]。
图3.1 存在XSS漏洞的代码
Fig.3.1 Code with XSS vulnerability
3.2 XSS攻击过程分析
(1)测试XSS漏洞注册一个ID,并使用该ID在phpBB论坛上发布含有脚本“<script>alert('Hello XSS~');</script>”,如图3.2所示:
图3.2 检测XSS漏洞
Fig.3.2 Edit post
当其他用户浏览该帖子时,在他们的浏览器端将会弹出一个如图3.3所示的对话框,验证了该论坛存在XSS安全漏洞。
图3.3 确认存在XSS漏洞
Fig.3.3 XSS vulnerability
(2)显示用户的会话Cookie重新编辑发布的帖子,将脚本内容修改为:<script>alert(document.cookie);</script>,其他用户访问该帖子时,将会弹出如图3.4所示的对话框,在对话框中显示了当前登录用户在该论坛程序上的Cookie,包括用户名、密码等信息,一旦被攻击者窃取,将会假冒用户身份,实施进一步攻击。
图3.4 Cookie信息
Fig.3.4 Cookie
复制该Cookie信息,通过十六进制解码,可以在Cookie明文中发现会话sid等关键信息,如图3.5所示
图3.5 解码Cookie信息
Fig.3.5 Decode the Cookie
(三)窃取用户的Cookie该部分主要包括本地窃取演示以及远程窃取Cookie两部分。
本地演示:
再次访问存在XSS漏洞的页面,复制Cookie信息如下(每次访问该页面所弹出的Cookie信息不同):
phpbb2mysql_data=a%3A2%3A%7Bs%3A11%3A%22autologinid%22%3Bs%3A0%3A%22%22%3Bs%3A6%3A%22userid%22%3Bs%3A1%3A%228%22%3B%7D;
phpbb2mysql_sid=744a4e8d5e37b54837af3efd33ecaccc;
phpbb2mysql_t=a%3A1%3A%7Bi%3A5%3Bi%3A1362052310%3B%7D
打开火狐浏览器(需安装Tamper Data插件支持),访问phpBB论坛,显示无任何登陆用户,如图3.6所示:
图3.6 浏览phpBB 论坛
Fig.3.6 Visit the page of phpBB
打开Firefox:工具——Tamper Data ——点击Start
Tamper开始抓取信息,此时刷新Firefox登陆界面,然后会跳出Tamper
Data对话框,点击Tamper按钮,将图3.7所示的Cookie一栏替换为你抓取到的Cookie,单击确定发送请求数据。
图3.7 Cookie替换
Fig.3.7 Replace Cookie with Tamper Data
此时Firefox显示用户已经登录,如图3.8所示,可以使用该账户进行进一步攻击。
图3.8 Cookie替换成功
Fig.3.8 The Cookie works
本地攻击在实战中意义不是很大,请进一步观看远程演示:编写远程获取Cookie的脚本文件[4]:stealcookie.asp。代码内容如图3.9所示:
图3.9 stealcookie.asp文件
Fig.3.9 stealcookie.asp
将stealcookie.asp文件上传至个人服务器(可以使用免费空间),重新编辑包含XSS漏洞的帖子内容,如图3.10所示:
图3.10 远程获取Cookie信息
Fig.3.10 Gather Cookie by remote system
当用户浏览该页面时,Cookie信息默认会被写入到服务器stealcookie.txt文件中。
图3.11 创建stealcookie.txt文件
Fig.3.11 Create stealcookie.txt
浏览stealcookie.txt文件可以获取Cookie信息如下:
phpbb2mysql_data=a:2:{s:11:"autologinid";s:0:"";s:6:"userid";s:1:"8";};
phpbb2mysql_sid=744a4e8d5e37b54837af3efd33ecaccc;
phpbb2mysql_t=a:1:{i:5;i:1362053707;}
打开Firefox浏览器进行进一步操作(操作过程和本地实践一致)。第4章 XSS攻击防御措施
XSS攻击主要是由于Web应用程序对用户输入未进行严格审查以及精确过滤所致。通过XSS攻击实例不难发现,防范XSS攻击主要从客户端以及服务器端进行考虑[2]。4.1 关于服务器端防御措施
XSS漏洞首要防范措施是对所有外部请求进行输入检查,包括针对需要验证的数据的潜在特性进行分析测试,例如用户输入数据是否过长、是否包含非法字 符、对HTML以及JS代码进行检验。根据Web程序每个字段中接收的数据类型,尽可能限制性地对用户名、E-mail、手机号等应用不同的验证规则,例 如:对于年龄的textbox中,只允许用户输入0-200之间的数字,数字以外的字符统一过滤掉。对于用户提交到响应页面的数据进行HTML编码,屏蔽可能出现的恶意字符。HTML编码是指使用对应的HTML实体代替字面量字符,确保浏览器安全处理可能具有恶意行为的字符,例如引号、尖括号、&等符号。在编写Web应用程序时,使用HTMLEncode()方法,该方法能够帮助开发人员完成HTML标签的编码转义。将重要的Cookie标记为http only,避免Javascript中的document.cookie语句获取Cookie。
4.2 关于客户端防御措施
通过提升客户端浏览器的安全设置可以有效减少XSS攻击,例如关闭Cookie功能或者设置Cookie为只读,访问非受信网站时进行提示,对于普通用户来说,请使用IE8及以上版本(开启XSS过滤器功能,默认开启),或者使用Chrome浏览器。第5章 总结
Web前端安全主要包括三大类:XSS、CSRF、界面操作劫持。而XSS攻击危害较大,需要引起用户以及Web管理人员的高度重视。本文主要针对 XSS攻击进行简要分析,首先给出了关于跨站脚本攻击的定义,其次从XSS攻击原理进行攻击过程理论解释。XSS攻击类型可分为三类,分别是:反射型 XSS、存储型XSS、DOM型XSS。为了便于了解XSS攻击过程,本文将理论与实践有机结合,进行本地以及远程XSS攻击演示。最后从服务器端以及客 户端两方面给出了关于XSS攻击的有效防范措施。尽管文中从概念、攻击原理、类型、实践以及防范措施对XSS攻击进行阐述,但由于笔者理论水平以及研究时间的限制,文章存在一定的不足和有待完善之 处。从总体上看,在今后关于XSS攻击的研究过程中还须对以下问题进行深入的研究和探讨:对于DOM XSS攻击进行演示;关于CS架构软件的XSS分析(例如:QQ软件);如何有效的进行XSS漏洞挖掘。
参考文献
[1] DOM Based Cross Site Scripting or XSS of the Third Kind. --Amit Klein, July 2005.[2] 诸葛建伟.网络攻防技术与实践[M].电子工业出版社,2011,5:456-467.
[3] 钟晨鸣,徐少培.Web前端黑客技术揭秘[M].电子工业出版社,2013,1:73-81.
[4] XSS获取cookie并利用.http://www.freebuf.com/articles/web/6204.html
没有评论:
发表评论