许多网站也存在同样的问题,hash算法过于简单,导致轻易就能被破解。
详细说明:首先重置下密码,收到了一封邮件,重置密码地址是:
http://tuchong.com/account/reset/?code=1372415571&sign=9c4a3cab666fcddfdcec52a0d87ff73f&email=smtp_admin%40yeah.net
code是时间戳,email是我的邮箱,那么,sign是什么呢?
手贱测试了下,拿1372415571smtp_admin@40yeah.net去cmd5加密,结果正是9c4a3cab666fcddfdcec52a0d87ff73f!!!
所以,图虫的hash算法应该是
$sign=md5($code.$email);
从此,图虫的重置密码hash算法已被攻破。
为了证明这个漏洞,我再次执行了一次找回密码
接下来,并且打开Chrome审查元素功能,记下找回密码后服务器返回数据的时间(格林尼治时间,须在基础上+8小时)。
然后打开在线工具,把时间转换成时间戳
得到时间戳为1372423073
拿1372423073smtp_admin@yeah.net去cmd5加密,结果为790f0f42e5dcb3e00977ece88c0f50bc
这样,重置密码的三个参数都有了。
构 造url:http://tuchong.com/account/reset/?code=1372423073&sign=790f0f42e5dcb3e00977ece88c0f50bc&email=smtp_admin%40yeah.net
构造重置密码链接的过程中,并没有登录邮箱查看邮件。
现在我们登录邮箱,看看收到的链接是不是一样的?
完全一致
修复方案:
1.将加密算法复杂化,例如
$sign=md5(md5($code).md5(md5(rand()).$email));
ps:在这篇文章中学到了两个知识点:
1、善于发现各种链接中参数的含义及关系,有助于完成渗透。
2、UNIX时间戳的获取:通过HTTP响应头部中的Date来进行转换(试了一下,是可以获取到正确的时间戳的,注意如果Date值后面有GMT标志,则是格林尼治时间,须在基础上+8小时然后再去换算时间戳)。
转载请注明:jinglingshu的博客 » 图虫网重置密码 —-时间戳获取方法