跨站点脚本攻击

闲话“跨站点脚本攻击”

from:http://out.bitunion.org/viewthread.php?tid=33469&sid=9B94lwd8
刚写到一半计算机不知道为什么跳电了……这个星期第二次了,不知道哪儿硬件出的IRQ冲突。苦!
再写一遍,好容易来了点激情。

跨站点脚本攻击,我们分析名字先。攻击是通过网络的,如果不是呢?我们可以称呼为破坏,可以称呼为病毒,但绝对不是攻击了。方式很多,这种攻击靠的就是多个站点组合而成的脚本进行攻击的。

先说点别的吧。两个技术的起源和发展,都是和这种攻击息息相关的。一个是 Script,另一个是 cookie。

在 HTML 3.0 以后,随着用户对网络访问要求的提高,原本的静态页面再也无法满足用户的需求,就有了 HTML 3.02 和进而 HTML 4.0 的长足发展。这是旁话。同时发展的还有非常著名的 ECMAScript,欧洲什么什么的标准脚本。Netscape 率先扩展了它,拥有了属于自己的 LiveScript,后更名为 Javascript,并一直发展到 1.5 版本。在 Javascript 1.2 的时候,Microsoft 不甘落寞了,非常顺手的把 Javascript 带了过来,然后更名为自己的 JScript,并一直发展到现在的 5.6 版本。但实质上,Javascript 和 JScript 基本上都是一致的,除了专用于自己浏览器的那么一小点点东西,它们的文件后缀名都是 js。配合 XML 中的 DOM 1.0 技术,你可以利用 Script 完全控制一份 HTML 中的每一个元素每一个属性每一个字符的变化。

后来 Microsoft 也发现了 Script 的上手性和简约性,开发了 Windows Script,利用 CScript.exe 和 WScript.exe 运行系统脚本。这两个文件,便是大名鼎鼎的系统脚本宿主了。对网络安全有常识的人都知道,刚出的时候,曾出现过大批量这样的病毒……CScript 负责在控制台(即命令行模式)运行,WScript 则负责在窗口模式运行,后者因要建造窗口,所以扩展更强。不过大家别担心,如果你装了 FP DW 之类的工具,js 文件的默认打开会被这些软件抢去。

再说说 cookie 吧。用户的访问除了要求高度的视觉享受,更需要个性化的服务,所以才有了 cookie 这个东东的诞生。就拿我们的联盟站点为例,它又是如何做到记住每个用户的偏好的呢?比如每个人用的并不是同一个主题啊。或许有人会说用数据库啊,但对于这 样的大型论坛,每一次数据库的读取都是要消耗时间和服务器资源的。每秒 10 个人刷新一次页面,那服务器不当才怪呢。

所以浏览器开始支持 cookie 了。对于每一个站点,IE 支持 255 个,每个 cookie 限记录 1024 字节内容。NN Opera 之类的偶不太清楚的说……这样可以大量减轻服务器的资源消耗,又可以保证安全性——一个站点是不允许访问另一个站点的 cookie 数据的。但当这个秘密为人所知之后,安全性就不复存在了,因为 cookie 是使用 ascii 编码的 txt 文件。也就是说,你可以随便打开任意一个 cookie,然后获取别人的秘密。装过 windows 系统的人都知道吧,第一次使用 ie 的时候会弹出 cookie 安全设置框的。

话题转回来,这些和跨站点脚本攻击有什么关系呢?先别着急,且听我一一道来。

在 IE6 SP1 之前,IE 是存在一个漏洞的。比如你在本地创建一份 HTML,然后在该 HTML 中,使用 <frame /> 或者 <iframe /> 标签,可以将联盟的站点也显示出来。而且还获得对联盟站点页面的绝对控制权,这说明了什么?如果机缘合适,它可以窃取如用户名、密码的个人重要信息。

比如 www.bitunion.org 这个域名,如果你能劫持这个域名,你可以转向自己的服务器,然后建立虚假登陆页面获得用户帐号密码,也可以 frame 真正的页面,然后在存储的 cookie 中找到你想要的东西。当然,这个方式是域名劫持,而非跨站点脚本。

那么跨站点脚本究竟是怎么样的?举个很简单的例子,就如我所使用的动态头像一样,在后台设置一个参数入口,用来接收可以扩展的数据,而这些数据就是攻击代 码。比如 http://10.1.206.86/ 存在一个 attack.asp,当然攻击者不会起一个这么暴露的名字,然后设置参数入口 sid ,看起来是不是很像什么帖子?后面加入参数 location.replace("123") ,就可以做到真实的效果,因为参数被执行,页面发生跳转而且无法返回。如果是在 frame 里面,是不是天衣无缝呢?

但如果后面的参数改成 for(var i=0;i>0;i++)alert(); 会是什么效果?初始化 i 为 0,当 i 大于 0 的时候弹出信息提示框。这是一个死循环!很善良吧,关掉进程就可以了……我再把 alert() 改成 open('') 呢?一秒钟之内就弹出无数个窗口,整个系统资源耗尽,连让你关闭进程的时间都没有。老老实实安安心心按复位键重起吧……不过 IE6 开始,浏览器发现这样的错误代码就会提示是否执行,你取消就可以躲过一劫了。所以也不用怎么担心的说……

好像说完了,上面只是一个模型,核心就是将原始的攻击通过多个站点间资源的联合分解成不被发现的部分,需要攻击时才组合起来进行。也正因为这个原理,攻击者会利用大量的 fake 和精密的构造让你一步一步走入圈套。防范还需要自己注意的说。

而且 IE6 SP1 开始,非本站点前后台一律不准读取相应 cookie,一律不准控制本站点页面,所以跨站点脚本攻击的魅力渐渐黯淡下来,就让我们拭目以待。等待解毒完新反汇编代码的高手带给跨站点脚本攻击新的活力吧。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值