来源:自学PHP网 时间:2015-04-17 11:59 作者: 阅读:次
[导读] QQ邮箱对于跨域请求过滤不严,可能导致用户邮件被持久劫持我们知道,在浏览器的安全模型中,同源策略--SOP(Same Origin Policy)是最为基础的一环,它决定了WEB上的哪些资源是可以被脚...
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? |
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com