引言
欢迎来到本次关于使用 Hashcat 执行掩码攻击(mask attack)的实验。Hashcat 是一个强大且用途广泛的密码恢复工具,在网络安全领域被广泛用于测试密码强度和恢复丢失的密码。
标准的暴力破解攻击(brute-force attack)通过尝试所有可能的字符组合来猜测密码,这可能非常缓慢。而掩码攻击(mask attack)是一种更智能、更高效的暴力破解攻击类型。当你知道密码的结构信息时,就可以使用掩码攻击,例如密码的长度或特定位置使用的字符类型(例如,“以大写字母开头,以两个数字结尾”)。
在本实验中,你将学习如何使用掩码来定义密码结构,并使用 Hashcat 来破解一个示例 SHA1 哈希值,从而展示这种定向方法的强大和高效。
理解掩码攻击的概念
在本步骤中,你将学习掩码攻击的基本概念。正如引言中所述,这种攻击是暴力破解攻击的一种专门形式。
想象一下,你需要破解一个密码,但你有一些线索:
- 你知道密码正好是 6 个字符长。
- 你知道第一个字符是大写字母。
- 你知道最后两个字符是数字。
标准的暴力破解攻击会浪费时间尝试诸如 "aaaaaa" 或 "123456" 这样的组合。然而,掩码攻击允许你定义一个“掩码”或模板,告诉破解工具只尝试符合你已知模式的组合。对于上面的例子,掩码将指定 [大写字母][任意][任意][任意][数字][数字]。
这极大地减少了可能性数量,使得破解过程显著更快、更有效。在下一步中,你将学习 Hashcat 用于创建这些强大掩码的具体语法。此步骤纯粹是概念性的,不需要任何命令。
学习内置字符集,如 ?l ?u ?d ?s
在本步骤中,你将学习 Hashcat 的内置字符集,它们是掩码的构建块。
Hashcat 使用特殊的占位符,称为“字符集”(charsets),来定义密码掩码中每个位置的字符类型。以下是最常见的内置字符集:
?l: 代表所有小写字母(a到z)。?u: 代表所有大写字母(A到Z)。?d: 代表所有数字(0到9)。?s: 代表所有标准特殊字符(例如!@#$%^&*)。?a: 代表以上所有字符的组合(?l?u?d?s)。
例如,如果我们知道一个密码是 4 个字符长,由一个大写字母、两个小写字母和一个数字组成,那么掩码将是 ?u?l?l?d。这将生成诸如 Pass9、Word1、Test0 等候选密码。
你可以在 Hashcat 的帮助菜单中看到这些定义。在你的终端中运行以下命令来查看与掩码相关的帮助信息:
hashcat --help | grep "?l"
你将看到一个列出内置字符集的区域,这证实了以上信息。
?l | abcdefghijklmnopqrstuvwxyz | Lowercase letters
创建一个已知模式的示例 SHA1 哈希
在本步骤中,你将为将在后续步骤中破解的密码创建一个目标 SHA1 哈希。要执行密码攻击,我们首先需要一个要攻击的哈希。
让我们选择一个符合清晰模式的密码:LabX99!。此密码具有以下结构:
- 第 1 个字符:大写字母(
L) - 第 2 个字符:小写字母(
a) - 第 3 个字符:小写字母(
b) - 第 4 个字符:大写字母(
X) - 第 5 个字符:数字(
9) - 第 6 个字符:数字(
9) - 第 7 个字符:特殊字符(
!)
首先,让我们为这个密码生成 SHA1 哈希。echo 命令中的 -n 标志非常重要,因为它会阻止在字符串末尾添加换行符,否则会改变生成的哈希。
在你的终端中执行此命令:
echo -n "LabX99!" | sha1sum
输出将是 SHA1 哈希后跟一个破折号:
0e6cc6531a1a5545942a38a9339571934219c5b0 -
现在,将此哈希保存到一个名为 target_hash.txt 的文件中。此文件将作为 Hashcat 的输入。
echo "0e6cc6531a1a5545942a38a9339571934219c5b0" > target_hash.txt
你可以使用 cat target_hash.txt 来验证文件是否已正确创建。
构建固定长度密码的掩码攻击命令
在本步骤中,你将根据我们已有的信息构建完整的 Hashcat 命令来执行掩码攻击。
Hashcat 的掩码攻击命令包含几个关键组件:
-m <mode>: 此标志指定哈希类型。每种哈希算法(如 MD5、SHA1、bcrypt)都有一个唯一的模式编号。-a <attack_mode>: 此标志设置攻击模式。对于掩码攻击,模式始终是3。hash_file: 包含要破解的哈希值的文件的路径。mask: 定义密码结构的掩码模式。
首先,我们需要找到 SHA1 的正确模式。你可以通过搜索 Hashcat 的帮助输出来找到它:
hashcat --help | grep "SHA1"
你将看到一个哈希类型列表。标准 SHA1 哈希的模式是 100。
100 | SHA1 | Raw Hash
接下来,让我们为密码 LabX99! 创建掩码。根据我们识别的结构和学习的字符集:
L->?uab->?l?lX->?u99->?d?d!->?s
将它们组合起来,我们的最终掩码是 ?u?l?l?u?d?d?s。
现在我们可以组装完整的命令。我们还将添加 --force 标志,它告诉 Hashcat 即使检测到非最优环境(例如在虚拟机中通过 CPU 运行)也要运行,这对于本次实验是必需的。
最终的命令结构是:hashcat -m 100 -a 3 target_hash.txt ?u?l?l?u?d?d?s --force。我们将在下一步执行它。
执行掩码攻击并验证结果
在本步骤中,你将执行掩码攻击命令,并验证 Hashcat 是否成功破解了密码。
你已经构建好了命令。现在,在你的终端中运行它来开始攻击:
hashcat -m 100 -a 3 target_hash.txt ?u?l?l?u?d?d?s --force
Hashcat 将会启动。它可能会显示一些警告,由于我们使用了 --force,这些警告可以安全地忽略。攻击将开始,并且由于我们的掩码非常具体,它应该会几乎立即完成。输出将显示会话状态,你应该会看到最终状态为 Cracked。
...
Session..........: hashcat
Status...........: Cracked
Hash.Name........: SHA1
Hash.Target......: 0e6cc6531a1a5545942a38a9339571934219c5b0
Time.Started.....: ...
Time.Estimated...: 0 secs (0.00ms)
Guess.Mask.......: ?u?l?l?u?d?d?s [7]
Guess.Queue......: 1/1 (100.00%)
Speed.#1.........: 192.9 kH/s (0.01ms) @ Accel:128 Loops:1 Thr:1 Vec:8
Recovered........: 1/1 (100.00%) Digests
Progress.........: 11881376/11881376 (100.00%)
Rejected.........: 0/11881376 (0.00%)
Restore.Point....: 456976/456976 (100.00%)
Restore.Sub.#1...: Salt:0 Amplifier:0-1
Candidates.#1....: LuvX98! -> LuvX99#
Hardware.Mon.#1..: Temp: 46c
...
一旦密码被破解,Hashcat 会将其保存到一个名为“potfile”的文件中(hashcat.potfile)。要查看破解的密码,你可以使用 --show 标志和原始命令参数。
运行此命令来显示结果:
hashcat -m 100 target_hash.txt --show
输出将显示哈希值和破解的明文密码,它们之间用冒号分隔:
0e6cc6531a1a5545942a38a9339571934219c5b0:LabX99!
恭喜你,你已成功执行了一次掩码攻击!
总结
在本实验中,你成功使用 Hashcat 执行了一次暴力掩码攻击。
你已经学会了如何:
- 理解掩码攻击的核心概念,将其作为一种有针对性的暴力破解方法。
- 使用 Hashcat 内置的字符集(
?l、?u、?d、?s)来定义密码的结构。 - 为目标密码生成 SHA1 哈希值。
- 构建一个完整的 Hashcat 命令,包含正确的哈希模式、攻击模式和掩码。
- 执行攻击并通过
--show选项查看破解的密码。
掩码攻击是密码破解和安全审计中的一项基本技术。它们展示了即使只有少量关于密码模式的信息,也能极大地减少破解它所需的时间和精力。


