从白帽子角度谈Flash安全

从白帽子角度谈Flash安全

作者:阻圣

预估稿费:200RMB(不服你也来投稿啊!)

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿

前言

Flash攻击技术一直以它的不为人知性而深受黑客追捧,本文从白帽子角度介绍Flash安全,从Flash漏洞产生的原因到漏洞的挖掘之路,希望能帮助到大家,水平有限,如有不足还请指出。

配置不当出CSRF

Flash跨域唯一的限制就在crossdomain.xml这个文件,它限制了flash是否可以跨域读写数据以及允许从什么地方跨域读取数据,如果配置不当就会产生CSRF漏洞。

下图展示了网易博客的crossdomain.xml

从白帽子角度谈Flash安全

挖掘Flash CSRF思路

既然形成Flash CSRF的原因在于crossdomain.xml,我们首先就来打开crossdomain.xml,查看是否允许跨域,允许了哪些站点跨域。

allow-access-from选项就是用来限制哪些域可以进行跨域请求数据。

经典的漏洞配置:

1

<allow-access-from domain="*"/>

允许所有域进行跨域请求数据。

Flash CSRF漏洞利用

发现漏洞后,可以要测试一些是否有危害了,要是影响不大肯定又要忽略了。所以我们肯定先要证明一下漏洞确实存在并且有危害的。

首先找到一个存在csrf的页面:

从白帽子角度谈Flash安全

我们找到一个地方插入flash,管理访问我们的页面就会执行我们写的脚本了。下面看演示,我们来写一个管理访问我们的页面时,就修改用户admin的密码为test123。

利用代码:

1

2

3

4

5

6

7

var url:String = "http://www.test.com/csrfdemo.php";

var datapost:String = "username=admin&password=test";

var _request:URLRequest = new URLRequest();

_request.url = url;

_request.method = URLRequestMethod.POST;

_request.data = datapost;

sendToURL(_request);

从白帽子角度谈Flash安全

这里我们为了演示清楚,flash显示的就是一个长方形框。

然后我们看一下数据库情况:

从白帽子角度谈Flash安全

可以看见访问前密码是123456,访问后密码变成test123,利用成功。

Flash CSRF防御

很多小伙伴提交漏洞的时候,在漏洞修复建议的地方往往就填个你懂的,其实我们描述清楚,肯定会减少审核人员的工作量,让他们更容易理解,这样绝对有加分滴。

其实Flash CSRF修复建议也很简单,配置好crossdomain.xml文件,将权限限制到子域。

Flash XSS

挖掘flash xss其实就像代码审计一样悠闲,我们将网站上flash文件*载下**下来,然后进行逆向分析。下面介绍存在漏洞的函数。

1、getURL()

getURL函数存在问题的地方有两处,第一处是clickTAG变量,clickTAG变量主要被用来跟踪广告的被单击的时间、次数还有显示的位置。但没有对这个变量进行检查的话,就可以注入我们的恶意脚本。

1

getURL(clickTag,"window");

从白帽子角度谈Flash安全

同样道理,不管第一个变量叫什么名字,我们都可以用来执行javascript伪协议来执行任意代码。

另一处存在的问题是重定向,只要将函数内参数设置一个url就可以了。

从白帽子角度谈Flash安全

ActionScript 3.0已经不支持这个函数,不过代码都是兼容的,可以用ActionScript 2.0来写。

2、navigateToURL()

在ActionScript 3.0中舍弃了getURL()而使用navigateToURL(),其实navigateToURL()也存在安全问题。

从白帽子角度谈Flash安全

问题产生原因在于调用外部资源文件可被控制导致的。

从白帽子角度谈Flash安全

类型注入函数:

1

2

3

4

5

6

7

loadVariables();

loadMovie();

loadMovieNum();

XML.load();

LoadVars.load();

Sound.loadSound();

NetStream.play();

大家注意大小写。

3、ExternalInterface.call()

ExternalInterface.call()是一个执行js的接口函数

参数:

1

ExternalInterface.call("sendToJavaScript", input.text);

最终执行的js:

1

2

3

4

5

try {

__flash__toXML(sendToJavaScript,"value of input.text"));

} catch (e) {

"<undefined/>";

}

从白帽子角度谈Flash安全

从白帽子角度谈Flash安全

可控第一个参数的时候

从白帽子角度谈Flash安全

从白帽子角度谈Flash安全

可控第二个参数的时候

从白帽子角度谈Flash安全

Flash XSS漏洞修复建议

只要找到问题点进行说明就很容易进行修复了。

总结

本文介绍应该比较详细了,本文事例如出现与文章不符现象,并非文章有错误,浏览器本身是有保护机制的,关于如何绕过浏览器保护机制不是本文所介绍的内容,技术有限,如有不足还请指出。

参考文章

https://lcamtuf.blogspot.hk/2011/03/other-reason-to-beware-of.html