绕过csrf防护让用户发微博思路

今天扯淡一种另类的csrf:通过低敏感度,所以没有csrf防护的页面,来操作高敏感度的页面,比如微博加粉,发微博云云。

/* 无耻的小注释
这个问题已经在腾讯漏洞报告平台报告,觉得比较好玩,故扯出来发到zone里,让大家乐乐。
腾讯这样的忽略点应该不少,大家可以再挖挖。
*/

话说某个月高风黑,伸手不见黑夜的五指,菜逼哥正蛋疼的挖着tx的洞,为了换几个公仔给妹纸逗乐,下意识地在火狐界面下按下了F12。
据某XX的经验,那些看得见的页面,屌丝程序猿们基本都有防护,那些看不见得地方最容易出问题。在web2.0的今天,界面上最看不见的东西是什么,那当然各种回调了。所以按F12找各种json、callback,无往不利。

就在菜逼哥按下F12的那个时刻,一个网址映入菜逼哥的眼帘:

http://dict.py.qq.com/cgi-bin/login?cmd=login&js_tag=1&callback=callback

于是,熟练的手起刀落,查看起源代码:

呵呵,又一个写在script标签中的回调。各位现在可以尽情的fuzz一下,此处回调对回调名字过滤甚是严格,只允许a-zA-Z0-9[]'”.这些字符。妄图alert(/hacked by 路人甲@wooyun/)的希望都破灭了
似乎没戏了,不过,似乎,总感觉哪里不太对劲的样子。。。。

仔细琢磨琢磨。。。。
利用点
似乎

出在
那个
小数点上

著名的“风骚爱情湿人学者”韩寒童鞋曾经曰过,什么叫现代湿,把散文拆开,分行来写就对了。
菜逼哥一直对那些会写湿的人很仰慕,就也附庸风雅,写了上面这一小段,大家凑合着看看?

大胆假设一下,如果callback的取值是parent.iframe_id.element_id.click,那么位于父页面中,iframe引用了与其同域的页面中的元素、函数这些东西,会不会触发、调用呢?
一个声音高叫着:答案是有的

既然答案是有的,菜逼哥我就不罗嗦了,先放出利用代码再说吧:

http://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?url=http://91ri.org/

这个页面是qq空间的一键分享网址的页面,访问下就会看到,页面左下角有一个同时转发到微博云云。
然后呢,代码应该也不需要解释了,大家都看得懂。

这样的问题说大不大,说小不小,关键就看到被操作页面有没有敏感的函数、元素可以被调用了。
防范的话,应该也是比较简单的,在操作原页面做普通的csrf防护:加token也好,referer判断也行;
原页面限制下小数点出现的次数:比如http://e.qq.com/ec/verifymail.php?script&callback=parent.xx这个页面,只允许使用一个小数点,那几乎就没什么想法了。如果有哪位大犇有利用思路,欢迎回帖指出。
被操作页面判断top.location,parent.location是否为可信域名下的页面:这个可能容易疏漏。whatever,也是一种限制被利用的方式

最后给两个效果图吧

91ri.org:callback调用key文件再发布微博,挺好的思路,可以mark一下。

相关文章推荐《点击劫持(ClickJacking)的小科普》《CSRF漏洞详细说明

link:http://zone.wooyun.org/content/3471

本文由网络安全攻防研究室(www.91ri.org)信息安全小组收集整理,转载请注明出处。