在 Hashcat 中执行组合攻击

Kali LinuxBeginner
立即练习

引言

在本实验中,你将使用 Hashcat(一个强大且多功能的密码恢复工具)来探索一种特定的密码破解技术,即组合攻击(combinator attack)。组合攻击是一种将两个独立的字典(wordlists)组合起来生成密码候选的方法。例如,如果一个列表包含 "password",另一个列表包含 "123",那么攻击将测试 "password123" 这个组合。

这种方法对于由两个单词拼接而成,或者由一个单词加上数字或符号序列组成的密码特别有效。在本实验中,你将学习如何准备字典,构建合适的 Hashcat 命令,针对示例哈希(hash)执行攻击,并验证结果。

理解组合攻击概念

在本步骤中,你将学习 Hashcat 中组合攻击的核心概念。此攻击模式由攻击模式 -a 1 指定。它通过从第一个字典中取一个基础单词,并附加第二个字典中的一个单词来生成新的候选密码。这个过程会针对两个列表中的每个单词重复进行。

例如,如果你有两个列表:

  • wordlist1.txt: admin, user
  • wordlist2.txt: 123, !

组合攻击将生成以下候选密码:admin123, admin!, user123, user!.

这种方法在不需要单个庞大的字典文件的情况下,极大地扩展了潜在的密码空间。让我们开始确认 Hashcat 帮助菜单中的攻击模式。

执行以下命令来过滤帮助输出,以获取有关组合攻击的信息:

hashcat --help | grep "Combinator"

你应该会在输出中看到一行明确提到组合攻击模式及其对应的数字。

-a, --attack-mode         |      ## | Attack-mode
...
                          |      1 | Combinator
...

这证实了 -a 1 是组合攻击的正确标志。

为攻击创建两个独立的字典

在本步骤中,你将创建将在组合攻击中使用的两个字典。在本实验中,我们将创建两个小型自定义字典。在实际场景中,这些字典会大得多,包含更多常用词、名称和模式。

我们的目标密码是常用词和数字序列的组合。我们将把单词部分放在 wordlist1.txt 中,数字部分放在 wordlist2.txt 中。

首先,使用 echo 命令和 -e 标志(用于处理换行符 \n)创建 wordlist1.txt,其中包含一些潜在的基础单词:

echo -e "admin\nuser\npassword\nguest" > wordlist1.txt

接下来,创建 wordlist2.txt,其中包含一些常用的数字后缀:

echo -e "2024\n!@#\n123\nxyz" > wordlist2.txt

现在,使用 cat 命令验证两个文件的内容,以确保它们已正确创建。

检查第一个字典:

cat wordlist1.txt

预期输出:

admin
user
password
guest

检查第二个字典:

cat wordlist2.txt

预期输出:

2024
!@#
123
xyz

有了这两个字典,Hashcat 现在就能够形成候选密码 password123

使用两个字典构建组合攻击命令

在本步骤中,你将构建完整的 Hashcat 组合攻击命令。在执行命令之前,理解命令的每个部分至关重要。

组合攻击的通用语法是:hashcat [options] <hash-file> <wordlist1> <wordlist2>

以下是我们即将使用的命令的详细说明:

  • hashcat: 可执行程序。
  • -m 0: 这指定了哈希类型。模式 0 对应 MD5。
  • -a 1: 这将攻击模式设置为 1,即组合攻击。
  • hash.txt: 这是包含我们想要破解的哈希的文件。它在实验设置过程中已为你创建。
  • wordlist1.txt: 第一个字典,包含候选密码的左侧部分。
  • wordlist2.txt: 第二个字典,包含候选密码的右侧部分。

在运行完整攻击之前,使用 --show 标志是一个好习惯。此标志告诉 Hashcat 显示已破解并存储在 potfile 中的任何哈希,而无需启动新的破解会话。

让我们使用 --show 运行命令,以查看我们的目标哈希尚未被破解:

hashcat -m 0 -a 1 hash.txt wordlist1.txt wordlist2.txt --show

由于这是我们第一次运行它,该命令将不会产生任何输出,这是预期的结果。这证实了我们已准备好继续进行实际攻击。

执行攻击并观察组合结果

现在是时候在没有 --show 标志的情况下执行组合攻击了。这将启动破解过程。Hashcat 将读取两个字典,将它们组合起来,对结果进行哈希处理,并与 hash.txt 中的目标哈希进行比较。

在你的终端中运行以下命令:

hashcat -m 0 -a 1 hash.txt wordlist1.txt wordlist2.txt

Hashcat 将初始化并显示一个状态屏幕。由于我们的字典非常小,该过程将几乎立即完成。输出将显示哈希已被破解。

你将看到类似以下的输出(速度和时间等详细信息可能会有所不同):

hashcat (v6.2.6) starting

...

Session..........: hashcat
Status...........: Cracked
Hash.Name........: MD5
Hash.Target......: e10adc3949ba59abbe56e057f20f883e
Time.Started.....: ...
Time.Estimated...: 0 secs (0.00ms)
Guess.Base.......: File (wordlist1.txt), File (wordlist2.txt)
Guess.Queue......: 2/2 (100.00%)
Speed.#*.........: ... H/s (...)
Recovered........: 1/1 (100.00%) Digests
Progress.........: 16/16 (100.00%)
Rejected.........: 0/16 (0.00%)
Restore.Point....: 4/4 (100.00%)
Restore.Sub.#*...: 4/4 (100.00%)
Candidates.#*....: 16

Cracked Hashes: 1/1
e10adc3949ba59abbe56e057f20f883e:password123

...
All hashes have been recovered

Started: ...
Stopped: ...

e10adc3949ba59abbe56e057f20f883e:password123 这一行清楚地显示了原始哈希及其破解出的明文密码。这证实了我们的攻击是成功的。

查看 Potfile 中的组合密码结果

在本步骤中,你将查看 Hashcat 的 potfile。potfile (hashcat.potfile) 是一个纯文本文件,Hashcat 会自动将成功破解的哈希及其对应的密码存储在此文件中。这是一个非常有用的功能,可以防止你浪费时间重新破解已经解决的哈希。

默认情况下,potfile 位于 ~/.local/share/hashcat/ 目录中。

使用 cat 命令查看 potfile 的内容,并确认我们的结果已保存:

cat ~/.local/share/hashcat/hashcat.potfile

输出将显示哈希及其破解出的密码,两者之间用冒号分隔:

e10adc3949ba59abbe56e057f20f883e:password123

这证实了攻击是成功的,并且结果现在已永久存储在 potfile 中。如果你再次运行相同的攻击,Hashcat 将使用 --show 标志从该文件中即时检索结果,而不是重新运行整个破解过程。

总结

在本实验中,你已成功使用 Hashcat 执行了组合攻击。

你学会了如何:

  • 理解 Hashcat 中组合攻击 (-a 1) 的概念。
  • 创建两个独立的字典,作为密码候选的基础。
  • 构建正确的 Hashcat 命令,指定攻击模式、哈希类型和输入文件。
  • 执行攻击,通过组合单词和数字序列成功破解 MD5 哈希。
  • 定位并查看 hashcat.potfile,了解成功破解的存储结果。

组合攻击是密码破解中的一项基本技术,在处理遵循可预测连接模式的密码时尤其有用。