在 Hashcat 中执行暴力掩码攻击

Kali LinuxBeginner
立即练习

引言

欢迎来到本次关于使用 Hashcat 执行掩码攻击(mask attack)的实验。Hashcat 是一个强大且用途广泛的密码恢复工具,在网络安全领域被广泛用于测试密码强度和恢复丢失的密码。

标准的暴力破解攻击(brute-force attack)通过尝试所有可能的字符组合来猜测密码,这可能非常缓慢。而**掩码攻击(mask attack)**是一种更智能、更高效的暴力破解攻击类型。当你知道密码的结构信息时,就可以使用掩码攻击,例如密码的长度或特定位置使用的字符类型(例如,“以大写字母开头,以两个数字结尾”)。

在本实验中,你将学习如何使用掩码来定义密码结构,并使用 Hashcat 来破解一个示例 SHA1 哈希值,从而展示这种定向方法的强大和高效。

理解掩码攻击的概念

在本步骤中,你将学习掩码攻击的基本概念。正如引言中所述,这种攻击是暴力破解攻击的一种专门形式。

想象一下,你需要破解一个密码,但你有一些线索:

  • 你知道密码正好是 6 个字符长。
  • 你知道第一个字符是大写字母。
  • 你知道最后两个字符是数字。

标准的暴力破解攻击会浪费时间尝试诸如 "aaaaaa" 或 "123456" 这样的组合。然而,掩码攻击允许你定义一个“掩码”或模板,告诉破解工具只尝试符合你已知模式的组合。对于上面的例子,掩码将指定 [大写字母][任意][任意][任意][数字][数字]

这极大地减少了可能性数量,使得破解过程显著更快、更有效。在下一步中,你将学习 Hashcat 用于创建这些强大掩码的具体语法。此步骤纯粹是概念性的,不需要任何命令。

学习内置字符集,如 ?l ?u ?d ?s

在本步骤中,你将学习 Hashcat 的内置字符集,它们是掩码的构建块。

Hashcat 使用特殊的占位符,称为“字符集”(charsets),来定义密码掩码中每个位置的字符类型。以下是最常见的内置字符集:

  • ?l: 代表所有小写字母(az)。
  • ?u: 代表所有大写字母(AZ)。
  • ?d: 代表所有数字(09)。
  • ?s: 代表所有标准特殊字符(例如 !@#$%^&*)。
  • ?a: 代表以上所有字符的组合(?l?u?d?s)。

例如,如果我们知道一个密码是 4 个字符长,由一个大写字母、两个小写字母和一个数字组成,那么掩码将是 ?u?l?l?d。这将生成诸如 Pass9Word1Test0 等候选密码。

你可以在 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 -> ?u
  • ab -> ?l?l
  • X -> ?u
  • 99 -> ?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 选项查看破解的密码。

掩码攻击是密码破解和安全审计中的一项基本技术。它们展示了即使只有少量关于密码模式的信息,也能极大地减少破解它所需的时间和精力。