灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:2602回复:1

Flash应用安全系列[5]--QQ邮箱永久劫持漏洞

楼主#
更多 发布于:2013-03-05 09:47
qq邮箱对于跨域请求过滤不严,可能导致用户邮件被持久劫持

我们知道,在浏览器的安全模型中,同源策略--SOP(Same Origin Policy)是最为基础的一环,它决定了web上的哪些资源是可以被脚本访问的,哪些资源则是被拒绝的。

撇开HTML5中的 Access-Control-Allow-Origin头不说,执行域在A.com域下的脚本是不能直接访问到B.com的资源的,而我们所寻找的那些跨站
漏洞,正是为了绕过这个SOP的限制。但是作为第三方插件在浏览器内安装的Flash Player,却破坏了SOP,只需要对方的crossdomain.xml运行,一个B.com的SWF文件就可以读取到A.com的资源。

现在让我们来看看QQ邮箱的corssdoamain.xml

<cross-domain-policy>
   <allow-access-from domain="*.qqmail.com"/>
   <allow-access-from domain="*.qq.com"/>
</cross-domain-policy>
使用了通配符,使得任意qq.com子域下的SWF都可以读取到mail.qq.com的资源。

现在我们要做的就是在*.qq.com下寻找一个可以上传SWF的地方,由于SWF能够执行JS脚本,因此允许上传SWF文件相当于允许在上传域下执行脚本,所以很少有站点能够上传SWF文件,但是允许上传JPG的地方却不少。Flash Player对于SWF文件的后缀名并不敏感,因此我们只需要找到一个可以上传JPG且没检验图像文件合法性的上传点就可以了。比如这个:act.news.qq.com/show_umodify.php

QQ邮箱在设置转发的时候会检验post过来数据的sid,但是这个sid是附在url中的,很容易通过在发送到外域的数据包referrer头被取到。而且我们现在已经可以读取mail.qq.com上的数据,可以直接读取mail.qq.com/cgi-bin/login?vt=passport;vm=wsk;delegate_url=得到sid。
除了token,检测referre头常被作为防止CSRF的另一种手段,经过测试,QQ邮箱在这里也进行了检测,对于外域发送过来的数据包直接废弃,但是对于qq.com子域下发送的请求,是全部接受的,恰好我们的swf也在qq.com的某个子域下,刚好能满足这个条件。



 
qqmail.csrf.as http://swfpoc.appspot.com/source/qqmail.csrf.as
 

修复方案:

改改crossdomain.xml?再管管referre?


喜欢0 评分0
闭眼就天黑
精灵王
精灵王
  • 注册日期2012-09-13
  • 发帖数373
  • QQ
  • 火币1904枚
  • 粉丝68
  • 关注9
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 幽默大师奖
  • 新人进步奖
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 金点子奖
  • 特殊贡献奖
  • 宣传大使奖
  • 诚信商户
沙发#
发布于:2013-03-05 12:07
zhege.....

名称:IT171中文网 群号:259667665 论坛地址: http://www.it171.com
回复(0) 喜欢(0)     评分
游客

返回顶部