Pikachu-Burt Force(暴力破解)
首先呢,先推荐个bilibili的网址,这个Pikachu的开发人,里面有其相关教程的视频 ————> bilibili链接
暴力破解
暴力破解概述(通过下面几个词来了解下什么是暴力破解)
连续性尝试 + 字典 +自动化 ————>(瞎猜)
暴力破解漏洞概述
✔是否要求用户设置啦复杂的密码;
✔是否每次认证都使用安全的验证码;
✔是否对尝试登录的行为进行判断和限制;
✔是否在必要的情况下采用双因素认证;……等等
暴力破解漏洞测试流程
1、确认登录接口的脆弱性
确认目标是否存在暴力破解的漏洞。(确认被暴力破解的“可能性”)
比如:尝试登陆——抓包——观察验证元素和response信息,判断是否存在被暴力破解的可能。
2、对字典进行优化(根据实际情况来优化字典,提高效率)
3、工具自动化操作
配置自动化工具(比如线程、超时时间、重试次数等)
现在开始我们的正题
一、基于表单的暴力破解
1.先尝试性的登录下(右上角的提示有用户和密码) 登录失败,登录成功
2.1抓包,全选发送到Intruder模块
可以看到这个表单暴力破解,只有用户和密码 没验证码
2.2现在开始Clear清除下变量,,再Add username和password的变量,选择攻击模式为cluster bomb
各种攻击模式的区别:
●Sinper:一个变量设置一个payload进行攻击
●Battering ram:可以设置两个变量,把payload同时给两个变量
●Pitchfork:两个变量分别设置payload,然后按顺序一 一对应进行破解
●Cluster bomb:两个变量分别设置payload,然后交叉列所有情况进行破解(常用)
2.3,字典是我为实验方便写了几个简单的,:
由于是Cluster bomb攻击模式,密码字典需要设置2个(可以一样)
2.4最后option可以根据自己需要设置线程,有的Burt suite好像不支持高并发
2.5 grep match模块,大多数情况下我们根据返回页面的length不同观察,但是也可以自己设置falg
将第一步中用户密码登录失败的提示语句复制到下方(username or password is not exists)
3.攻击
4.查看结果,得出用户和密码
除了根据返回的length的不同之外,还可以根据是否有 错误的返回的标志 来判断
二、暴力破解之验证码绕过(on client)客户端绕过
观察网页源码
这一关虽然加了验证码,但是通过观察源码可以发现,输入的验证码是通过前端的js进行验证,很轻松就可以绕过,可以说形同虚设
1.输入
2.1设置代理,登录,抓包
2.2发送到Repeater(Repeater中特别方便不用反复设置代理,抓包)
2.3 Go 下面可以看出,是否输入验证码,或者是否输入正确的验证码已经不会再检测
2.4现在 就和基于表单的暴力破解方法一致了
发送至Intruder,还是只有用户和密码两个变量,验证码不用管
设置payload,设置options
3.攻击,查看结果,获得用户和密码
三、暴力破解之验证码绕过(on server)服务端绕过
不安全的验证码- on server常见问题
● 验证码在后台不过期,导致长期被使用
● 验证码校验不严格,逻辑出现问题
● 验证码设计太过简单和有规律,容易被猜
观察源码,这个是在后端的检测的验证码,我们绕过的思路就是观察他产生的验证码有没有过期设置(用过一次刷新),
如果没有,默认的session就是24min刷新
既然知道啦这个验证码在后台生成后,便不会过期,那我们在抓包暴力破解时,直接随便用一个之前生成的验证码即可
1.1抓包,发送给Repeater
1.2验证下,是否已验证过的 验证码不会删除
Go一下
我们修改下用户和密码,使用同样的验证码,再次Go一下
如果还是显示用户或密码错误,,没提示验证码错误,,说明 后台的 已用过的验证码 没有删除
说明验证码是可以重复利用的,
2.现在我们开始暴力破解,还是之前的操作
发送给Intruder,,选择用户和密码两个变量,,验证码用之前的就行,,选择攻击模式
设置payloads,,设置options(options也可以不修改,这里的Grep Match中的flag不能作为判断正确用户密码的标志,我们采用Length长度不同来判断即可)
3.攻击,查看Length不同于其他的,取得用户和密码
四、暴力破解之token防爆破?
token一般的做法:
1、将token以 “type= ‘hidden’ ”的形式输出在表单中;
2、在提交的认证的时候一起提交,,并在后台对其进行校验;
但,由于token值输出在了前端源码中,容易被获取,因此也就失去了防暴力破解的意义。
一般token在防止CSRF(跨站请求伪造)上会有比较好的功效,具体在CSRF漏洞部分再深入。
开始具体实验,查看网页源码(每次刷新后的token值是不一样的)
但是由于 token是明文方式输出到html表单中,
攻击者只要写一个工具每次提交认证前获取一下这个值,然后添加到自己的字典里面,就可以进行连续性的存放
所以说用token防暴力破解是没有用的
这样每次提交要验证token值(每次更新),表面上可以防止。但是他后端产生的token每次以明文形式传到前端,就有了漏洞。
1.1抓包之后,发送到Intruder,我们把token和密码设置变量,
破解模式选为pitchfork
1.2在options中的grep-extract中打勾点击add,
添加过滤条件 点击refetch response
找到响应包中的token 复制到别处先 再选中token值 点击确定(我这里是379945e70d48a4e311393118204)
1.3将options最下方的redirections选择为always
1.4然后设置payload,第一个参数设置不在赘述(和以前破解密码一样),
第二个参数选择Recursive grep,然后将options中的token作为第一次请求的初始值。(把之前复制的token值复制到这)
2.破解(点击start attack)
出现错误,提示Recursive grep不支持多线程并发,将其改为1就行啦
获取密码
防暴力破解的措施总结
● 设计安全的验证码(安全的流程+负载而又可用的图形);
● 对认证错误的提交进行计数并给出限制,比如连续5次密码错误,锁定2小时;
● 必要的情况下,使用双因素认证;