现在我们系统基本上都有一个找回密码的功能,这个功能极大的方便了用户,但是如果这个功能没有做好,或者对于测试工程师来说,如果没有对这个功能测试好,也会造成一些严重的后果,比如,任意用户密码重置,用户数据泄漏等一系列安全问题。
1. 短信验证码没有和手机绑定
测试过程:找回密码时,输入自己的手机号点免费获取验证码,此时验证码会发到自己手机上,输入获取到的验证码,这个时候再修改手机号为B,点下一步进行提交,查看是否可以重置成功。在实际测试中有些页面真的可以重置成功,明显的逻辑漏洞。很明显程序并没有把验证码和手机号进行绑定,只要验证码是合法的,就可以重置任意用户的密码。
2. 短信验证码出现在返回的数据包中
客户端和服务器端交互走的都是http或者https协议,对于http协议来说,我向服务器发送一条请求信息,那么服务器必返回一条响应信息。而发送给用户的验证码,竟然也在服务器返回的数据包中。那意味着任何人都可以获取到这个验证码,有了验证码就可以重置密码。
另外,或许有开发人员也许有些安全意识,他们验证码虽然出现在了响应信息中,但他们对验证码进行了md5加密处理,但其实对于这样纯数字仅6位的md5加密数据,破解起来很容易,许多网站提供免费的破解。
3. 短信验证码暴力破解
我们在重设密码时,需要输入短信验证码和重置的密码,短信验证码一般采用6位随机数字进行验证,但是如果我们对提交的错误次数和验证码失效时间没有进行限制的话,很容易被暴力破解掉。
4. 重发短信
一般我们在发送短信的按扭上都会做一个60s后重发,可能大部份人都只会在前端通过js校验时间来控制短信发送按扭,但后台并未对发送做任何限制,绕过js我们是不是可以发送大量发送短信?