ActionScript

AS是基于ECMAScript的语言,为了交互的需要flash应用引入ActionScript。ActionScript一共有三个版本,其中3.0较之前两个版本变化很大。ActionScript 代码可用来向文档中的媒体元素添加交互式内容。例如,可以添加代码以便用户在单击某按钮时显示一幅新图像,还可以使用 ActionScript 向应用程序添加逻辑。逻辑使应用程序能够根据用户的操作和其它情况采取不同的工作方式。和其他的语言一样,如果没有规范的编码同样会产生安全问题。
a) 未初始化的flash变量
Flash变量是swf开发者用来从web页面接受数据的,一般是通过Object或者Embed标签来进行传递。例如:

<object width="550" height="400" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,124,0">
<param name="movie" value="somefilename.swf">
<param name="FlashVars" value="var1=val1&var2=val2">
<embed src="somefilename.swf" width="550" height="400" FlashVars="var1=val1&var2=val2">
</embed>

</object>同样可以用下面这种方式来传递:http://www.example.org/somefilename.swf?var1=val1&var2=val2在as2.0中,任何没有初始化的全局变量都被认为是flash变量。其中全局变量是那些以_root、_gloabal、_level0为前缀的变量。也就是说:_root.varname 如果其在as代码中没有被初始化,那么就可以同过如下方式来重写:http://victim/file.swf?varname=valueb) 不安全的方法
在调用不安全的方法,而且对传入的参数没有做有效性检查时,就会出现安全问题,不安全方法有:loadVariables()

loadMovie()
getURL()
loadMovie()
loadMovieNum()
FScrollPane.loadScrollContent()
LoadVars.load
LoadVars.send
XML.load ( 'url' )
LoadVars.load ( 'url' )
Sound.loadSound( 'url' , isStreaming );
NetStream.play( 'url' );
flash.external.ExternalInterface.call(_root.callback)

htmlTextFlash安全策略

a) 服务端crossdomain.xml文件:

flash在跨域时唯一的限制策略就是服务端的crossdomain.xml文件,该文件限制了flash是否可以跨域读写数据以及允许从什么地方跨域读写数据。位于www.a.com域中的swf文件要访问[url]www.b.com[/url]的文件时,swf的虚拟环境flash控件首先会检查www.b.com服务器目录下是否有crossdomain.xml文件,如果没有,则访问不成功;若crossdomain.xml文件存在,且里边设置了允许www.a.com域访问,那么通信正常。所以要使Flash可以跨域传输数据,其关键就是crossdomain.xml。关于其详细介绍可以查看这里。一些crossdomain.xml实例可以访问如下连接:
http://www.renren.com/crossdomain.xml
http://www.youku.com/crossdomain.xml<cross-domain-policy>
<allow-access-from domain="*.xiaonei.com"/>
<allow-access-from domain="xiaonei.com"/>
<allow-access-from domain="*.renren.com"/>
<allow-access-from domain="renren.com"/>
<allow-access-from domain="*.kaixin.com"/>
<allow-access-from domain="kaixin.com"/>
<allow-access-from domain="*.xnimg.cn"/>
<allow-access-from domain="xnimg.cn"/>
</cross-domain-policy>这是一个典型的crossdomain.xml文件,最重要的应该数allow-access-from,flash应用通过检查该节点的属性值,确认能够读取本域内容的flash文件来源域。
  * 号,如<allow-access-fromdomain="*" />,表示匹配所有域和可跨域访问本域上的内容。
    后接后缀的星号,表示只匹配那些以指定后缀结尾的域,如*.renren.com,那么a.renren.com,b.renren.com都可以访问该域下的内容。

b) 客户端

在一个页面引入一个flash时,一般的做法是下面这种形式:
------begain-----------<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0"
name="Main" width="1000" height="600" align="middle" id="Main">
<embed flashvars="site=&sitename=" src='Loading.swf?user=453156346&key=df57546b-c68c-4fd7-9f9c-2d105905f132&v=10950&rand=633927610302991250' width="1000" height="600"
align="middle" quality="high" name="Main" allowscriptaccess="sameDomain" type="application/x-shockwave-flash"
pluginspage="http://www.macromedia.com/go/getflashplayer" />
</object>-------end-------
由于flash的强大,并且在页面元素里基本等同于script这种危险的标签,对于这点,flash已经有所考虑,在引入flash的时候flash提供了控制属性,其中与安全最为关键的是AllowScriptAccess属性和allowNetworking属性。其中AllowScriptAccess控制flash与html页面的通讯,可选的值有:

  •         always:对与html的通讯也就是执行javascript不做任何限制
  •         sameDomain:只允许来自于本域的flash与html通讯,这是默认值
  •         never:绝对禁止flash与页面的通讯

默认情况下的选项是sameDomain,这个时候某些场景下看起来也是足够安全了,但是我们还是能看到经常有程序允许将这个选项设置为always,而即使是sameDomain也不是在所有场景下都安全的。

Flash跨站

上面了解了很多flash的安全策略,那么当策略没配好出现安全问题时,我们如何实现flash跨站呢。
场景一:
如果a域下有crossdomain.xml,而且crossdomain.xml的allow-access-fromdomain设置为all,a域可以上传swf文件, html文件的embed标签allowscriptaccess属性为sameDomain或者always,那么我们就可以上传一个包含恶意as脚本的swf文件,从而造成一次flash跨站。下面是一个弹出cookie的swf文件(ie无效)
http:/www.xxx.com/flash_xss/test.swf

场景二:
a域下已经有一个swf文件,html文件的embed标签allowscriptaccess属性为sameDomain或者always,而且这个swf可以接受外界的参数,那么我们就可以通过给swf传递恶意的参数从而形成基于flash的反射型跨站。具体案例:
http://www.xxx.org/search.php?q=flash+xss

常用工具

a) flash 8.0
Flash 8.0包含了许多种功能,如预置的拖放用户界面组件,可以轻松地将 ActionScript 添加到文档的内置行为,以及可以添加到媒体对象的特殊效果。这些功能使 Flash 8.0不仅功能强大,而且易于使用。可以在这里找到关于flash 8.0的使用教程,点击查看。这里是一个可以执行as脚本的swf的例子:

b) SWFScan
可以使用 SWFScan进行反编译,这样就可以源码级别的swf,可以进行白盒分析。

Flash安全总结的更多相关文章

  1. 隐私泄露杀手锏 —— Flash 权限反射

    [简版:http://weibo.com/p/1001603881940380956046] 前言 一直以为该风险早已被重视,但最近无意中发现,仍有不少网站存在该缺陷,其中不乏一些常用的邮箱.社交网站 ...

  2. 百度 flash html5自切换 多文件异步上传控件webuploader基本用法

    双核浏览器下在chrome内核中使用uploadify总有302问题,也不知道如何修复,之所以喜欢360浏览器是因为帮客户控制渲染内核: 若页面需默认用极速核,增加标签:<meta name=& ...

  3. 解决“chrome提示adobe flash player 已经过期”的小问题

    这个小问题也确实困扰我许久,后来看到chrome吧里面有人给出了解决方案: 安装install_flash_player_ppapi, 该软件下载地址:http://labs.adobe.com/do ...

  4. 在 Linux 中使用搜狗拼音输入法以及搞定 Flash 和支付宝

    在 Ubuntu 中安装搜狗输入法 在 Ubuntu Kylin 系统中,默认安装搜狗拼音输入法,但是在原生 Ubuntu 系统中则不是.这可以理解,毕竟搜狗输入法的 Linux 版有 Kylin 团 ...

  5. [异常解决] ubuntukylin16.04 LTS中关于flash安装和使用不了的问题解决

    http://www.linuxdiyf.com/linux/25211.html 归纳解决flash插件大法: 启动器中找到 软件更新,启动,点击 其它软件,把Canonical合作伙伴前方框 选上 ...

  6. 基于Adobe Flash平台的3D页游技术剖析

    写在前面 从黑暗之光,佛本是道,大战神的有插件3D页游.再到如今的魔龙之戒. 足以证明,3D无插件正在引领页游技术的潮流. 目前,要做到3D引擎,有以下几个选择. 说到这里,我们发现.这些都不重要. ...

  7. 强大的flash头像上传插件(支持旋转、拖拽、剪裁、生成缩略图等)

    今天介绍的这款flash上传头像功能非常强大,支持php,asp,jsp,asp.net 调用 头像剪裁,预览组件插件. 本组件需要安装Flash Player后才可使用,请从http://dl.pc ...

  8. MDK st-link下载STM32程序出现Internal command error和Error:Flash download failed. Target DLL

    MDK st-link下载STM32程序出现Internal command error和Error:Flash download failed. Target DLL   是因为目标板的芯片处于休眠 ...

  9. 嵌入式Linux驱动学习之路(二十四)Nor Flash驱动程序

    Nor Flash和Nand Flash的不同: 类型 NOR Flash  Nand Flash  接口 RAM-like,引脚多 引脚少 容量 小(1M.2M...) 大(512M.1G) 读 简 ...

  10. mtk flash tool,Win7 On VirtualBox

    SP_Flash_Tool_exe_Windows_v5.1624.00.000 Win7 在 VirtualBox, 安裝 mtk flash tool, v5.1628 在燒錄時會 fail. v ...

随机推荐

  1. elk安装和使用

    elk安装和使用 使用的版本都是5.2.0 elasticsearch-5.2.0安装 在官网 下载 elasticsearch tar包 解压安装 tar zxf elasticsearch-5.2 ...

  2. linux ssh连接自动断开问题

    场景描述:云上的虚拟机使用public ip连接ssh时,一直提示已经连接,但是就会自动关闭 1. 通过正常虚拟机作为跳板,能够连接到目标机子上,检查发现进程正常,但是就一直连接不上 [root@te ...

  3. 排序入门练习题3 谁考了第k名 题解

    题目出处:<信息学奥赛一本通>第二章 上机练习1 题目描述 在一次考试中,每个学生的成绩都不相同,现知道了每个学生的学号和成绩,求考第k名的学生的学号和成绩. 输入格式 输入的第一行包含两 ...

  4. Android系统修改之Email自动回复功能分析

    1. Email添加自动回复功能需要注意事项 Email可能存在多个账户, 因此自动回复功能应该添加在账户设置里面, 自动回复针对一个账户单独处理 在Email账户设置里面, 开启自动回复功能的时, ...

  5. OPC—— KepServer.ServerState返回值为3和OPCConfig.exe配置文件的根目录

    做开发没有对电脑的绝对管理员权限的问题,会出现很多意外,调试OPC是总是连接状态有时莫明返回3,提示 not configuration,问题在于: 没有以管理员权限运行OPCConfig.exe,导 ...

  6. SpringBoot——Web开发(静态资源映射)

    静态资源映射 SpringBoot对于SpringMVC的自动化配置都在WebMVCAutoConfiguration类中. 其中一个静态内部类WebMvcAutoConfigurationAdapt ...

  7. [Advanced Python] 10 - Transfer parameters

    动态库调用 一.Python调用 .so From: Python调用Linux下的动态库(.so) (1) 生成.so:.c to .so lolo@-id:workme$ gcc -Wall -g ...

  8. [Scikit-learn] 4.3 Preprocessing data

    数据分析的重难点,就这么来了,欢迎欢迎,热烈欢迎. 4. Dataset transformations 4.3. Preprocessing data 4.3.1. Standardization, ...

  9. Linux 笔记:核心思想、常用命令以及脚本语法

    总结于 <鸟哥的 Linux 私房菜 - 基础学习篇> ,图片也来自于此. 核心思想 目录树结构(directory tree) Linux 系统是基于目录树结构的,这是它的核心思想.目录 ...

  10. 前端基础-BOM和DOM学习

    JavaScript分为 ECMAScript,BOM,DOM. BOM:是指浏览器对象模型,使JavaScript有能力与浏览器进行对象. DOM:是指文档对象模型,通过它,可以访问HTML文档的所 ...