DVWA Brute Force(暴力破解) 渗透操作流程
burpsuite安装教程(b站up主):linux环境Burpsuite pro安装并创建桌面快捷启动 - 哔哩哔哩
暴力破解原理篇:
暴力破解跟社会工程学有一定的联系,是通过我们对用户进行一些信息收集,对对方可能使用的密码使用程序进行一个自动生成,然后再使用程序对对方进行一个自动爆破的过程,比如对方可能使用姓名的拼音+手机号,或者手机号+姓名的拼音,或者.一类的符,我们就可以利用这些信息进行一个针对生成,然后对对方进行相应的爆破
kali自带的字典生成工具: crunch
crunch 最小位数 最大位数 指定生成范围
1.Low等级
随便输入几个帐号和密码 看网站的提示,发现不管输入几次都是显示帐号和密码不对
既然Low等级没有那么多限制,我们直接准备好字典,打开burpsuite,开启拦截功能
拦截到的这个request包也就是我们请求的包,可以看到我们随便输的帐号和密码也在里面,右击,发送到intruder模块,或者按Ctrl+I发送到intruder
这里提供的攻击方式有四种分别是:
机制 | 场景 | 请求量 | 例 | |
Sniper(狙击手模式) | 单Payload字典 → 逐个替换所有标记位置 | 暴力破解单个输入点(如密码、API密钥) | Payload数量 × 1个位置 | 对 username=§admin§&password=123 中的 §admin§ 轮流替换字典值。 |
Battering ram(攻城锤模式) | 单Payload字典 → 同时替换所有标记位置 | 多个位置输入相同内容(如批量修改邮箱、统一填充验证码) | Payload数量 × 1 | 对 email=§test@a.com§&confirm_email=§test@a.com§ 中两个标记位同时替换相同值。 |
Pitchfork(草叉模式) | 多Payload字典 → 按顺序并行替换不同位置 | 关联字段组合攻击(如用户名+密码、手机号+验证码) | min(字典1数量, 字典2数量, ...) |
|
Cluster bomb(集束炸弹模式) | 多Payload字典 → 笛卡尔积组合替换不同位置 | 全字段穷举爆破(如撞库、多参数模糊测试) | 字典1数量 × 字典2数量 × ... |
|
因为我只有一个字典,且正确帐号密码都包含在字典中,这里我直接选择Cluster bomb模式,点击intruder的positions位置我们现在就可以看到我们刚才的那个包,我们选中我们想要使用字典换掉内容的地方,然后全部加上标记
我们再换到intruder的payload,选中payload set 改成2因为我们有两个位置,payload type为simple list
然后再点击Load,我们选中准备好的字典加进去
点击Start attack开始爆破
爆破完之后 我们找到长度最特殊的,这个就是真正爆破成功的
关闭拦截功能,回到暴力破解页面进行验证,发现是正确的
Low等级暴力破解代码分析
为了能更好的读懂代码,我对代码做了中文的注释,接通下来我们可以看看
首先就是接收用户名密码,查询数据库的语句
安全问题1:我们可以清楚的看到 我们后台的php使用的是get方式获得从前台传过来的数据,这样会导致在url中会明文显示username和password
安全问题2: md5现也已被证实是不安全的加密,但在这里,他只是加密过跟数据库比对
安全问题3: sql注入的漏洞,因为他的代码是 直接查询的数据库
$query = "SELECT * FROM `users` WHERE user = '$user' AND password = '$pass';";
这样的话 我们也可以在用户名的位置位入 admin ' -- 使后面的内容注释掉,假如数据库中存在,admin这个用户,就会直接登入成功。
接下来我们看下面的代码
安全漏洞4:用户名枚举
在login failed那里,假如登陆失败,他会提示我们帐号或密码错误,这样我们可以判断我们注入的时候,假如我们的用户名没有猜对,他会显示用户名密码不对,从而被我们利用到信息
2.Medium等级
Medium的爆破是与Low的爆破相同的,这里我们直接看代码的部分
Medium等级暴力破解代码分析
可以看到,在用户名和密码那里,都加了mysqli_real_escape_string来转义特殊的字符,防止被随便sql注入进去,但是这种只是简单的防御,对sql注入的的防御不够完整
安全问题1:我们可以清楚的看到 我们后台的php使用的是get方式获得从前台传过来的数据,这样会导致在url中会明文显示username和password
安全问题2: 只限制了间隔时间,没有设置次数的限制,这种只能限制我们穷举的速度,并不能对我们进行实质性的防御
3.High等级暴力破解
来到high等级,先随便输入几个密码试试,发现还没有输入次数限制,打开burpsuite,burpsuite打开拦截模式
拦截到数据包,发现high等级对比前两个等级已经生成了随机的token,在面对这种数据包的时候我们需要把token换成每次生成的token
我们按下ctrl+i把包发给Intruder,打开intruder 把attacktype改成Pitch Fork
然后把password和token里面的值加上标记
payload还是选择第一个位置,载入字典
因为我们要每次都拿到这个token值,所以我们要建一个资源池,设置一个1
在setting里面add一下token的位置
选中并复制token的值,然后再在payload里面设置第二个payload,不要忘记把第二个payload粘贴进去
点击start attack等待就可以
High等级代码分析
high等级跟medium等级一样,使用mysqli_real_escape_String这个特殊字符转换做了防sql注入 ,还做了防止csrf,在这里每次都验证了token
4.Impossible等级
impossible等级对暴力破解做了非常严格的保护,首先 就是对参数的传递使用了POST而不是Get,修复了前几个等级会在地址拦明文显示的问题
防止csrf的机制,双重token,请求token+会话token
防止sql注入,对传过来的数据进行转译,还使用PDO进行预处理
输错密码锁定15分钟
允许最大输入次数和锁定时间