攻击者在不知道目标系统的账号密码的情况下,一种对目标系统尝试性的登录
连续性尝试+字典=自动化
一个有效的字典,可以大大提高暴力破解的效率
字典会在下篇文章分享
如果一个网站没有对登录接口实施防暴力破解的措施,或者实施了不合理的措施。
那么这个网站就存在暴力破解漏洞。
是否要求用户设置了复杂的密码;
是否每次认证都使用安全的验证码;
是否对尝试登录的行为进行判断和限制;
是否在必要的情况下采用了双因素认证;
...等等。
存在暴力破解漏洞的网站可能会遭受暴力破解攻击,但该暴力破解攻击成功的可能性并不是100% !
所以有些网站即虽然存在暴力破解漏洞,但其管理员可能会忽略它的危害。
技巧一:
根据注册提示信息进行优化
对目标站点进行注册,搞清楚账号密码的一些限制,比如目标站点要求密码必须是6位以上,字
母数字组合,则可以按照此优化字典,比如去掉不符合要求的密码。
技巧二:
如果爆破的是管理后台,往往这种系统的管理员是admin/administrator/root的机率比较高,可以使用这三个账号+随便一个密码,尝试登录,观看返回的结果,确定用户名。
比如:
输入xxx/yyyf返回“用户名或密码错误” ;
输入admin/yyy返回 "密码错误” ,则基本可以确定用户名是admin ;
因此可以只对密码进行爆破即可,提高效率。
1、确认登录接口的脆弱性
确认目标是否存在暴力破解的漏洞。( 确认被暴力破解的“可能性”)
比如:尝试登录---抓包---观察验证元素和response信息,判断否存在被暴力破解的可能。
2、对字典进行优化
根据实际的情况对字典进行优化,提高爆破过程的效率。
3、工具自动化操作
配置自动化工具(比如线程、超时时间、重试次数等),进行自动化操作。
target选项卡 :
设置攻击目标,可以通过proxy发送;
Pasitions选项卡:
指定需要暴力破解的参数并设置成变量,同时选择攻击模式:
Sniper:狙击手
设置一个payload,先将第一个变量使用字典进行测试,然后在将第二个变量使用字典进行测试;
Battering ram:冲撞车
设置一个payload ,所有的变量-起用字典内容被替换,然后一起尝试;
Ptichfork:草叉型
每个变量设置一个payload ,分别使用对应的字典对变量进行同时替换;
Cluster bomb:焦束炸弹
需要为每个变量设置一个payload ,分别使用字典内容组合对变量进行替换,
Payloads选项卡
设置字典,并可以对字典进行统一的策略处理; 设置字典,并可以对字典进行统一的策略处理;
options选项卡
对扫描的线程、失败重试等进行配置;
对结果设置匹配的flag:通过一个标识符来区别结果,并在结果栏中flag出来;
●使用前端js实现验证码(纸老虎);
●将验证码在cookie中泄露,容易被获取;
●将验证码在前端源代码中泄露,容易被获取;
验证码一定要在服务端进行认证 服务端认证不严格也会有相应的问题
(服务端认证不严格)
●验证码在后台不过期,导致可以长期被使用;
●验证码校验不严格,逻辑出现问题;
●验证码设计的太过简单和有规律,容易被猜解
账号密码Admin 123
发现提示 账号密码错误 账号不变 修改密码
查看提示 会不会变 以确定 有木有漏洞让我们发现 账号正确
抓包发送到爆破模块
设置字典 这里我们使用数字(由于已知密码是123456 做一个简单的演示)
攻击得到结果 密码为123456
将错误提示 或者 正确提示 复制 添加到match模块
攻击后得到结果会有一栏显示
在extract模块中 直接点击添加 弹窗 在回显报文中 选择需要会显得元素
那么在攻击后的结果中会有一栏 显示 此元素信息
看源代码
使用过的验证码应该销毁 此关没有进行销毁
Session要设置过期时间 一般为一分钟 此关没有设置
随机填写账号密码验证码 bp抓包 将抓到的包的验证码修改为正确的
提示账号密码错误
多发送几次发现验证码任然有效 既可以爆破
发送到爆破模块
配置两个字典
配置两个正则,发起攻击
利用重放模块 右键发送
更改验证码 发现返回数据为账号或者密码错误
可知 这是前端验证
设置攻击模式 两个变量 两个字典
设置两个payloud
设置正则
https://www.cnblogs.com/KbCat/p/9317545.html
关键 token 不变
抓取返回包 得到token 再把token放入请求包
token只要是用来防御csrf(跨站请求攻击),但无法防止暴力破解。因为当将随机产生的token参数加入到请求包中时。每次请求攻击者只能够盗取到被攻击这的cookice而不能伪造当次请求的token,这是因为token是由服务器随机生成的,只有匹配当次的token,服务器才会与客户端进行连接,否则拒绝连接。而token无法防止暴力破解的原因是因为token是随机生成的,攻击者只要能够想办法获取到前端的token值即可进行暴力破解。
进入靶场页面是一个登录页面、该关卡是一个token的暴力破解关卡,抓取登录请求包即可看出再包中添加了token字段,该token字段也是可以放在cookie中存储的。
1. token介绍
Token 是在服务端产生的。如果前端使用用户名/密码向服务端请求认证,服务端认证成功,那么在服务端会返回 Token 给前端。前端可以在每次请求的时候带上 Token 证明自己的合法地位。如果这个 Token 在服务端持久化(比如存入数据库),那它就是一个永久的身份令牌。
Token 完全由应用管理,所以它可以避开同源策略
Token 可以避免 CSRF 攻击(http://dwz.cn/7joLzx)
Token 可以是无状态的,可以在多个服务间共享
2. 利用burp进行暴力破解
在网站上随便输入用户名和密码 用burp进行抓包
可以看到对应的参数,选取password和token进行爆破,因为我们是一次password对应上一次服务器返回的一个token,所以选择pichfork模式。(Pichfork(草叉模式):类似于Battering ram模式,但是使用的是多个字典,并且多个点的字典内容一一匹配进行爆破)
再进入intruder模块options中设置抓取返回数据包的token值,
将包发送至intruder ctrl+i 或者右键 破解类型选择pitchfork 设置password和token是变量
在options中的grep-extract中打勾点击add添加过滤条件 点击refetch response找到响应包中的token 选中复制token值点击确定
在Redirections重定向功能中,选择always始终跟随url重定向
点击response按钮,会发送一次请求,显示返回的数据包,我们在数据中查找token的值并选中,其实也可以在前面分析时记录token值的位置,直接添加正则表达式,便不需要发送这一次请求了。
这一串token值需要记录下来,等会有用,发送第一个数据包的token值就来之于此。
为了方便观察暴力破解我们可以提取提交登录请求后的返回值,显示到结果页面、更为直观的看出账号密码是否正确登录成功。账号密码错误会返回username or password is not exists~,搜索该串字符串,添加正则。
将最下方的redirections选择为always
设置payload set为1 type为runtime file 文件选择为密码字典
第一个payload选择一个密码字典
set为2 type为recursive grep时 复制刚才的token值到first request
第二payload选择grep模式,选择提取token值的正则表达式,将我们之前保存的token值粘贴到该空框中,作为第一个发送包的token值。
点击start attack进行破解时遇到了报错
需要在options中将线程设置为1
设置进程数,设置进程数为1,每连接只发出一个请求包,若同时发送几个请求,会返回多个token,暴力破解将会失败,bp也会报错
重新爆破 爆破完成后可以看到相应包长度不同的包中有一个登录成功
可以多设置一个字段 得到 一个回显
方便我们的得到结果
●设计安全的验证码(安全的流程+复杂而又可用的图形) ;
●对认证错误的提交进行计数并给出限制,比如连续5次密码错误,锁定2小时;
●必要的情况下,使用双因素认证;
一个简单的token实例
一般的做法:
1、将token以"type= 'hidden' ”的形式输出在表单中;
2、在提交的认证的时候一起提交,并在后台对其进行校验;
但,由于其token值输出在了前端源码中,容易被获取,因此也就失去了防暴力破解的意义。
一般Token在防止CSRF 上会有比较好的功效。