介绍
Hashcat 是一个世界知名的密码恢复工具,能够使用各种攻击方法来破解密码。其中最基本的技术之一是字典攻击,在这种攻击中,工具会快速地将一个潜在密码列表(即“字典”或“单词列表”)针对目标密码哈希进行测试。
在本实验中,你将扮演一名安全分析师,了解密码的脆弱性。你将学习如何使用 Hashcat 对一个示例 MD5 哈希执行基本的字典攻击。这种实践经验将展示为什么使用常见和简单的密码会带来重大的安全风险。
在本实验结束时,你将能够:
- 生成一个 MD5 哈希。
- 使用标准的单词列表进行攻击。
- 使用 Hashcat 执行字典攻击。
- 查看破解出的密码。
让我们开始吧!
创建一个示例 MD5 哈希文件
在此步骤中,我们将创建攻击的目标。要执行密码攻击,你首先需要一个密码哈希。我们将为简单密码 "password123" 生成一个 MD5 哈希,并将其保存到一个文件中。MD5 是一种广泛使用但现在不安全的哈希算法,因此它非常适合作为本次教学练习的示例。
首先,请确保你位于 ~/project 目录中。我们将使用 echo -n 命令来输出我们的密码字符串。-n 标志至关重要,因为它能阻止 echo 在末尾添加换行符,否则会改变生成的哈希值。
然后,我们将此输出通过管道 | 传递给 md5sum 命令,该命令用于计算 MD5 哈希。最后,我们将结果通过管道传递给 awk '{print $1}' 以仅提取哈希值本身,并将输出重定向 > 到一个名为 myhashes.txt 的文件中。
在你的终端中执行以下命令:
echo -n "password123" | md5sum | awk '{print $1}' > myhashes.txt
现在,让我们验证文件是否已正确创建并包含哈希值。使用 cat 命令显示其内容:
cat myhashes.txt
你应该会看到以下输出,这是 "password123" 的 MD5 哈希:
482c811da5d5b4bc6d497ffa98491e38
你现在拥有一个包含我们将要尝试破解的哈希值的文件。
在 Kali 中定位 rockyou.txt 单词列表
在此步骤中,我们将确定字典攻击所用的单词列表。单词列表就是一个文本文件,其中包含大量潜在密码,每行一个。rockyou.txt 单词列表是最著名和最常用的列表之一,其中包含从 2009 年数据泄露事件中泄露的超过 1400 万个真实密码。
为了方便你,实验设置脚本已将 rockyou.txt 的副本放置在你的当前工作目录 ~/project 中。
让我们确认它的存在并快速查看其内容。使用 ls -lh 命令列出目录中的文件并查看单词列表的大小:
ls -lh
你应该会在输出中看到 rockyou.txt 以及你的 myhashes.txt 文件。注意它的文件大小;这是一个相当大的文件。
total 134M
-rw-r--r-- 1 labex labex 33 Dec 5 12:00 myhashes.txt
-rw-r--r-- 1 labex labex 134M Jun 11 2021 rockyou.txt
要一窥单词列表的样貌,你可以使用 head 命令查看文件的前 10 行:
head rockyou.txt
输出将显示列表中的前 10 个密码:
123456
12345
123456789
password
iloveyou
12345678
1234567
111111
123123
qwerty
现在我们有了目标哈希和单词列表,我们已准备好构建攻击命令。
构建 MD5 的字典攻击命令
在此步骤中,我们将学习如何构建用于字典攻击的 hashcat 命令。理解命令的组成部分是有效使用该工具的关键。我们暂时不执行命令,只进行组装。
用于字典攻击的基本 hashcat 命令结构如下:
hashcat [options] <hash-file> <wordlist-file>
让我们分解一下我们将使用的具体选项:
-a 0: 这指定了攻击模式。模式0是“Straight”(直接)攻击,这是标准的字典攻击。Hashcat 将遍历提供的单词列表并尝试每个密码。-m 0: 这指定了哈希类型。Hashcat 支持数百种哈希类型,每种都有一个唯一的代码。MD5 的代码是0。你可以通过运行hashcat --help来查找完整列表。myhashes.txt: 这是选项后的第一个参数,代表包含我们想要破解的哈希值的文件。rockyou.txt: 这是第二个参数,代表用于攻击的单词列表文件。
将它们组合在一起,完整的命令是:
hashcat -a 0 -m 0 myhashes.txt rockyou.txt
此命令告诉 Hashcat 对 myhashes.txt 中找到的 MD5 哈希(-m 0)执行字典攻击(-a 0),使用 rockyou.txt 中的密码。
在下一步中,我们将执行此命令。
执行样本哈希攻击
在此步骤中,我们将最终执行我们构建的命令并启动攻击。Hashcat 将从 myhashes.txt 读取哈希,并将其与 rockyou.txt 中每个密码的 MD5 哈希进行比较,直到找到匹配项。
在你的终端中运行以下命令:
hashcat -a 0 -m 0 myhashes.txt rockyou.txt
Hashcat 将开始运行。你可能会看到一些警告,这很正常。然后它会显示一个定期更新的状态屏幕。由于 "password123" 是一个非常常见的密码并且包含在 rockyou.txt 中,因此破解过程应该非常快。
输出将类似于此(某些细节可能有所不同):
hashcat (v6.2.6) starting
...
Session..........: hashcat
Status...........: Running
Hash.Name........: MD5
Hash.Target......: 482c811da5d5b4bc6d497ffa98491e38
Time.Started.....: ...
Time.Estimated...: ...
Guess.Base.......: File (rockyou.txt)
Guess.Queue......: 1/1 (100.00%)
Speed.#1.........: ... H/s (..., p:..., r:...)
...
Progress.........: 14344392/14344392 (100.00%)
Rejected.........: 0/14344392 (0.00%)
Restore.Point....: 14344392/14344392 (100.00%)
Restore.Sub.#1...: Salt:0 Amplifier:0-1 Iteration:0-1
Candidates.#1....: $HEX[50617373776f7264] -> zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
使用 --show 标志查看破解的密码
在此步骤中,你将学习如何在不重新运行攻击的情况下查看成功攻击的结果。Hashcat 提供了一种使用 --show 标志的便捷方法。此命令会检查 potfile 中是否存在你输入文件中的任何哈希,并在已破解的情况下显示相应的明文密码。
要显示 myhashes.txt 中哈希的破解密码,请运行以下命令:
hashcat -m 0 --show myhashes.txt
仍然需要 -m 0,以便 Hashcat 知道要查找哪种类型的哈希。输出将简洁明了,显示哈希及其破解的密码,用冒号分隔:
482c811da5d5b4bc6d497ffa98491e38:password123
为了进一步了解此结果的存储位置,你可以直接查看 potfile 的内容。默认位置是 ~/.local/share/hashcat/hashcat.potfile。使用 cat 查看它:
cat ~/.local/share/hashcat/hashcat.potfile
你将在那里看到相同的哈希和密码对。未来任何攻击都会将新的破解密码添加到此文件中。
482c811da5d5b4bc6d497ffa98491e38:password123
你已成功破解 MD5 哈希并找回了原始密码!
总结
恭喜你!你已成功使用 Hashcat 执行了基础的字典攻击。
在本实验中,你学习了用于教育目的的密码破解的基本工作流程。你首先创建了一个目标 MD5 哈希,然后使用了常见的 rockyou.txt 单词列表。你构建并执行了一个 hashcat 命令,指定了正确的攻击模式和哈希类型。最后,你使用 --show 标志查看了破解的密码,确认了攻击的成功。
这个练习突显了使用强壮、独特且复杂的密码的重要性。像“password123”这样在常用单词列表中找到的密码,可以在几秒钟内被破解。为了保护你的账户,请务必使用长、随机且不易猜测的密码。


