Flash+Upload Csrf 攻击技术

知道创宇博客
知道创宇博客
创建于2022-2-24 阅读
0
来源:一、Flash的调用及域

文/superhei@知道创宇  2012/8/9

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如:

http://127.0.0.1/Discuz_X2.5_SC_UTF8/upload/data/attachment/forum/201208/06/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: http://127.0.0.1/Discuz_X2.5_SC_UTF8/upload/data/attachment/forum/201208/06/1004333ntvhrv8vvy8lrc4.gif
....

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