使用 Hashcat Brain 进行分布式破解

Kali LinuxBeginner
立即练习

引言

Hashcat 是一个世界知名的密码恢复工具,以其速度和多功能性而闻名。在执行大规模密码破解时,通常会使用多个系统来攻击同一份哈希列表。这种分布式方法可能导致效率低下,因为不同的系统可能会浪费时间尝试相同的密码候选。

为了解决这个问题,Hashcat 推出了“Brain”功能。Hashcat Brain 充当一个中央服务器,记录所有已尝试过的密码候选。在客户端尝试密码之前,它会查询 Brain。如果该密码之前已被尝试过,客户端将跳过它,从而节省宝贵的时间和资源。

在本实验中,你将学习如何:

  • 启动一个 Hashcat Brain 服务器。
  • 将一个 Hashcat 客户端连接到服务器。
  • 运行密码攻击并观察 Brain 如何防止重复工作。

理解 Hashcat Brain 的概念

在此步骤中,我们将简要介绍 Hashcat Brain 的核心概念以及它旨在解决的问题。此步骤纯粹是概念性的,不需要任何命令。

在典型的密码破解场景中,你有一个哈希列表和一个潜在密码列表(字典)。Hashcat 会尝试字典中的每个密码来破解哈希。现在,想象一下你有两台独立的计算机(或客户端)在处理同一任务。

问题: 在没有协调的情况下,客户端 A 和客户端 B 都可能在不同时间尝试完全相同的密码,例如“123456”。这是计算能力的浪费,因为工作被重复了。

解决方案(Hashcat Brain): Hashcat Brain 充当一个智能的中央服务器。工作流程如下:

  1. 一个客户端(例如,客户端 A)想要尝试密码“123456”。
  2. 它首先向 Brain 服务器发送一个请求:“‘123456’之前是否已被尝试过?”
  3. Brain 服务器会检查其数据库。如果是第一次,它会回复:“不,尚未尝试过。”
  4. 客户端 A 继续测试该密码。完成后,它会通知 Brain 服务器:“我现在已经测试过‘123456’了。”Brain 服务器会记录下来。
  5. 稍后,如果客户端 B 想要尝试“123456”,它会询问 Brain 服务器。服务器现在会回复:“是的,已被尝试过。”
  6. 客户端 B 会立即跳过此密码,并继续尝试下一个,从而节省时间和电力。

这种机制确保了整个分布式网络中的每个密码候选都只被测试一次,从而极大地提高了大规模攻击的效率。

启动 Hashcat Brain 服务器

在此步骤中,你将启动 Hashcat Brain 服务器。该服务器将监听来自 Hashcat 客户端的连接,并管理已尝试密码的数据库。

在本实验中,我们将在同一台机器上运行服务器和客户端,但它们将通过网络进行通信,就像它们在不同的系统上一样。

启动服务器的命令是 hashcat 加上 --brain-server 标志。我们还将指定一个监听端口。为了安全起见,Hashcat 可以自动生成服务器的密码。

首先,让我们在项目文件夹内创建一个用于存放 brain 文件的目录。

mkdir -p ~/project/brain

现在,在你的终端中运行以下命令来启动服务器。它将监听端口 7890,并将数据存储在 ~/project/brain/ 目录中。

注意: 此命令将占用你当前的终端。对于后续步骤,你需要通过点击终端面板中的 + 图标来打开一个新的终端标签页

hashcat --brain-server --brain-port 7890 --brain-session-path ~/project/brain/

运行命令后,你将看到指示服务器正在运行的输出。请密切关注显示 Password..: 的那一行,因为这是客户端连接所需的自动生成的密码。

Starting brain server on 0.0.0.0:7890...

Password..: 82b5d1a3e... (a long hex string)

Accepting clients...

保持此终端运行。不要关闭它。为后续步骤打开一个新的终端。

获取 Brain 服务器密码

在此步骤中,你将学习如何从会话文件中检索 Brain 服务器的密码。虽然启动服务器时密码已在终端中显示,但它也存储在文件中以便于访问,这在自动化环境中非常有用。

会话文件的默认名称是 hashcat.brain。由于我们使用 --brain-session-path 指定了自定义路径,因此我们的文件位于 ~/project/brain/hashcat.brain

在你的新终端标签页中,使用 cat 命令显示此文件的内容。此内容即为服务器密码。

cat ~/project/brain/hashcat.brain

输出将是一长串十六进制字符,这就是密码。

82b5d1a3e4c9a0f7d6b3c1a9f8e7d6c5b4a3f2e1d0c9b8a7f6e5d4c3b2a1f0e9

任何想要连接到你的 Brain 服务器的客户端都需要此密码。在接下来的步骤中,我们将使用一个命令直接从文件中读取此密码,以避免复制粘贴错误。

配置 Hashcat 客户端连接到 Brain

在此步骤中,你将配置一个 Hashcat 客户端以使用 Brain 服务器。这通过在标准的 hashcat 命令中添加几个 --brain-* 选项来完成。

我们将运行一个“试运行”(dry-run)命令来测试连接。Hashcat 中的 --show 选项用于显示先前破解的哈希,但当与 brain 客户端选项结合使用时,它是一种在不启动完整攻击的情况下验证连接的良好方式。

所需的客户端选项包括:

  • --brain-client: 告知 Hashcat 以客户端模式运行。
  • --brain-host: 服务器的 IP 地址。我们将使用 127.0.0.1,因为服务器在同一台机器上。
  • --brain-port: 服务器正在监听的端口,即 7890
  • --brain-password: 服务器的密码。我们可以使用命令替换 $(cat ...) 直接从文件中读取它。

在你的新终端标签页中执行以下命令:

hashcat --show -m 0 ~/project/hashes.txt --brain-client --brain-host=127.0.0.1 --brain-port=7890 --brain-password=$(cat ~/project/brain/hashcat.brain)

此命令在客户端终端中不会产生太多输出。但是,如果你切换回你的第一个终端标签页(运行服务器的那个),你应该会看到一行新的显示 Client connected from 127.0.0.1。这证实了客户端已成功连接到服务器。

## 在服务器终端中
Accepting clients...
Client connected from 127.0.0.1

这确认了你的客户端配置是正确的。

运行攻击并观察 Brain 通信

在此步骤中,你将执行字典攻击并观察 Hashcat Brain 的运行。我们将使用为你准备好的 hashes.txtwordlist.txt 文件。

首先,运行攻击。该命令是一个标准的字典攻击(-a 0),用于 MD5 哈希(-m 0),并添加了 brain 客户端选项。

在你的客户端终端(第二个标签页)中执行此操作:

hashcat -m 0 -a 0 ~/project/hashes.txt ~/project/wordlist.txt --brain-client --brain-host=127.0.0.1 --brain-port=7890 --brain-password=$(cat ~/project/brain/hashcat.brain)

攻击将开始运行,你将看到它很快找到密码。

...
5f4dcc3b5aa765d61d8327deb882cf99:password
...
Session..........: hashcat
Status...........: Cracked
...

现在,这是重要部分。再次运行完全相同的命令。

hashcat -m 0 -a 0 ~/project/hashes.txt ~/project/wordlist.txt --brain-client --brain-host=127.0.0.1 --brain-port=7890 --brain-password=$(cat ~/project/brain/hashcat.brain)

观察这次的输出。攻击应该几乎立即完成。注意 Status 行。

...
Session..........: hashcat
Status...........: Exhausted
...

状态为 Exhausted 是因为 Brain 客户端询问了服务器 wordlist.txt 中的每个密码,服务器回复说:“是的,这些都已经被尝试过了。”客户端随后知道没有工作要做,并立即退出。这展示了 Hashcat Brain 的强大和效率。

总结

在本实验中,你成功探索了 Hashcat Brain,这是优化分布式密码破解操作的一项强大功能。

你已经学会了:

  • Hashcat Brain 的核心概念以及它如何防止重复工作。
  • 如何启动 Hashcat Brain 服务器并让它生成一个安全的密码。
  • 如何定位服务器的会话文件以检索密码。
  • 如何使用必要的标志配置 Hashcat 客户端以连接到 Brain。
  • 如何运行攻击并观察 Brain 的运行,了解它是如何智能地跳过先前尝试过的密码的。

通过掌握 Hashcat Brain,你可以显著提高任何大规模或长期运行的密码恢复活动的效率,从而节省时间和计算资源。