简介
描述: 将密码进行逐个推算,直到找出真正的密码为止
分类: BS架构(浏览器)、CS架构(客户端)
工具: burp、Hydra、Bruter等
漏洞挖掘
准备工作:
- 需要强大的字典(包括默认的账号密码)
- 网站登录密码的复杂度(注册页面可看)
- 验证码是否失效
- 行为限制(错误次数、是否禁IP)
- 双因素认证(手机验证、内网IP访问)
- 是否存在TOKEN
挖掘:
- 响应包-响应码不同(可能正确200,错误其他)
- 响应包-响应时长不同(正确账号响应时间长)
- 响应包-内容大小不同
- 响应包-内容信息不同(正确账号、错误账号提示不同)
- 锁定账号(一般正确账号锁定、不存在账号不锁定)
绕过
- 短时间请求过多/用户错误次数过多/封禁IP:添加X-Forwarded-For字段头(可能)/变更IP
- 锁定:输入一次正确账号密码 / 清除浏览器缓存
- 请求包为json格式:尝试多凭证登录(把请求包在浏览器中打开)
修复建议
- 有效的验证码机制
- 强制密码复杂度(8位以上,数字、字母、特殊符号组合)
- 强制用户初次登录,修改密码
- 双因素(短信验证码)
- Token值
- 范围时间内错误次数过多,禁用IP
案例
1、基于无效验证码的暴力破解
- 有的站点验证码可反复使用(不点击就不会刷新/前端生成)
- 还有的站点你截断登录包,然后就可以重放数据包了(发到Repeater、Intruder模块)
以BWAPP的 Broken Auth. - Weak Passwords为例:/bwapp/ba_weak_pwd.php
把登录包发送到Intruder模块,把用户名、密码加入到变量中,选择攻击模式为Cluster bomb(穷举组合)
分别在payload1/2中添加字典
基于错误提示:Invalid credentials!
我们把它加入标志提示
点击start attack进行枚举,结果中有一个没有错误标志,说明可能是正确的用户名及密码
在浏览器上登录test/test,结果提示成功登录。
2、JSON格式的登录
正常登录是酱紫的,一个用户名和一个密码
将单个密码字符替换成字符串数组:中括号包含,密码字段用双引号包裹,每个密码用逗号隔开,最后一个不需要逗号
构造好后发送数据包,发现响应包为302,可能是登录成功后的跳转
复制请求包在浏览器中打开,结果确实是成功登录
3、基于token的暴力破解
1、选择Pitchfork攻击模式(字典一一对应)
2、载荷1选择密码字典;载荷2选择递归搜索
3、勾选Grep-Extract模块
点击重新获取回复,找到新生成token值的位置
4、在Intruder–Options中设置线程数为1、重定向为总是
5、枚举密码即可
4、认证登录
网站出现这样的登录认证
抓包这酱紫的,它格式是(用户名:密码)进行base64编码
以这个为例子,选择Pitchfork攻击模式(字典一一对应)
自定义了sign(3)和sign2(4)参数,
3的payload类型选择:custome iterator 1内容为用户名、分隔符为冒号、2内容为密码、
4比3多了一个编码,把内容编码成base64格式
构造成功