如何利用暴力攻击破解密码

在过去的30年里,入侵远程计算机系统的工具和技术并没有发生显着变化。 简而言之,在许多情况下,管理员与普通用户的区别只不过是密码的知识。 它听起来不够迷人,事实上它听起来很嘈杂,但在大多数情况下,暴力攻击是通过利用错误的密码管理实践打入系统的最实用和最简单的方法。

实际上,Web应用程序和Web服务很容易被密码暴力攻击所攻陷。之所以出现这种情况,是因为这种类型的软件相对容易访问,数量也很多,同时默认情况下允许远程使用,而且大部分都是自定义的,此外,它们还会随着层出不穷的Web技术而不断变化。在这篇文章中,我们将从实战的角度出发,介绍针对不同类型的Web应用程序的暴力攻击方法。与此同时,我们还将借助现成的免费网络安全工具,如AppBandit攻击代理或某些在线Fuzzer来展示攻击过程。

基本身份验证

自万维网早期开始,基本认证及其一些变体(如摘要认证,NTLM等)就是事实上的认证标准。 基本身份验证足够不安全以用于任何实际目的并不是什么秘密,但这并不妨碍开发人员利用此身份验证方案对路由器管理界面,Web服务,管理界面等进行密码保护。 其广泛传播的原因之一是因为基本身份验证相对比较简单,因为整个身份验证方案会在特殊构造的头部上中继,该头部包含以base64格式编码的用户名和密码。

下面,让我们介绍针对基本身份验证的暴力攻击。为此,我们可以使用AppBandit的Fuzzer或其他在线Fuzzer,只要配置相应的参数就行了。首先,我们需要设置Authorization头部,然后添加基本身份验证信息,当然,这些都是专门针对这个特定任务而构建的。

对于用户名,我们将使用已知帐户的列表。 我们也可以使用来自一些知名数据库的通用字典。 我们将在一秒钟之后继续,但我们会保持这一部分的简单。

对于密码,我们可以使用字典。实际上,AppBandit和Fuzzer不仅可以使用自身的字典,同时,还可以下载并使用安全社区提供的各种字典文件。为此,可以从下拉菜单中添加一个字典项目,然后搜索“password”,即可找到由最常用的密码组成的列表,以及从以往著名的数据泄露事件中收集的实际密码所组成的列表。

确保将最大并行请求数增加到60或更多,并将超时时间减少到5秒,以提高攻击性能。 很快,我们稍后会通过简单地监视响应代码来找到正确的密码,如下面的截图所示。

基于Pin的身份验证

许多应用程序,尤其是移动应用程序会使用一种基于PIN的身份验证方法,即使用4至6位数字代码进行认证。此外,对于那些通过电子邮件或短信发送令牌而进行的双因子身份验证来说,也属于这种类型,因为该方案的实现大都存在安全漏洞。即便如此,人们还是经常误以为PIN提供的低熵是安全的。但是,实际上只要对Pin进行暴力猜解,无论是以顺序方式还是随机方式进行,都可以轻而易举的破解它。

让我们设置针对虚构的JSON服务的攻击。 配置请求以使其被服务视为有效。 在正文中,我们将使用一系列项目来正确编码引脚的发生器。 首先,我们需要JSON编码器来报价。 我们还需要一个格式项目来将值填充到正确的针脚长度。 这对于下一步很有用。

在pad项中包含了一个简单的计数器,例如for循环。计数器从0开始,遍历到9999为止,步长为1。这里之所以使用这个pad项,是因为有效的Pin必须是4位数字。所以,需要用0覆盖所有不足四位的数字。当然,这种方法同样也可以用来处理6位和8位数字的Pin。

根据需要设置攻击选项 – 即增加并发请求数和减少超时。 执行攻击。 与基本认证bruteforce示例不同,我们之前看到,它提供了一种基于状态代码的直接机制来区分有效和无效尝试,这种类型的攻击完全取决于应用程序,因此您需要提出自己的启发式方法。 例如,您可能想要监视内容长度更改或状态码更改,即302重定向可能意味着成功验证。 也可以根据回来花费多少时间对回应进行排序 – 即时间启发式。 这对你来说真的很重要,但在一天结束时它是一样的原则。

上面的配置,也适用于基于表单的身份验证,甚至基本身份验证——唯一不同之处,就是根据具体情况将生成器移动到所需的地方即可,其余部分完全相同。

基于表单的身份验证

不用说,基于表单的身份验证是网络上最常见的身份验证方案。 实际上任何PHP应用程序都会执行一个 – 大部分时间都很糟糕。 如果正确实施,基于表单的身份验证应该对自动化的密码猜测尝试具有弹性,但尽管听起来很简单,但在实际情况下这并不容易,因为存在许多需要特定类型处理的特殊情况。

要设置基于表单的身份验证暴力破解,我们需要遵循基本身份验证示例中的相同步骤。 这次我们不会使用授权标头,但是我们必须按照应用程序的设置来设置参数。 我们可以首先通过AppBandit代理或HTTPView等工具捕获这些信息,这些工具可以直接从您自己的浏览器上运行,无需额外的设置。

在进行暴力破解时,脑子一定要灵光,特别是用户名是电子邮件的时候。例如,与其用大量密码来暴力破解一个账户,不如用一部分最常用的密码来暴力破解多个账户,同时,我们还可以动态生成帐户,就像我们接下来要做的那样。

下面,我们来为用户列表设置一个生成器。首先,我们可以定义一些变量,以提高攻击的可配置性。

正如你所看到的,我们正在使用一些字典(大部分来自seclists)。 我们动态生成电子邮件地址。 实际上,我们可以在同一次攻击中覆盖多个域。

现在让我们从同一个列表中添加前100个更常用的密码。 我们使用另一个来自seclists的字典,如示例中所示。 正如你所看到的,我们可以通过这个获得相当的创意。

 

攻击一旦开始,就需要密切关注任务的运行情况,努力寻找提示登陆成功的线索。当然,对于大多数响应来说,结果都是一样的。对于那些包含有效凭证的请求,可以按照我们前面介绍过的那些方法进行识别。然而,有时候您需要找到自己的识别方法。不过,大多数情况下,使用内置过滤器就足以应付了。例如,您可以过滤包含有效cookie的响应,因为一般来说,找到这样的响应就表示认证成功了。

与身份验证有关注意事项

Web认证系统很有趣,因为它们永远不可能是完美的。 如果他们太安全,那么他们将无法访问。 如果他们太容易访问,他们很可能是不安全的。 因此,在使用上述任何技术破解密码时,需要记住一些事项。

在防范暴力破解方面,最常见防御机制就是帐户锁定,然而,在某些情况下,攻击者可以利用这种机制来发动拒绝服务攻击。例如,假设用户名是可猜测的或顺序的,并设置了帐户锁定。那么,如果我们在生成有效用户名方面具有很高的胜率,这就意味着我们也可以将这些人都锁定在系统之外,即拒绝服务攻击。尽管这种攻击威胁不是很大,但仍不失为一个有效的漏洞。

同时,水平和垂直暴力攻击之间的转换也是一种常见的技术。换句话说,我们可以针对多个帐户测试一个密码,而不是针对单个帐户尝试多个密码,因为我们可以枚举帐户或以高胜率的方式生成它们。

如果某些认证系统来自相同的IP地址,它们会天真地锁定有效的认证尝试。 后来,这些系统被重构为有许多例外,因为它发现IPv4地址空间相对较小,许多客户可能拥有相同的IP地址 – 例如,许多移动和光纤网络实际上都是这样工作的。 攻击者可能能够利用这些网络之一或诱使应用程序认为它们来自例外列表中的网络以绕过帐户锁定限制。

同样,如果身份验证系统根据攻击者的IP地址阻止IP或NETBLOCK,则可能会将蛮力攻击转换为拒绝服务,因为同一网络中的用户将无法登录。再次,这对于移动 网络,因为移动用户不太可能拥有专用的公共IP地址。 由于此类移动应用程序受到特别影响

最后,不要仅仅因为页面上有reCAPTCHA就认为必须使用验证码,相反,很多时候它在那里只是个摆设而已。这是因为,reCAPTCHA或其他CAPTCHA系统通常都是嵌入式的,它们经常因配置错误或代码变化的缘故而不进行相关的检查,这种情况经常发生。

实际上,有时解除身份验证并不起作用,也就是说,虽然看起来用户已注销,但实际会话并未被破坏。这样的话,以前使用的会话可能被攻击者重新使用。然而,这个话题实在有点大,需要单独进行解释。在这里,重点是要知道,有时即使不知道密码也能登录,因为还有其他方法。

总结

攻击者可以通过多种方式来获取成功的密码破解/暴力破解攻击,如前所述,这种攻击非常普遍。 我们还没有看到正在实施的安全系统能够彻底根除这些类型的攻击。 坦率地说,只要我们依靠密码,这是不可能的。 毫无疑问,双因素认证方案明显更安全,但我们也需要承认它们通常是可选的,在某些情况下,它们可以被绕过。

在后续文章中,我们将针对暴力破解攻击方式,介绍一些目前可用的防御机制。

原文:https://secapps.com/blog/2018/03/how-to-make-a-password-cracker

上一篇:如何在未Root的Android设备上解密数据库

下一篇:MikroTik RouterOS中发现了可远程利用的缓冲区溢出漏洞