验证码漏洞
登录验证码:
1.验证码不刷新:
导致验证码不刷新的原因:登录密码错误后,session中的值没有更新,验证码不变
1.1无条件不刷新
在某一段时间内,无论登录失败多少次,只要不刷新页面,就可以无限次的使用同一个验证码来对一个或多个用户账号进行暴力破解。
1.2有条件不刷新
比如登录失败后,系统会打开一个新页面或者弹出一个新的警告窗口,提示用户登录失败,点击确定后返回登录界面且验证码刷新,这种情况下,只要不关闭新窗口或者弹窗,然后再进行暴力破解。
2.验证码前段可获取
有时候验证码会被程序员隐藏在网站的源码中或者隐藏在请求的Cookie中。
2.1验证码隐藏在源码中
这种情况直接在源码中查找验证码即可。
2.2验证码隐藏在cookie中
提交登录的时候抓包,分析cookie字段,看看是否有验证码,或者是经过简单加密的验证码。
3.验证码空值绕过
通过直接删除验证码参数或者cookie中的一些值来绕过判断,进行暴力破解。
4.万能验证码
如000000,输入万能验证码,就可以直接暴力破解
手机验证码:
1.无效验证码
有验证码模块,但是验证模块与业务功能没有联系。
比如:
用户密码修改:获取短信验证码后,随意输入验证码,直接输入两次密码,就可以成功修改密码,这里验证码并没有被验证。
任意账号注册:利用自己的手机号接受验证码进行验证,接着跳转到密码设置页面,然后抓包,修改手机号,使用任意手机号进行注册。这是由于身份验证与密码修改过程分开。
2.客户端验证绕过
2.1直接返回明文验证码
点击获取验证码,F12可以查看json数据,可以发现验证码在ticket中。
2.2返回密文验证码
验证码加密后返回客户端,用户解密后即可获取验证码
2.3拦截替换返回包(这种方法常见于APP等客户端软件)
使用正常账号修改密码,获取验证码通过时服务器返回数据,保存该信息,接着使用fiddler下断,点击确定,服务器会返回验证码错误的信息,此时将错误信息换成刚刚保存的信息,在执行。
3.验证码未与手机号绑定
利用自己的手机号接受验证码进行验证,接着跳转到密码设置页面,然后抓包,将手机号修改为他人的手机号,验证码不变,提交,成功修改密码。
4.验证码可以被暴力破解
这是由于验证码没有限制次数,时间。直接用brupsuite进行暴力破解得到正确验证码。