盒子
盒子
文章目录
  1. 页面嵌入Flash
  2. Flash跨域请求
  3. 可能存在漏洞的函数

FlashXSS学习

入门Flash XSS。。。

Flash 反编译软件:Action Script Viewer

页面嵌入Flash

在HTML中嵌入FLASH的时候在IE和非IE浏览器下嵌入的方式有所不同,可以使用embed标签和object标签,使用如下的代码进行嵌入:
IE下嵌入

1
2
3
4
5
<object codeBase="http://fpdownload.macromedia.com/get/Flashplayer/current/swFlash.cab#version=8,0,0,0" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000">
<param name="movie" value = "http://xxxx.sinaapp.com/trace.swf" />
<param name="allowScriptAccess" value="always" />
<param name="allowNetworking" value="all" />
</object>

非IE下嵌入

1
2
3
4
5
<object type="application/x-shockwave-Flash" data="./trace.swf">
<param name="movie" value = "./trace.swf" />
<param name="allowScriptAccess" value="always" />
<param name="allowNetworking" value="all" />
</object>

在插入Flash的过程中有两个重要的参数,allowScriptAccess和allowNetworking两个参数:
allowScriptAccess:控制html页面与Flash页面的通讯。
always:html和Flash页面的通讯不做任何的限制;
samedomain:html和Flash同域的时候可以做通讯【这个值是默认值】;
never:html和Flash禁止通讯。

allowNetworking:控制Flash与外部的网络通讯。
all:Flash所有的网络API通讯接口都可用;
internal:navigateToURL,fscommand,ExternalInterface.call不可用;
none:所有的网络API不可用。

Flash跨域请求

Flash跨域访问的时候主要受到crossdomain.xml文件的影响。crossdomain.xml文件主要包含如下几个节点:
site-control,allow-access-from,allow-access-from-identity,allow-http-request-headers-from
常用的节点为allow-access-from,用来指明允许本域资源允许被哪些域名的Flash跨域请求。
示例crossdomain.xml文件:

1
2
3
4
5
<cross-domain-policy>
<allow-access-from domain="*.youku.com"/> //允许youku.com域名的Flash访问
<allow-access-from domain="*.ykimg.com"/>
<allow-access-from domain="*.tudou.com"/>
</cross-domain-policy>

可能存在漏洞的函数

  1. navigateToURL/getURL
    点击跳转的效果
    as3.0版本 navigateToURL(newURLRequest(link),"_self");
    as2.0版本 getURL(link,"_self");

  2. ExternalInterface.call
    Flash与宿主页面javascript通信接口,一般两个参数,第一个参数是所调用的js函数名,后续参数为其参数

    示例代码代码:ExternalInterface.call(“alert”,”1”) =>> try{flashtoXML(函数名(“参数1”));}catch(e){““;}

    • 当函数名可控,可写成:(function(){alert(1)})
    • 参数可控,可构造参数闭合函数,或者闭合前面利用catch触发JS。
  3. htmlText
    Flash支持在Flash里内嵌html,支持的标签img标签,a标签等。 img标签可以通过src参数引入一个Flash文件,类似与XSF一样。
    示例:

    1
    2
    3
    4
    5
    6
    7
    import fl.controls.TextArea;
    var a:String = root.loaderInfo.parameters.url
    var t:TextArea = new TextArea()
    t.width = 500
    t.height = 300
    t.htmlText += a
    addChild(t)

利用:http://127.0.0.1/htmltext.swf?url=<img src='./trace.swf'>