本节书摘来自异步社区《xss跨站脚本攻击剖析与防御》一书中的第6章6.4节利用flash进行xss攻击剖析,作者邱永华,更多章节内容可以访问云栖社区“异步社区”公众号查看。
6.4 利用flash进行xss攻击剖析
xss跨站脚本攻击剖析与防御
利用嵌入web页面中的flash进行xss有一个决定因素:allowscriptaccess属性。allowscriptaccess是使用或
下面是一个简单的示例:
http://www.test.com/flashxss.swf allowscriptaccess=always>
allowscriptaccess属性控制着flash与html页面的通信,可选的值有3个:
always:允许随时执行脚本操作
never:禁止所有脚本执行操作
samedomain:只有在flash 应用程序来自与html页相同的域时才允许执行脚本操作
其属性值在flash player 7及之前版本中预设是always,代表flash可以调用相同或不同domain的javascript函数。flash player 8或之后预设是samedomain,也是现在多数flash应用的默认状态,但是经常能看到有些程序允许将该选项设置为always。
allowscriptaccess实际上是flash权限机制的api,前面提过的security.allowdomain()也是其中一个。这些机制可以用于更改、调用应用程序的安全性环境。
权限机制api如图6-20所示。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnL1czYwkTMiZWN2cTNlBTYjNmYxEGO3MTZhVGZ0YTMhRjN1UjZhhTOj9CXt92Yu4GZjlGbh5SZslmZxl3Lc9CX6MHc0RHaiojIsJye.png)
主机应用程序的本机方法权限机制api如图6-21所示。
而allowscriptaccess和allownetworking都属于html参数权限机制api如图6-22所示。
allownetworking属性控制swf 文件对网络功能的访问,因此对csrf攻击有着至关重要的影响,稍后的内容会有讲解。
更多关于flash权限机制api及其安全性的内容,可参看adobe的官方白皮书adobe flash player x security。
假设在引入flash文件时,html页面的或
在actionscript中可以使用geturl()函数执行脚本代码。
actionscript代码如下:
geturl('javascript: alert(123);');
把编译完成的swf文件嵌入html文件中,代码如下:
这时,直接浏览上述页面就会弹出一个对话框。
除了使用geturl()方法外,还可以使用actionscript 3.0中的externalinterface类来执行javascript脚本。
externalinterface类是flash与javascript 交互的枢纽,可以实现javascript与 actionscript之间的所有通信。通过externalinterface类的call()方法可以直接调用外部的javascript。
externalinterface.call()的语法如下:
externalinterface.call(functionname:string,...arguments):*
参数说明:
functionname:要调用的javascript函数名
arguments:参数,可选
externalinterface.call()允许在actionscript中调用javascript,有以下几种方式。
(1)传统用法。
第1个参数是javascript中的函数名,其他是要传递的参数。
externalinterface.call("alert", "你好!");
结果如图6-23和图6-24所示。
(2)直接执行javascript语句。
直接把javascript语句写入参数内:
或采用如下形式:
(3)使用xml格式。
用xml在actionscript 3.0中嵌入javascript,更方便编写xss代码,方法如下:
图6-25所示为执行效果。
(4)调用外部javascript。
以上方式都是通过调用容器中定义的javascript代码来完成,这样在进行xss时会带来一定的不便。这时可以尝试动态加载外部的javascript脚本:
以上种种都是利用flash执行xss的方法。
本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。