在 Hashcat 中执行混合攻击

Kali LinuxBeginner
立即练习

引言

Hashcat 是一个著名且强大的密码恢复工具,广泛用于破解密码哈希。它最灵活的功能之一是混合攻击(hybrid attack),它结合了字典攻击(wordlist attack)的速度和暴力破解(brute-force)或掩码攻击(mask attack)的彻底性。这种方法对于基于常见单词但附加或前置了数字或符号等字符的密码特别有效。

在本实验中,你将学习如何使用 Hashcat 的混合攻击功能。你将探索两种主要的混合模式:字典 + 掩码(wordlist+mask)和掩码 + 字典(mask+wordlist)。在本实验结束时,你将获得设置和执行这些攻击以破解示例密码哈希的实践经验。

区分混合字典 + 掩码与掩码 + 字典

在本步骤中,你将学习 Hashcat 中两种主要混合攻击模式的理论区别。理解这种差异对于为给定的密码模式选择正确的策略至关重要。

混合字典 + 掩码(模式 6)

此模式通过 -a 6 标志指定,它会从你的字典中获取每个单词,并根据定义的掩码为其附加字符。它非常适合用户在基础单词后添加后缀的密码,例如在末尾添加年份或特殊字符。

  • 示例: 如果你的字典包含 password,而你的掩码是 ?d?d,Hashcat 将尝试诸如 password00password01password02 等候选密码,直到 password99

混合掩码 + 字典(模式 7)

此模式通过 -a 7 标志指定,它执行相反的操作。它将掩码定义的字符前置到字典中的每个单词。当用户在基础单词前添加前缀时,此模式非常有用。

  • 示例: 如果你的字典包含 password,而你的掩码是 ?d?d,Hashcat 将尝试诸如 00password01password02password 等候选密码,直到 99password

本步骤不需要任何命令。你的目标是在接下来的步骤中应用它们之前,理解这两个基本概念。

创建示例哈希和基础字典

在本步骤中,你将创建攻击所需的必要文件:一个示例密码哈希和一个简单的字典。所有操作将在 ~/project 目录下执行。

首先,我们需要一个目标哈希来破解。在本实验中,我们将使用 MD5 哈希。假设密码是 labex2024。该字符串的 MD5 哈希是 2d3c839a453c68206911871584a5f70f

创建一个名为 hash.txt 的文件并将哈希保存到其中。

echo "2d3c839a453c68206911871584a5f70f" > ~/project/hash.txt

你可以使用 cat 命令验证文件内容:

cat ~/project/hash.txt

你应该看到以下输出:

2d3c839a453c68206911871584a5f70f

接下来,我们需要一个包含目标密码基础单词的字典。由于密码是 labex2024,基础单词是 labex。让我们创建一个名为 wordlist.txt 的字典文件,其中只包含这个单词。

echo "labex" > ~/project/wordlist.txt

验证你的新字典内容:

cat ~/project/wordlist.txt

输出应该是:

labex

现在你拥有了一个目标哈希和一个基础字典,可以进行攻击了。

运行混合攻击,为单词附加数字

在本步骤中,你将使用字典 + 掩码模式(-a 6)执行一次混合攻击,以破解你创建的哈希。我们的假设是密码由单词 labex 后跟四位数字组成。

我们将使用以下组件构建 hashcat 命令:

  • -m 0: 指定哈希类型,即 MD5。
  • -a 6: 选择混合字典 + 掩码攻击模式。
  • ~/project/hash.txt: 包含我们目标哈希的文件。
  • ~/project/wordlist.txt: 我们的基础字典。
  • ?d?d?d?d: 要附加的掩码。?d 代表一个数字。

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

hashcat -m 0 -a 6 ~/project/hash.txt ~/project/wordlist.txt ?d?d?d?d

Hashcat 将初始化并开始破解过程。你可能会看到关于虚拟化环境中性能的警告,这是正常的。稍后,Hashcat 将找到密码。

输出将类似于此(部分细节可能有所不同):

...
Session..........: hashcat
Status...........: Cracked
Hash.Name........: MD5
Hash.Target......: 2d3c839a453c68206911871584a5f70f
Time.Started.....: ...
Time.Estimated...: 0 secs (0.00ms)
Guess.Base.......: File (~/project/wordlist.txt)
Guess.Mod........: Mask (?d?d?d?d)
Guess.Queue......: 1/1 (100.00%)
Speed.#1.........:  ... H/s (...)
Recovered........: 1/1 (100.00%) Digests
Progress.........: 10000/10000 (100.00%)
Rejected.........: 0/10000 (0.00%)
Restore.Point....: 1/1 (100.00%)
Restore.Sub.#1...: Salt:0 Amplifier:0-1 Iteration:0-1
Candidates.#1....: labex1000 -> labex9999
Hardware.Mon.#1..: Temp: ...

2d3c839a453c68206911871584a5f70f:labex2024

Started: ...
Stopped: ...

Hashcat 已成功破解哈希并找到了密码:labex2024

你可以随时使用 --show 选项查看已破解的密码:

hashcat -m 0 --show ~/project/hash.txt

这将直接显示已破解的哈希 - 密码对:

2d3c839a453c68206911871584a5f70f:labex2024

运行混合攻击,为单词前置数字

现在,让我们尝试另一种混合模式:掩码 + 字典(-a 7)。在本步骤中,你将尝试破解一个新哈希,其模式是前置的。

假设我们的新目标密码是 2024labex。该字符串的 MD5 哈希是 b68137c355d785422120884212515e86

首先,创建一个名为 hash2.txt 的新哈希文件,其中包含这个新哈希。

echo "b68137c355d785422120884212515e86" > ~/project/hash2.txt

对于这种情况,我们需要使用攻击模式 -a 7 将四位数字掩码前置到我们的基础单词。命令结构类似,但攻击模式不同。

运行以下命令:

hashcat -m 0 -a 7 ~/project/hash2.txt ~/project/wordlist.txt ?d?d?d?d

Hashcat 将再次启动。因为我们为这个密码结构选择了正确的攻击模式,它将很快找到密码。

输出将显示已破解的密码:

...
Session..........: hashcat
Status...........: Cracked
...
b68137c355d785422120884212515e86:2024labex
...

你已成功使用掩码 + 字典模式破解了第二个哈希。

和之前一样,你可以使用 --show 选项查看结果:

hashcat -m 0 --show ~/project/hash2.txt

输出:

b68137c355d785422120884212515e86:2024labex

对比两种混合模式的有效性

在最后一个实践步骤中,你将看到当为给定的密码模式使用错误的混合模式时会发生什么。这将突出选择正确攻击策略的重要性。

首先,让我们尝试使用掩码 + 字典(-a 7)模式来破解我们原始的哈希(hash.txt,对应 labex2024)。此模式会前置数字,这对于此密码是不正确的。

hashcat -m 0 -a 7 ~/project/hash.txt ~/project/wordlist.txt ?d?d?d?d

Hashcat 将运行,但它会尝试诸如 0000labex0001labex 等候选密码。由于正确的密码是 labex2024,此攻击将失败。在尝试了所有 10,000 种可能性后,进程将以 Exhausted(耗尽)状态结束,这意味着它尝试了所有组合但均未成功。你可以等待其完成,或按 q 键退出。

接下来,让我们尝试使用字典 + 掩码(-a 6)模式来破解我们的第二个哈希(hash2.txt,对应 2024labex)。此模式会附加数字,这也与此密码不符。

hashcat -m 0 -a 6 ~/project/hash2.txt ~/project/wordlist.txt ?d?d?d?d

同样,此攻击将尝试诸如 labex0000labex0001 等候选密码,并且也会失败,最终以 Exhausted 状态结束。

这个实验证明了一个关键点:混合攻击的成功完全取决于是否正确识别了密码的结构。使用错误的模式将浪费时间和资源,而无法获得正确的密码。

总结

在本实验中,你获得了 Hashcat 强大的混合攻击功能的实践经验。你学会了如何结合使用字典和掩码来高效地破解遵循可预测模式的密码。

具体来说,你学习了:

  • 两种混合攻击模式之间的基本区别:字典 + 掩码(-a 6)用于附加模式,掩码 + 字典(-a 7)用于前置模式。
  • 如何通过创建目标哈希文件和基础字典来准备攻击。
  • 如何执行这两种混合攻击来成功破解密码。
  • 根据猜测的密码结构选择正确攻击模式的关键重要性,因为使用错误的模式将导致失败。

混合攻击是任何密码审计员工具箱中的一项基本技术,它在有针对性的方法和暴力破解方法之间提供了明智的平衡。