密码找回漏洞—邮箱弱token
a. 时间戳的MD5
案例:某软件任意用户密码修改漏洞
某软件用户通行证取回密码存在逻辑问题,导致可以修改任意用户的密码。
怕影响别的用户帐号安全,所以只用了3个朋友的帐号进行测试,均成功。
360的业务线也很广了,比如360安全卫士系统云备份,云盘存储,网站宝,团购等项目,利用这个sso漏洞可以通杀,危害还是很严重的。
详细说明:
先正常流程取回一次密码,查看邮箱,邮件内容类似:
360个人中心找回密码(重要)!
重设密码地址:http://i.360.cn/findpwd/setpwdfromemail?vc=c4ce4dd3d566ef83f9[马赛克]&u=[马赛克]%40gmail.com,马上重设密码!
如果您没有进行过找回密码的操作,请不要点击上述链接,并删除此邮件。
vc可以看出是一串md5,解密一下发现是个数字,类似1339744000,第一感觉是个id,那么遍历id并且修改u变量是否可以修改任意用户密码呢,试了一下不可以,在看这个数字,感觉有点太大了,在看,在看,在看,怎么像是个unix时间戳呢?
解开一下发现真的是个时间戳!那么可以大胆的猜测一下此处的流程,用户取回密码时,产生一个精确的时间戳,与帐号绑定,记录在某个密码重置库内,那么修改这个用户密码必须得知道这个时间戳才可以,看似合理,但程序员忽略了一个细节,就是假如这个时间戳是新生成得,我在一定得时间段内进行暴力猜解,很快就可以获取到这个有效得链接!
写了个exp测试一下。
打开果然是
修改密码后跳到了登陆首页,用刚刚修改得密码登陆
Bingo~看看其他应用。
奇怪,不是sso,但是既然知道了密码,so不o的无所谓啦。
PS:另外发现了一个小小的问题,如果某个重置密码链接未使用的话,时间戳貌似不会失效,这样给预测带来了点麻烦,但这只是时间问题。
修复方案:
不可预测性没有做到位,设计之初就做错了,真是。。
b. 用户名
c. 服务器时间
案例:某网站任意用户密码重置漏洞(经典设计缺陷案例)
1.还是之前提交的那个中兴的应用之星网站
http://www.xxxxxxx.com.cn
上面有积分可以换充值卡。
某网站的积分商城充值卡等礼品任意兑换漏洞
2.上面还有一个任意用户密码重置漏洞,找回密码链接的token不够随机,貌似就是当前时间。可以任意找回用户的密码而不用去查看邮箱中的找回链接是啥,重置别人的密码后就可以用别人的积分在积分商城里面来换取礼品。
3.首先用2个账号同时找回密码来进行对比,开2个窗口,2个账号同时点击找回密码:
4.去邮箱里面去查看找回密码的链接:
随机token只相差4,我这里网络有点卡,如果是网络好,应该只相差1-2,token轻易被猜出来。
5.接下来就是用构造的链接,找回密码了:
6.可以在注册功能那块找到已经注册过的邮箱,已经注册过的邮箱会提示一个小红叉表示已经被注册过:
没被注册
修复方案:
增强随机token
关注路劲科技,关注网络安全!
CVE-2020-0796检测与修复
我最近偶遇的六个很酷的Python库
招募令| 别看别看,一篇“三无”招聘文章,请慎重点击