暴力破解&暴力破解漏洞概述
暴力破解
连续性尝试 + 字典 + 自动化
字典
一个有效的字典,可以大大的提高暴力破解的效率
- 常用的账号密码(弱口令),比如常用用户名/密码TOP500等
- 互联网上被脱裤后账号密码(社工库),比如CSDN当年泄漏的约600w用户信息。
- 使用指定的字符使用工具按照指定的规则进行排列组合算法生成的密码。
如果一个网站没有对登录接口实施防暴力破解的措施,或者实施了不合理的措施。则该称该网站存在暴力破解漏
比如
√是否要求用户设置了复杂的密码
√是否每次认证都使用安全的验证码;
√是否对尝试登录的行为进行判断和限制;
√是否在必要的情况下采用了双因素认证;
等等。
暴力破解漏洞测试流程
- 确认登录接口的脆弱
确认目标是否存在暴力破解的漏洞。(确认被暴力破解的“可能性”)
比如:尝试登录—抓包-观察验证元素和 response信息,判断否存在被暴力破解的可能。 - 对字典进行优化
根据实际的情况对字典进行优化,提高爆破过程的效率。 - 工具自动化操作
python或 burpsuite
配置自动化工具(比如线程、超时时间、重试次数等),进行自动化操作。
技巧
根据注册提示信息进行优化
对目标站点进行注册,搞清楚账号密码的一些限制,比如目标站点要求密码必须是6位以上,字
母数字组合,则可以按照此优化字典,比如去掉不符合要求的密码
技巧
如果爆破的是管理后台,往往这种系统的管理员是 admin/ administrator/root的机率比较高
可以使用这三个账号+随便一个密码,尝试登录,观看返回的结果,确定用户名。
√输入Xxyy回“用户名或密码错误”;
√输入 admin/y返回“密码错误”,则基本可以确定用户名是 admin
因此可以只对密码进行爆破即可,提高效率。
基于表单的暴力破解(基于 burp suite)
burpsuite的文档
我们使用burpsuite进行暴力破解
proxy模块
burpsuite充当浏览器和web站点之间的代理,可以对HTTP请求进行修改
intruder模块
Intruder模块可以通过刈http request的数据包以变量的方式自定义参数,然后根据对应策略进行自动化的重放。常用于自动化猜测/暴力破解过程中
targe选项卡
设置攻击目标,可以通过prox发送
Pasitions选项卡
指定需要暴力破解的参数并设置成变量,同时选择攻击模式
Sniper:狙击手
设置一个 payload,,先将第一个变量使用字典进行测试,然后在将第二个变量使用字典进行测试
Battering ram冲撞车
设置一个 payload,所有的变量一起用字典内容被替换,然后一起尝试
Ptichfork:草叉型
每个变量设置一个 payload,分别使用对应的字典对变量进行同时替换
Cluster bomb:集束炸弹
需要为每个变量设置一个 payload,分别使用字典内容组合对变量进行替换
Payloads选项卡
设置字典,并可以对字典进行统一的策略处理
options选项卡
对扫描的线程、失败重试等进行配置
对结果设置匹配的fag:通过一个标识符来区别结果,并在结果栏中flag出来
可以根据返回结果是否含有flag或者响应的长度来判断是否爆破成功
暴力破解之不安全的验证码分析
验证码的作用
√登录暴力破解
√防止机器恶意注册
验证码的认证流程
S1 客户端 request登录页面,后台生成验证码:
1后台使用算法生成图片,并将图片 response给客户端,同时将算法生成的值全局赋值存到 SESSION中
校验验证码:
S2 客户端将认证信息和验证码一同提交
后台对提交的验证码与 SESSION里面的进行比较
S3 客户端重新刷新页面,再次生成新的验证码
验证码算法中一般包含随机函数,所以每次刷新都会改变;
on-client
前端可能出现的问题
- 使用前端js实现验证码(纸老虎)
- 将验证码在 cookie中泄露,容易被获取;
- 将验证码在前端源代码中泄露,容易被获取
在前端使用js设置的安全机制是可以被绕过的,比如在前端进行验证码的生成和验证,就很容易绕过形同虚设
on-server
验证码后端处理可能存在的问题
- 验证码在后台不过期,导致可以长期被使用
- 验证码校验不严格,逻辑出现问题;
- 验证码设计的太过简单和有规律,容易被猜解 可以使用机器视觉的方式来
识别
一般后台将验证码字符串存储在会话中,当验证一次验证码,应该立即销毁这个变量
Token可以防暴力破解吗?
一般的做法
1将 token以"type=" hidden"的形式输出在表单中
2在提交的认证的时候一起提交,并在后台对其进行校验;
但是由于其 token值输出在了前端源码中,容易被获取,因此也就失去了防暴力破解的意义
一般 Token在防CSRF上会有比较好的功效
暴力破解常见的防范措施
设计安全的验证码(安全的流程+复杂而又可用的图形)
- 对认证错误的提交进行计数并给出限制,比如连续5次密码错误,锁定2小时
- 必要的情况下,使用双因素认证