百度空间 | 百度首页 
 
查看文章
 
ActionScript的XSS黑客文化
2008-02-05 07:12

XSS即Cross-Site Scripting跨站脚本,提到XSS,我们首先会想到作为web客户端逻辑控制的脚本语言JavaScript,不过我认为XSS不应该就是JavaScript的专利。随着Flash与Flex的壮大,随着RIA应用的普及,ActionScript脚本语言带来了全新的XSS威胁!这样的威胁可以分为两类:

1)、AS的inline-XSS即内嵌跨站脚本,这类跨站发生在flash运行环境内。

2)、ASJS通信盒子,这最终还是要借助JavaScript。AS3对安全性能要求苛刻,相比JavaScript,AS是神秘的、新鲜的。

其实ActionScript与VBScript、服务端编程一样都可以作为跨站攻击的一种辅助手段。不过随着Flex在RIA应用中的猛烈发展,ActionScript将不仅仅作为JavaScript跨站攻击的辅助。ActionScript会形成自己的XSS黑客文化。

-----------------------------------------------------------------------------------------------------------------------------

以上文字摘自Cos Thought(就是我自己的思维片段了,值得商榷)2008.02.05凌晨

学习AS3真不容易,处处碰壁!AS2到AS3的变化幅度太大,不过我已经彻底适应过来了。这次再来说说ASJS通信盒子,上次的ASJS通信盒子之百度空间相册就当作是AS2与JS通信的一次探索性试验吧。AS3的安全性能提高了很多,通过这几天的研究,我还未发现可以XSS的思路,不过总感觉会有的。

一、getURL()与navigateToURL()

先说说这两个函数,getURL()在AS3中已经不被支持,在AS2中支持,并且getURL()与flash player的版本无关,都是兼容的,所以只要我们使用AS2来写getURL(),那么还是可以XSS的,我们可以这样XSS:

getURL("http://hi.baidu.com/ycosxhack", "_blank"); //弹出目标网页,还可以如下这样

getURL("javascript:var xss='hello cos';alert(xss)"); //直接在AS2中执行js代码,很好

在AS3中,我们可以使用navigateToURL()来代替getURL(),如下代码:

var url:String = "http://hi.baidu.com/ycosxhack";
var request:URLRequest = new URLRequest(url);
//这居然就要使用URLRequest类,注意了:URLRequest 实例包含单个HTTP请求的所有信息,在AS通信中扮演着重要的角色
try {
navigateToURL(request); //不过遗憾的是,我们不能在其中像getURL那样直接执行js代码
}
catch (e:Error) {
// handle error here
}

举例这两个函数,我是要说明,getURL的XSS思路是100%行得通的,只是它不在AS3中使用而已,与flash player版本无关,并且AS3中的navigateToURL至少也可以弹出新窗口吧?虽然这样窗口会被浏览器的某些拦截工具条拦截。不过使用这样的XSS手段是下下策,就像那些挂马的人使用<iframe>内嵌框架一样。

二、Flash cookie

是不是第一次听说?cookie大家都不陌生,是一个存储在浏览器目录的文本文件,最大信息量为4K。Flash cookie类似于浏览器cookie的功能,也是存储在客户端的文件,其信息量能有多大呢?我曾经在饭否上记录了这段文字:“Flash使得AJAX RIA能在客户端存储10MB的数据,Cookies只能存储4KB。”这段文字也许能说明些什么。下面代码的核心是共享对象SharedObject的使用,Flash cookie正是基于此对象:

var so:SharedObject = SharedObject.getLocal("cos");
if (so.size == 0)
{
    // 共享对象不存在时。
    trace("created...");
    so.data.now = new Date().time;
//向Flash cookie中写数值……
so.data.words = "hello cos";
//向Flash cookie中写数值……
}
var ageMS:Number = new Date().time - so.data.now;
trace("SharedObject was created " + Number(ageMS / 1000 / 60).toPrecision(2) + " minutes ago");
trace("SharedObject is speaking:" + so.data.words);
trace("SharedObject is " + so.size + " bytes");
//以上四行代码读取FLash cookie的值
so.flush();

上面这段代码第一次运行结果如下:

created...
SharedObject was created 0.00 minutes ago
SharedObject is speaking:hello cos
SharedObject is 57 bytes

第二次运行结果如下:

SharedObject was created 0.70 minutes ago
SharedObject is speaking:hello cos
SharedObject is 57 bytes

这个Flash cookie于ASJS通信盒子有什么关系?其实是有间接关系的,此文开头我就说了:“ActionScript会形成自己的XSS黑客文化。”从Flash cookie的这个例子中就可以感受得到,是不是总感觉处处有JavaScript的影子?Flash cookie必然会丰富我们的XSS!

三、AS的网络与通信

上面介绍的都属于AS的网络与通信范畴。这块内容非常的丰富、有趣。可以包括:从外部文件或服务器脚本中加载数据、将数据发送到服务器脚本、与其它本地SWF文件通信、处理二进制套接字连接、与XML套接字通信、存储永久本地数据、将文件上载到服务器、将文件从服务器下载到用户计算机(来自AS3的帮助文档)。

我肯定不会每个都去介绍(有的我还不熟),下面分别简单介绍AS3与服务端的通信、SWF文件之间的通信:

1)、AS3与服务端的通信

主要使用的类为URLLoader与URLVariables,AS2中风光无限的LoadVars类在AS3已经被抛弃了,而上面提到的URLRequest则作为重要的辅助通信类。要具体了解,可以查看我转载来的这篇文章as3与后台通讯。在这我就不罗列对本文无意义的通信代码了。其实我想说AS3与服务端的通信过程可以无声无息,就像AJAX,在后台默默执行。又有JavaScript的影子,完毕。

2)、SWF文件之间的通信

通过LocalConnection类,SWF文件之间可以直接通信(不用经过JavaScript这一层)。在AS各版本中都得到支持。可以使用LocalConnection类中的allowDomain()或allowInsecureDomain()方法进行跨域通信(这点非常重要)。还没遇到什么网站采用了这样的通信模式。不过其支持跨域通信,这点就足够吸引人了!

四、Flash的安全因素

以上讨论的仅是Flash安全因素的冰山一角而已。还有所谓的权限控制、安全沙箱、Flash外部API、全屏模式安全性、跨脚本访问等等都没在本文的讨论范围内或仅仅是一笔带过。研究的越深刻,认识的就越深刻,ActionScript的XSS黑客文化就会越来越有趣。

Flash外部API实际上是Flash与其容器应用程序(比如:Web浏览器和包含Flash Player内容的HTML页)通信的一个接口,比如AS与JS的直接通信(这个有趣吧?)会使用AS的ExternalInterface类。等我将这个API研究透了,估计会有新的XSS思路!我现在好困……

最后补充一下:AS代码一般都被藏匿在flash的标准输出文件(以.swf为后缀的文件)中,大多数情况下反编译出源码是一件很容易的事,使用硕思闪客精灵即可。现在AS3可以将AS代码作为一个外部包文件(.as后缀)导入使用,这个包文件是可以直接下载下来的(如果你发现的话)。恩,这又有JavaScript的影子了。百度空间的flash文件应该都使用AS2编码。


类别:As Hack | 添加到搜藏 | 浏览() | 评论 (5)
最近读者:
 
网友评论:
1
2008-02-05 10:44 | 回复
呵呵 AS的安全方面没有研究 我都喜欢研究一些有趣的代码和产生的一些效果 余弦在学AS3。0?
 
2
2008-02-05 12:09 | 回复
是啊,AS通信,我准备着手写些网络工具了。AS的实力强悍。
 
3
2008-02-05 20:41 | 回复
看着你们这些东西我都是晕的不知所措呀 有 点 快疯了
 
4
2008-02-05 20:44 | 回复
高手啊~~~~~~~~~~~~
 
5
2008-02-14 08:23 | 回复
情人节快乐!
 
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码: 请点击后输入四位验证码,字母不区分大小写
      

     
 
精彩相册
   
     

©2009 Baidu