Flash安全总结
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安全总结的更多相关文章
- 隐私泄露杀手锏 —— Flash 权限反射
[简版:http://weibo.com/p/1001603881940380956046] 前言 一直以为该风险早已被重视,但最近无意中发现,仍有不少网站存在该缺陷,其中不乏一些常用的邮箱.社交网站 ...
- 百度 flash html5自切换 多文件异步上传控件webuploader基本用法
双核浏览器下在chrome内核中使用uploadify总有302问题,也不知道如何修复,之所以喜欢360浏览器是因为帮客户控制渲染内核: 若页面需默认用极速核,增加标签:<meta name=& ...
- 解决“chrome提示adobe flash player 已经过期”的小问题
这个小问题也确实困扰我许久,后来看到chrome吧里面有人给出了解决方案: 安装install_flash_player_ppapi, 该软件下载地址:http://labs.adobe.com/do ...
- 在 Linux 中使用搜狗拼音输入法以及搞定 Flash 和支付宝
在 Ubuntu 中安装搜狗输入法 在 Ubuntu Kylin 系统中,默认安装搜狗拼音输入法,但是在原生 Ubuntu 系统中则不是.这可以理解,毕竟搜狗输入法的 Linux 版有 Kylin 团 ...
- [异常解决] ubuntukylin16.04 LTS中关于flash安装和使用不了的问题解决
http://www.linuxdiyf.com/linux/25211.html 归纳解决flash插件大法: 启动器中找到 软件更新,启动,点击 其它软件,把Canonical合作伙伴前方框 选上 ...
- 基于Adobe Flash平台的3D页游技术剖析
写在前面 从黑暗之光,佛本是道,大战神的有插件3D页游.再到如今的魔龙之戒. 足以证明,3D无插件正在引领页游技术的潮流. 目前,要做到3D引擎,有以下几个选择. 说到这里,我们发现.这些都不重要. ...
- 强大的flash头像上传插件(支持旋转、拖拽、剪裁、生成缩略图等)
今天介绍的这款flash上传头像功能非常强大,支持php,asp,jsp,asp.net 调用 头像剪裁,预览组件插件. 本组件需要安装Flash Player后才可使用,请从http://dl.pc ...
- 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 是因为目标板的芯片处于休眠 ...
- 嵌入式Linux驱动学习之路(二十四)Nor Flash驱动程序
Nor Flash和Nand Flash的不同: 类型 NOR Flash Nand Flash 接口 RAM-like,引脚多 引脚少 容量 小(1M.2M...) 大(512M.1G) 读 简 ...
- mtk flash tool,Win7 On VirtualBox
SP_Flash_Tool_exe_Windows_v5.1624.00.000 Win7 在 VirtualBox, 安裝 mtk flash tool, v5.1628 在燒錄時會 fail. v ...
随机推荐
- Winform中使用zxing和Graphics实现自定义绘制二维码布局
场景 zxing.dll下载 https://download.csdn.net/download/badao_liumang_qizhi/11623214 效果 实现 根据上面文章中将简单的二维码生 ...
- sudo apt-get install 、 pip install和conda install的对比
sudo apt-get install: apt-get可以用来安装软件.更新源,也可以用来更新自Ubuntu的典型依赖包. (sudo apt-get remove --purge 软件名称 su ...
- 理解 Spring 注解编程模型
理解 Spring 注解编程模型 Spring 中有一个概念叫「元注解」(Meta-Annotation),通过元注解,实现注解的「派生性」,官方的说法是「Annotation Hierarchy」. ...
- [Leetcode] 第313题 超级丑数
一.题目描述 编写一段程序来查找第 n 个超级丑数. 超级丑数是指其所有质因数都是长度为 k 的质数列表 primes 中的正整数. 示例: 输入: n = 12, primes = [2,7,13, ...
- jqGrid 日期格式化,只显示日期,去掉小时分
{name:'operateTime',index:'operateTime', formatter:"date", formatoptions: {newformat:'Y-m- ...
- java数据结构——红黑树(R-B Tree)
红黑树相比平衡二叉树(AVL)是一种弱平衡树,且具有以下特性: 1.每个节点非红即黑; 2.根节点是黑的; 3.每个叶节点(叶节点即树尾端NULL指针或NULL节点)都是黑的; 4.如图所示,如果一个 ...
- Django模板语言, 过滤器整理
Django模板语言,过滤器整理 1. add {{ value|add:"2" }} 把add后的参数加给value: 处理时,过滤器首先会强制把两个值转换成Int类型. 如果强 ...
- springboot之全局处理统一返回
springboot之全局处理统一返回 简介 在REST风格的开发中,避免通常会告知前台返回是否成功以及状态码等信息.这里我们通常返回的时候做一次util的包装处理工作,如:Result类似的类,里面 ...
- 环境搭建-ELK单节点环境搭建(02)
写在前面 常说:"工欲善其事必先利其器",这话想想也是一点毛病也没有,在开始学习任何技术之前,我们总得有一个实际可供操作的实验环境.有人说,"看十遍不如用一遍" ...
- CDH高可用hadoop集群性能配置
1.HDFS的高可用配置 dfs.namenode.edits.dir (NameNode 编辑目录) : 写入 NameNode 编辑的本地文件系统上的目录.未指定将存放在namenode数据目录中 ...