暴力破解之验证码
验证码用来做什么?
- 登录暴力破解
- 防止机器恶意注册
验证码的认证流程
- 客户端request登录页面,后台生成验证码
- 后台使用算法生成图片,并将图片response给客户端;
- 同时将算法生成的值全局赋值存到SESSION中;
- 校验验证码
- 客户端将认证信息和验证码一同提交;
- 后台对提交的验证码与SESSION里面的进行比较;
- 客户端重新刷新页面,再次生成新验证码
- 验证码算法中一般包含随机函数,所以每次刷新都不一样。
验证码绕过-on client
常见问题
- 使用前端js实现验证码;
- 将验证码在cookie中泄露,容易被获取;
- 将验证码在前端源代码中泄露,容易被获取;
实验演示
随便输入账号不输入验证码
输入一个错误的验证码
查看页面源代码,可以发现,验证码的随机获取是由前端的JavaScript所控制
输入正确的验证码后,打开burpsuite,选中http,将其发送到Repeater中
可以在Repeater中修改内容来观察
;
- 对认证错误的提交进行计数并给出限制,比如连续5次密码错误,锁定2消失;
- 必要的情况下,使用双因素认证;
token对放暴力破解的意义
一个简单的token的实例
//生成一个token,以当前微妙时间+一个5位的前缀
function set_token(){
if(isset($_SESSION['token'])){
unset($_SESSION['token']);
}
$_SESSION['token']=str.replace('.','',uniqid(mt_rand (10000,99999),true));
}
一般的做法:
- 将token以“type= ‘hidden’ " 的形式输出在表单中;
- 在提交的认证的时候一起提交,并在后台对其进行校验;
但是,由于淇token值输出在前端源码中,容易被获取,因此也就失去了防暴力破解的意义。一般Token在防止CSRF上会有比较好的功效。