这通常包括强制使用以下密码
- 最少字符数
- 小写字母和大写字母的混合
- 至少一个特殊字符
虽然单靠计算机很难破解高熵密码,但我们可以利用人类行为的基本知识来利用用户无意中给系统带来的漏洞。
用户通常不会使用随机字符组合来创建一个强密码,而是使用一个他们能记住的密码,并试图将其与密码策略相匹配。例如,如果不允许使用 mypassword,用户可能会尝试 Mypassword1! 或 Myp4$$w0rd 这样的密码。
在政策要求用户定期更改密码的情况下,用户对首选密码进行微小的、可预测的更改也很常见。例如,Mypassword1! 变成 Mypassword1? 或 Mypassword2!。
这种对可能的凭据和可预测模式的了解意味着,**暴力破解攻击往往比简单地遍历每种可能的字符组合要复杂得多,因此也有效得多。**
– 暴力破解并不是简单的遍历,是一种有技巧性,筛选性的遍历
这里就要提到一种字典生成工具,可以根据指定的格式生成字典
用户名枚举
用户名枚举是指攻击者通过观察网站行为的变化来识别给定用户名是否有效。
用户名枚举通常发生在登录页面,例如,当你输入一个有效的用户名但密码不正确时,或者当你在注册表单上输入一个已经被占用的用户名时。这大大减少了暴力登录所需的时间和精力,因为攻击者能够快速生成有效用户名的短名单。
在尝试暴力破解登录页面时,应特别注意以下方面的任何差异:
- 状态码 : 在暴力破解攻击中,绝大多数猜测返回的 HTTP 状态代码都可能是相同的,因为大多数猜测都是错误的。如果猜测返回的状态代码不同,这就充分说明用户名是正确的。网站的最佳做法是无论结果如何,始终返回相同的状态代码,但这种做法并不总是得到遵守。例如,当用户名和密码都正确时,网页可能会进行一个跳转,这时的状态码就是302,说明爆破成功
- 错误信息 :有时,返回的错误信息会有所不同,这取决于是用户名和密码都不正确,还是只有密码不正确。 不同的返回信息,导致返回的数据包长度是不一样的。网站的最佳做法是在两种情况下都使用相同的通用信息,但有时也会出现小的输入错误。只要有一个字符出错,两条信息就会截然不同,即使该字符在呈现的页面上不可见。
- 响应时间 : 如果处理大多数请求的响应时间相似,那么任何偏离响应时间的请求都表明幕后发生了不同的情况。这也表明所猜测的用户名可能是正确的。例如,网站可能只在用户名有效的情况下才检查密码是否正确。这一额外步骤可能会导致响应时间略有增加。这可能很微妙,但攻击者可以通过输入过长的密码,使网站处理时间明显延长,从而使这种延迟更加明显。
存在缺陷的暴力破解保护
从逻辑上讲,暴力破解保护的核心是尽量使程序自动化,降低攻击者尝试登录的速度。
防止暴力破解攻击最常见的两种方法是:
- 如果远程用户尝试登录失败次数过多,则锁定其尝试访问的账户
- 如果远程用户连续尝试登录的次数过多,则封锁其 IP 地址
这两种方法都能提供不同程度的保护,但都不是无懈可击的,尤其是在使用错误逻辑的情况下。、
当登录失败次数过多,ip被屏蔽,如果ip登录成功