漏洞概要
关注数(24)
关注此漏洞
漏洞标题:金山某应用任意帐户密码重置漏洞
提交时间:2012-09-25 10:04
修复时间:2012-11-09 10:05
公开时间:2012-11-09 10:05
漏洞类型:设计缺陷/逻辑错误
危害等级:高
自评Rank:20
漏洞状态:厂商已经确认
Tags标签:
无
漏洞详情
披露状态:
2012-09-25: 细节已通知厂商并且等待厂商处理中
2012-09-25: 厂商已经确认,细节仅向厂商公开
2012-10-05: 细节向核心白帽子及相关领域专家公开
2012-10-15: 细节向普通白帽子公开
2012-10-25: 细节向实习白帽子公开
2012-11-09: 细节向公众公开
简要描述:
金山某应用的用户注册、密码取回的逻辑很奇葩!我一不小心就高潮了
详细说明:
1.存在漏洞的是下面这个站点,看起来很牛逼的样子哈
还是密码取回这里,很脆弱啊!啊啊啊啊!!!
2.点击忘记密码,填写好手机号码以及验证码后点击下一步,此时服务器已经将6位纯数字的验证码发送到手机短信
3.我们尝试下错误的验证码123456看下:
这个时候抓下包,看看POST的数据是怎么样的:
4.这个cookie是非常重要的,已经对应了重置密码的帐号,所以在构造数据包时不要忘记添加cookie,另外查看错误发送错误的验证码时,返回的信息如下:
也就是说返回的关键字包含"-400"或者"验证码错误"的字样,即表示验证失败,反之就获得成功的验证码。
我写了一个简单的破(perl)代码,目前还是单线程,也贴在这里了
漏洞证明:
5.嗯,跑下代码吧!发送的数据包 包含有正确的验证码时,返回的errmsg是重置密码的关键了,看图
6.将errmsg的值拷贝下来,使用下面的这个链接即可成功取回密码,也就是可以重置新的密码了
呵呵,恭喜欧文密码重置成功了
7.在用户注册时,也是同样存在这个问题的,可以被暴力验证,也截个图啦:
8.最奇葩的逻辑在这里,重中之重!!!每次取回密码的链接都是一样的!!!都是一样的,一个字母都不差!!!只要记住下面这个链接,即使不用点击取回密码、不用发送短信,一样可以重置密码!!!神了!!!!
修复方案:
1.注册帐号时,链接的m参数可以更复杂些,而不是6位纯数字;
2.密码取回时,设置强有力的短信验证码,以免被暴力破解;
3.密码取回连续多次失败时,设置此次密码取回无效,需重新发送验证码;
4.最奇葩的那个"一次取回、永久使用"的链接问题,我不懂了,程序员当时是怎么想的?
5.最重要的是,20rank和礼物!
版权声明:转载请注明来源 风萧萧@乌云
漏洞回应
厂商回应:
危害等级:中
漏洞Rank:10
确认时间:2012-09-25 10:35
厂商回复:
收到,
手机验证码安全这块与用户体验这块是个难平衡的点;然后后面的手机验证码是有时效性的,并不是一直都不变;同时我们也有考虑不周的地方比如请求限制频率和来源等;
最新状态:
2013-01-23:已修复
漏洞评价:
评论
-
2012-09-25 10:40 |
风萧萧 ( 核心白帽子 | Rank:1020 漏洞数:76 | 人这一辈子总要动真格的爱上什么人)
@金山软件集团 这个案例里面,验证码已经不重要了!关键是获得authcode!这个值是永久不变的,对吧!
-
2012-11-09 10:19 |
PCanyi ( 路人 | Rank:25 漏洞数:6 | 【为自己吹下的牛逼奋斗终身!】 幻想着改...)
sessionid与验证码绑定了吗?感觉不太像。这个sessionid应该是请求的时候服务端自动生成的吧。如果重新向服务端提交请求,新返回的sessionid应该也可以的。你的思路很好,爆破手机验证码。我觉得金山公司的修补方案并不应该是手机验证码的时效性,当计算机运行速度越来越快,带宽越来越多的时候,时效性并不能解决这个问题。手机验验证码应该设置错误重置次数,5次是比较合理的。