防暴力破解的措施总结
目前首当其冲的就是使用验证码
设计安全的验证码(安全的流程+复杂而又可用的图形);
在后台启用一些安全的规则,对认证错误的提交进行计数并给出限制,比如连续5次密码错误,锁定2小时;
必要的情况下,使用双因素认证;
聊一聊token对防暴力破解的意义(意外的问题)
一个简单的token的实例
一般的做法:
1.将token以“type=‘hidden’”的形式输出在表单中;
2.在提交认证的时候一起提交,并在后台对其进行校验;
但,由于其token值输出在了前端源码中,容易被获取,因此也就失去了防暴力破解的意义。
我们首先来看一下token的问题,我们看一下源码
这个长长的数字,其实就是我们说的token,每当我们打开页面的时候,后端在收到请求之后,它会在后端同时生成token,然后把token放到session里面,同时会把这个token输送到前端的表单里面来,它的目的是,当我们去点账号密码,点登录的时候,后台同时会对账号密码,加上token,来进行验证,并且,你每次刷新页面,token都会变的,我们可以重新点一个,刷新看一下
我们看到跟刚刚是不一样的,就是每次刷新都不一样,我们接下来看一下后端的代码
对提交的token和session里面的token进行对比,如果这个token验过了,才会去验账号密码,如果token验不过,它是不会去验账号密码的
每当你去请求这个页面的时候
这个地方都会去执行set_token();,我们去看一下这个函数是什么内容
先判断token存不存在,如果存在就先把它销毁掉,然后再去生成新的token,这个token其实就是一个rand,从一个随机数里面生成一个对应的字符串,后面把这个字符串生成到token里面去
最终的效果是,当我们在前端刷新这个页面的时候这个set_token它产生的值,会被我们显示到input标签里面
input标签会把session里面的token给echo出来到表单里面
当我们在前端提交代码的时候,同时会提交一个隐藏的值,后端同时也会对这个token进行验证,这个其实是无法防止暴力破解的,因为在验证之前,这个token值已经被攻击者获取到了,因为它被以input方式明文的输送到了html表单里面,攻击者只要写个工具,在每次提交认证前,获取一下这个值,然后填到它的value里面,就可以进行连续性重放,因为每次token都是用value来提交的,所以说,用token来防止暴力破解是没有用的
我们来实际演示一下,先抓包
把请求消息发送到intruder,攻击类型选择pitchfork,添加密码和token值,记得把用户名给改成admin
选择options,线程数为1,因为我们要获取前面的token值,才能做下一次请求,无法并发
选择grep-extract
点add,输入value进行搜索,对token值进行选中,这里记得复制一下,然后点refetch response,刷新一下
redirections>always
点payloads,在payload options里面把我们刚才复制的token值黏贴进去
然后加载一下字典,就可以开始爆破了
搜索login,爆破成功
一般Token在防止CSRF上会有比较好的功效,具体将在CSRF漏洞章节进行讲解。