Burte Force (pikachu)
从来没有哪个时代的黑客像今天一样热衷于猜解密码 — 奥斯特洛夫斯基
“暴力破解”是一攻击具手段,在web攻击中,一般会使用这种手段对应用系统的认证信息进行获取。 其过程就是使用大量的认证信息在认证接口进行尝试登录,直到得到正确的结果。 为了提高效率,暴力破解一般会使用带有字典的工具来进行自动化操作。
理论上来说,大多数系统都是可以被暴力破解的,只要攻击者有足够强大的计算能力和时间,所以断定一个系统是否存在暴力破解漏洞,其条件也不是绝对的。 我们说一个web应用系统存在暴力破解漏洞,一般是指该web应用系统没有采用或者采用了比较弱的认证安全策略,导致其被暴力破解的“可能性”变的比较高。 这里的认证安全策略, 包括:
1.是否要求用户设置复杂的密码;
2.是否每次认证都使用安全的验证码(想想你买火车票时输的验证码~)或者手机otp;
3.是否对尝试登录的行为进行判断和限制(如:连续5次错误登录,进行账号锁定或IP地址锁定等);
4.是否采用了双因素认证;
...等等。
暴力破解攻击概述
连续尝试 + 字典 + 自动化
暴力破解攻击概述-字典(略)
暴力破解漏洞测试流程
1.确认登录接口的脆弱性
确认目标是否存在暴力破解的漏洞。(确认暴力破解的“可能性”)
2.对字典进行优化
根据实际情况对字典进行优化,提高爆破过程的效率。
3.工具自动化操作
配置自动化工具(比如:线程、超时间、重试次数等),进行自动化操作
暴力破解漏洞测试流程-字典优化技巧
技巧一:根据注册提示信息进行优化
技巧二:爆破后台,系统的管理员往往是admin/administrator/root的几率较高
基于表单的暴力破解
暴力破解的绕过和防范( 验证码&Token )
一般用验证码来做:登录暴力破解、防止机器恶意注册 。一定程度上,验证码可以防止暴力破解。
经过测试验证查看一下是否存在 “验证码漏洞”`<p> username or password is not exists~</p>`
<?php session_start(); include_once 'function.php'; //$_SESSION['vcode']=vcode(100,40,30,4); $_SESSION['vcode']=vcodex(); //验证码绕过 on server 这里其实还是有一个问题,就是服务端将验证码字符串以明文COOKIE的方式给了前端,那验证码还有什么鸟意义。。。 setcookie('bf[vcode]',$_SESSION['vcode']); ?>
进行简单的 “弱口令”暴力破解
username=§asad§&password=§ss125§ &vcode=4QK22 &submit=Login
利用自己的 “密码字典 ”,然后点击 Start attack 进行 payload 攻击
**注意:所选 密码字典路径 最好不要包含中文!!!**
不安全的验证码 - on client 常见问题
- 使用前端JS实现验证码(纸老虎);
- 将验证码在cookie中泄露,容易被获取;
- 将验证码在前端代码中泄露,容易被获取
不安全验证码 - on server 常见问题
- 验证码在后台不过期,导致可以长期被使用;
- 验证码校验不严格,逻辑出现问题;
- 验证码设计的太过简单和有规律,容易被猜解
防暴力破解的措施总结
- 设计安全的验证码(安全的流程 + 复杂而又可用的图形);
- 对认证错误的提交进行计数并给出限制,比如连续5次密码错误,锁定2小时;
- 必要的情况下,使用双因素认证
token对于防暴力破解的意义
function set_token(){
if(isset($_SESSION['token'])){
unset($_SESSION['token']);
}
$_SESSION['token'] = str_replace('·','',uniqid(mt_rand(10000,99999),true));
}
一般做法:将 token 以 "type= ‘hidden’ " 的形式输出在表单中;在提交的认证的时候一起提交,并在后台对其进行校验。
但,由于其 token值输出在了前端源码中,容易被获取,因此也就失去了防暴力破解的意义。一般 Token 在防止
CSRF 上会有比较好的功效。