1. 了解XSS漏洞
2. 掌握盗取Cookie的方法
1.什么是XSS
XSS又叫CSS (Cross Site Script) 也称为跨站,它是指攻击者利用网站程序对用户输入过滤不足,输入可以显示在页面上对其他用户造成影响的HTML代码,从而盗取用户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。
2.什么是XSS攻击
XSS攻击是指入侵者在远程WEB页面的HTML代码中插入具有恶意目的的数据,用户认为该页面是可信赖的,但是当浏览器下载该页面,嵌入其中的脚本将被解释执行,由于HTML语言允许使用脚本进行简单交互,入侵者便通过技术手段在某个页面里插入一个恶意HTML代码,例如记录论坛保存的用户信息(Cookie),由于Cookie保存了完整的用户名和密码资料,用户就会遭受安全损失。如这句简单的Java脚本就能轻易获取用户信息:alert(document.cookie),它会弹出一个包含用户信息的消息框。入侵者运用脚本就能把用户信息发送到他们自己的记录页面中,稍做分析便获取了用户的敏感信息。
3.什么是Cookie
Cookie,有时也用其复数形式Cookies,指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。定义于RFC2109(已废弃),最新取代的规范是RFC2965。Cookie最早是网景公司的前雇员Lou Montulli在1993年3月的发明。
Cookie是由服务器端生成,发送给User-Agent(一般是浏览器),浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站时就发送该Cookie给服务器(前提是浏览器设置为启用cookie)。Cookie名称和值可以由服务器端开发自己定义,对于JSP而言也可以直接写入jsessionid,这样服务器可以知道该用户是否为合法用户以及是否需要重新登录等。
4.XSS漏洞的分类
Stored XSS漏洞:交互形Web应用程序出现后,用户就可以将一些数据信息存储到Web服务器上,例如像网络硬盘系统就允许用户将自己计算机上的文件存储到网络服务器上,然后与网络上的其他用户一起分享自己的文件信息。这种接收用户信息的Web应用程序由于在使用上更加贴近用户需求,使用灵活,使得其成为现代化Web领域的主导。在这些方便人性化的背后也带来了难以避免的安全隐患。
DOM-Based XSS漏洞:DOM是Document Object Model(文档对象模型)的缩写。根据W3C DOM规范(http://www.w.org.DOM/),DOM是一种与浏览器、平台、语言无关的接口,使得网页开发者可以利用它来访问页面其他的标准组件。简单解释,DOM解决了Netscape的JavaScript和Microsoft的JScrtipt之间的冲突,给予Web设计师和开发者一个标准的方法,让他们来访问他们站点中的数据、脚本和表现层对象。
1. 地址栏中执行脚本
主机A在浏览器地址栏中输入“javascript:alert('xss')”确定后可以看到浏览器弹出了一个内容为xss的对话框,如图所示。
这说明在浏览器地址栏中输入可执行脚本效果与把该脚本插入网页中去执行是一样的,这就为XSS提供了基础。
2. 对DOM技术的利用
(1)主机A右键“我的电脑”->“管理”->“服务和应用程序”->“服务”,检查Kingsoft Uplive Service服务是否为停止状态,如服务已经启动,将其停止。
(2)主机A启动“木马网站2”:
将下面的代码保存为xsscks.asp放入“木马网站2”的虚拟目录下(D:\ExpNIC\Common\Web\木马网站)。
查看IP地址:
主机A在浏览器地址栏中输入http://169.254.120.119:9090/xsscks.asp?name=username访问xsscks.asp,结果该页面利用DOM技术中的document.URL对象取出name参数后面的字符串 username ,然后用document.write函数将其显示到网页中。
(3)主机A在浏览器中输入“http:// 169.254.120.119:9090/xsscks.asp?name=”,这样,代码 将被插入到当前的网页中,浏览器直接执行了这段代码后,就会将用户的cookie信息直接显示出来,XSS攻击发生了。如图所示:
(1)如果我们把一个IE窗口称作“父页”,那么从该窗口中弹出的页面就应该称作为“子页”,如果父页能在某些条件下控制子页,这就可以让我们精心构造的页面实现XSS。主机A将如下代码保存为jump1.asp,将jump1.asp放入“木马网站2”中。
访问jump1.asp:
可以看到父页(jump1.asp)弹出了子页,子页打开的是网页A,但3秒之后就转为了网页B,这说明 父页在一定条件下能够控制子页的一些行为 。
(2)父页控制子页的达成条件的关键,一是windows.frames[0]方法没有受到域的限制,二是location指定的地址看起来像个对象而不是参数,根据这两个关键条件,主机A来构造jump2.asp,代码如下:
分析代码,window的对象x所使用的location方法打开的网页与开始弹出的空白页在同一域内,并没有受到域的限制,根据IE6的安全特性,如果window对象打开的窗口是同一个域,那么就可以向打开的这个窗口再注入脚本运行,我们来构造脚本“javascript:alert(document.cookie)”,并让location指定的地址为String对象,代码中的“3000”就是3000毫秒,用来控制在多长时间后执行JavaScript
主机A访问jump2.asp,结果子页弹出了xsstest1.html的cookie,这样,xsstest1.html就因为IE6安全特性的问题而被跨站了。
(3)根据以上步骤的原理,主机A来盗取主机B中“默认网站”下的bbs网站中的cookie,主机A把下面的代码保存为get.asp上传至本地“木马网站2”中,这段代码主要是将盗取的cookie保存至主机A服务器的 cookie.txt 文件中。
(4)主机A把下面的代码保存为xss.html上传至“木马网站2”中,代码中的“http://169.254.198.8/bbs/index.asp”为主机A要获取cookie的主机B中的论坛主页地址;http:// 169.254.120.119:9090/get.asp地址为主机A访问get.asp的地址。
(5)主机B访问本机“默认站点”中的bbs网站,访问地址为http:// 169.254.198.8/bbs/index.asp,注册用户LiXiaojun后,退出并重新使用LiXiaojun账户登录论坛,此时设置cookie为保存一天以上。
(6)主机B在浏览器中访问主机A中的xss.html页面,访问地址为 http://主机A的IP:9090/xss.html ,点击网页中的上面的“主机B点击这里”链接(在实际盗取过程中,主机A需要诱骗主机B去点击链接)
网站跳转至要获得cookie的目标网站
5秒后网页跳转为空页面
可以看到,这里其实执行了攻击主机的恶意程序get.asp
主机A查看“木马网站2”下的cookie.txt文件,对主机B的cookie获取成功,获取到的cookie信息如图3-1-3所示:
(7)分析cookie信息,可以发现用户名和被加密的密码,利用此cookie信息,黑客可以冒充主机B的身份获得网站或论坛的对应权限,本实验不做具体讨论,有兴趣的同学可以查阅相关资料,进行深入研究。
XSS攻击其实在之前的漏洞挖掘课程中就有学习过,所以这次试验总体来说还是较为顺利的。XSS攻击其实是一种网站应用程序的安全漏洞攻击,是代码注入的一种。它允许恶意用户将代码注入到网页上,其他用户在观看网页时就会受到影响。这类攻击通常包含了HTML以及用户端脚本语言。
本次实验让我们从基础开始了解XSS攻击的基本原理和方法,并且利用一个实例演练展示了通过跨站脚本盗取用户cookie的全过程,证明了XSS攻击的巧妙和实用性。实验根据IE6的安全特性:如果window对象打开的窗口是同一个域,那么就可以向打开的这个窗口再注入脚本运行。因此javascript代码会找到(alert(…))并且在同一个域内执行它,这就产生了xss的条件。
其实XSS的触发条件有很多除了插入javascript和vbscript正常字符,还有转换字符类型、插入混淆字符、利用CSS代码@import、expression触发XSS漏洞等等。而XSS防御的总体思路是1、编码,就是转义用户的输入,把用户的输入解读为数据而不是代码;2、校验,对用户的输入及请求都进行过滤检查,如对特殊字符进行过滤,设置输入域的匹配规则等。