暴力破解&暴力破解漏洞概述
暴力破解概述
通过下面这些词来了解一下什么是暴力破解:连续性尝试+字典+自动化=暴力破解(带着字典瞎猜~)
暴力破解概述-字典
一个有效的字典,提高暴力破解的效率:
常用的账号密码(弱口令),比如常用用户名/密码TOP500等。
互联网上被脱裤(就是被泄露出来)后账号密码,比如CSDN当年泄漏的约600w用户信息。
撞库:拿已知的库的信息,去测试其他网站的账号密码。
使用指定的字符使用工具按照指定的规则进行排列组合算法生成的密码。根据已知信息生成密码,然后进行暴力破解。
暴力破解漏洞概述
如果一个网站没有对登录接口实施防暴力破解的措施,或者实施了不合理的措施。
则该称该网站存在暴力破解漏洞。
暴力破解漏洞测试流程
基于表单的暴力破解(基于 burp suite)
介绍Burp suite选项卡
target选项卡
设置攻击目标,可以通过prox发送
Pasitions选项卡
指定需要暴力破解的参数并设置成变量,同时选择攻击模式
Sniper:狙击手
设置一个 payload,,先将第一个变量使用字典进行测试,然后在将第二个变量使用字典进行测试
Battering ram沖冲撞车
设置—一个 payload,所有的变量一起用字典内容被替换,然后一起尝试
Ptichfork:草叉型
每个变量设置一个 payload,分别使用对应的字典对变量进行同时替换
Cluster bomb焦束炸弹
需要为每个变量设置一个 payload,分别使用字典内容组合对变量进行替换
基于表单的暴力破解实验 burp suite-intruder介绍
Payloads选项卡
设置字典,并可以对字典进行统一的策略处理;
options选项卡
对扫描的线程、失败重试等进行配置;
对结果设置匹配的fag:通过一个标识符来区别结果,并在结果栏中fag出来
流程
首先配置浏览器代理,使用burpsuite抓包,发送至Intruder模块
设置攻击类型Attack type为Cluster bomb以及变量。
在playloads中添加变量的字典,点击load添加字典,点击Start attack
发现有个Length长度值可以其他的长度值不一样,说明这个就是正确的密码。
暴力破解之不安全的验证码分析
验证码
我们一般用验证码来做什么?
√登录暴力破解
√防止机器恶意注册
搞清楚验证码的认证流程
客户端 request登录页面,后台生成验证码
1后台使用算法生成图片,并将图片 Response给客户端;
2同时将算法生成的值全局赋值存到 SESSION中
校验验证码:
1客户端将认证信息和验证码一同提交
2后台对提交的验证码与 SESSION里面的进行比较
客户端重新刷新页面,再次生成新的验证码:
验证码算法中一般包含随机函数,所以每次刷新都会改变;
on server
先抓一个包,发送到repeater中。
接着我们验证代码的有效性,输入一个空的验证码,会提示验证码不能为空,输入一个错的验证码,会提示验证码输入错误,那只有当验证码输入正确的时候,才可以通行,说明这是在后端做的验证的。
然后我们来验证这个验证码在后台是否会过期。
首先获取一个新的验证码,(这里验证码是向后台请求一个新的验证码,后台收到请求之后,会返回一个新的验证码同时后台会存下新的验证码)
回到burp中,输入这个新的/正确的验证码,
当验证码正确时,显示的是账户和密码不存在,我们来验证当我们再次提交账户和密码时这个验证码是不是不会改变,
也就是说这个验证码是可以重复被利用的。这就是绕过了验证码。接下来的操作和表单的暴力破解就一样了,参考上面的步骤就好啦~
on client
我们随便输入一个账号和密码,点击登录,页面回显让我们输入验证码。
当我输入错误的验证码时,回显说我的验证码输入错误,也就是说我的验证码一定要输入且输入正确
我们发现,每次当我点击验证码的时候,验证码都会发生改变,所以没有办法对验证码进行暴力破解。那是不是就安全了呢,我们使用Burp抓包看看,
看到POST请求,账号密码,和多出来的验证码,这时候我们再来看也页面的源代码,确认下验证码是否在前端做的
说明,验证码生成及验证都是通过js在前端完成的,我们再来回到burp,将数据包发送到repeater模块(数据包重放的模块)可以对发送过来的数据包进行修改,在发送。
为了测试验证码是否有效,我手动删除了验证码,在发送数据包,回显发现显示的是账户和密码不存在,而非验证码错误,说明验证码是前端写的,已经被我们绕过了。
再将数据包发送到Intruder模块当中,这就和表单的暴力破解的过程一样了,因为发现这里的验证码其实是没有用的。
其他的方式:
在火狐浏览器中,安装JS插件,选择Block all,意思禁止掉页面的所有JS代码,所以就可以直接绕过前端代码。
Token可以防暴力破解吗?
token是如何生成的?
当我们每次打开这个登录页面时,后端收到请求之后会同时生成一个token,同时将token输出到前端的表单里面。
目的是为了,当你输入账号密码点击登录时,后台会对你的账号密码+token进行验证,并且每次刷新页面之后token都会发生改变。
一般的做法
1将 token以“type= hidden’“的形式输出在表单中
2在提交的认证的时候一起提交,并在后台对其进行校验
但,由于token值输出在了前端源码中,容易被获取,因此也就失去了防暴力破解的意义
暴力破解常见的防范措施
设计安全的验证码(安全的流程+复杂而又可用的图形);
对认证错误的提交进行计数并给出限制,比如连续5次密码错误,锁定2小时
必要的情况下,使用双因素认证;