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. centos7 下安装mysql5.7 数据库并使用nevicat连接数据库

    安装mysql5.7的教程: https://www.cnblogs.com/yybrhr/p/9810375.html 遇到的问题: 无法连接,到阿里云服务器安全组设置3306端口

  2. [CUDA] 00 - GPU Driver Installation & Concurrency Programming

    前言 对,这是一个高大上的技术,终于要做老崔当年做过的事情了,生活很传奇. 一.主流 GPU 编程接口 1. CUDA 是英伟达公司推出的,专门针对 N 卡进行 GPU 编程的接口.文档资料很齐全,几 ...

  3. tomcat 报错出现 jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class

    这是你导入的jar的问题 一般情况下是导入的包tomcat已经存在 也就是说 不需要你再次导入 所以你现在要做的是删除你所导的包 解决方案:删除你的web项目导入的这两个jar文件 jsp-api.j ...

  4. 品Spring:SpringBoot发起bean定义注册的“二次攻坚战”

    上一篇文章整体非常轻松,因为在容器启动前,只注册了一个bean定义,就是SpringBoot的主类. OK,今天接着从容器的启动入手,找出剩余所有的bean定义的注册过程. 具体细节肯定会颇为复杂,同 ...

  5. Python基础(十二)

    今日主要内容 推导式 生成器表达式 lambda匿名函数 内置函数介绍 一.推导式 (一)列表推导式 先来看一段代码 建立一个空列表,向空列表中添加元素 lst = list() for i in r ...

  6. springboot2.0+ 使用拦截器导致静态资源被拦截

    在spring1.0+的版本中,配置拦截器后是不会拦截静态资源的.其配置如下: @Configuration public class WebMvcConfig extends WebMvcConfi ...

  7. 关于.NET HttpClient方式获取微信小程序码(二维码)

    随着微信小程序的火热应用,市面上有关小程序开发的需求也多了起来.近来分析了一项生成有关生成微信小程序码的需求——要求扫码跳转到小程序指定页面(带参数):看了下小程序官方文档文档,结合网上的例子,未看到 ...

  8. Java利用反射排序

    前言 Java为我们提供了几种排序得方法,比如Arrays和Collections类,但是前提是数组或者集合中的元素都必须实现Comparable接口,基本的数据类型都已经实现了Comparable接 ...

  9. 洛谷:P3950 部落冲突

    原题地址:https://www.luogu.org/problemnew/show/P3950 题目简述 给定一棵树,每次给定一个操作,有如下两种: 将某条边染黑 2.询问给定的u,v两点间是否有边 ...

  10. API文档注释 Javadoc

    阅读API文档 JDK包结构 JDK包是由sun开发的一组已经实现的类库,.JDK根据提供的功能不同,将类库划分为若干个包,比如用于操作输入输出的  java.io包,java程序语言设计基础类的   ...