理解 Hashcat 命令结构

Kali LinuxBeginner
立即练习

引言

Hashcat 是一个强大且功能多样的密码恢复工具。要有效地使用它,你必须首先理解其命令行结构。一个 Hashcat 命令由几个关键组件组成,这些组件精确地告诉程序要破解什么以及如何破解。

在本实验中,你将学习 Hashcat 命令的基本结构。我们将一步步构建一个完整、可用的命令,涵盖五个基本组件:可执行文件、哈希类型、攻击模式、输入哈希文件和输入字典文件。到最后,你将能够为基于字典的攻击构建基本的 Hashcat 命令。

识别 Hashcat 命令的核心组件

在此步骤中,我们将识别 Hashcat 命令的基本语法。理解此结构是使用该工具的第一步。

一个典型的 Hashcat 命令遵循以下模式:

hashcat [options] hashfile [wordlist/mask]

让我们分解这些组件:

  • hashcat: 这是可执行程序本身的名称。
  • [options]: 这些是修改程序行为的标志。最重要的选项是用于哈希类型的 -m 和用于攻击模式的 -a,我们将在接下来的步骤中介绍。
  • hashfile: 这是包含你想要破解的哈希或哈希的文件路径。
  • [wordlist/mask]: 这是输入文件的路径,例如用于字典攻击的字典文件,或用于暴力破解攻击的掩码模式。

首先,让我们查看内置的帮助菜单,以了解该工具。此命令列出了所有可用的选项和信息。

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

hashcat --help

你将看到一个详细说明 Hashcat 所有功能的长输出。我们将在后续步骤中参考这些信息。

hashcat (v6.2.6) starting in help mode

Usage: hashcat [options]... hash|hashfile|hccapxfile [dictionary|mask|directory]...

...
-a,  --attack-mode              | Num    | Attack-mode, see references below.
-m,  --hash-type                | Num    | Hash-type, see references below.
...

现在我们已经理解了基本结构,可以开始构建我们的命令了。

使用 -m 标志指定哈希类型

在此步骤中,你将学习如何指定目标哈希类型。Hashcat 支持数百种不同的哈希算法,你必须告诉它你正在尝试破解哪一种。这是通过使用 -m 标志后跟一个数字代码来完成的。

我们的实验环境准备了一个名为 hashes.txt 的文件,其中包含一个 MD5 哈希。要查找 MD5 的正确代码,你可以搜索 hashcat --help 的输出。

使用 grep 命令过滤帮助文本中的“MD5”:

hashcat --help | grep MD5

输出将显示所有与 MD5 相关的哈希类型及其对应的代码。

      0 | MD5                                            | Raw Hash, Salted and/or Iterated
   10 | md5($pass.$salt)                                 | Raw Hash, Salted and/or Iterated
   20 | md5($salt.$pass)                                 | Raw Hash, Salted and/or Iterated
...

如你所见,标准 MD5 哈希的代码是 0。现在我们可以将其添加到我们的命令中。命令目前看起来像这样:

hashcat -m 0 ...

在下一步中,我们将指定攻击模式。

使用 -a 标志指定攻击模式

在此步骤中,你将学习如何使用 -a 标志设置攻击模式。攻击模式告诉 Hashcat 使用哪种方法来破解密码。

Hashcat 提供了几种攻击模式,但最常见的是:

  • 0: Straight (字典攻击) - 将哈希与单词列表进行比较。
  • 1: Combination - 组合来自两个不同字典的单词。
  • 3: Brute-force (掩码攻击) - 根据定义的模式(掩码)尝试所有可能的字符组合。

对于本次实验,我们将执行 Straight(字典)攻击,因此我们将使用攻击模式 0。你可以在帮助菜单中找到所有攻击模式的列表。

让我们再次使用 grep 来查找“Attack-Modes”部分:

hashcat --help | grep "Attack-Modes" -A 10

-A 10 标志告诉 grep 显示匹配项之后的 10 行,为你提供完整列表。

- [ Attack-Modes ] -

  ## | Mode
 ===+======
  0 | Straight
  1 | Combination
  3 | Brute-force
  6 | Hybrid dict + mask
  7 | Hybrid mask + dict

我们现在已经确定了攻击模式。让我们将其添加到我们的命令中,命令现在变为:

hashcat -m 0 -a 0 ...

接下来,我们将提供包含我们想要破解的哈希的文件。

提供输入哈希文件

在此步骤中,你将指定包含要破解的哈希的输入文件。此参数位于选项之后。

本次实验的设置脚本已在你的当前目录(~/project)中创建了一个名为 hashes.txt 的文件。此文件包含一个 MD5 哈希。

让我们使用 cat 命令查看此文件的内容:

cat hashes.txt

你应该会看到以下输出:

5f4dcc3b5aa765d61d8327deb882cf99

这就是我们将要破解的哈希。要将其添加到我们的命令中,只需将文件名放在选项之后。我们的命令现在看起来像这样:

hashcat -m 0 -a 0 hashes.txt ...

最后一步是为我们的字典攻击提供单词列表。

提供输入单词列表或掩码

在最后一步中,你将提供字典攻击所需的最后一个组件:单词列表。单词列表是一个纯文本文件,其中每一行都是一个潜在的密码。

实验环境包含一个名为 wordlist.txt 的简单单词列表。让我们检查一下它的内容:

cat wordlist.txt

输出将是:

test
hello
password
123456

Hashcat 将使用此单词列表来测试哈希。单词列表文件是我们命令中的最后一个参数。

现在,让我们组装并运行完整的命令:

hashcat -m 0 -a 0 hashes.txt wordlist.txt

Hashcat 将启动。由于我们的哈希和单词列表非常简单,它将几乎立即完成。输出将显示破解会话的状态。

...
Session..........: hashcat
Status...........: Cracked
Hash.Name........: MD5
Hash.Target......: 5f4dcc3b5aa765d61d8327deb882cf99
Time.Started.....: ...
Time.Estimated...: 0 secs (0.00ms)
Guess.Base.......: File (wordlist.txt)
Guess.Queue......: 1/1 (100.00%)
Speed.#1.........:   496.9 kH/s (0.00ms) @ Accel:128 Loops:1 Thr:1 Vec:8
Recovered........: 1/1 (100.00%) Digests
Progress.........: 4/4 (100.00%)
Rejected.........: 0/4 (0.00%)
Restore.Point....: 4/4 (100.00%)
Restore.Sub.#1...: Salt:0 Amplifier:0-1 Iteration:0-1
Candidates.#1....: test -> 123456
Hardware.Mon.#1..: Util: 99%
...

Status...........: Cracked 行确认成功。要查看破解的密码,你可以再次运行相同的命令并加上 --show 标志。

hashcat -m 0 -a 0 hashes.txt wordlist.txt --show

输出将清晰地显示哈希及其对应的明文密码:

5f4dcc3b5aa765d61d8327deb882cf99:password

恭喜你,你已成功构建并执行了一个完整的 Hashcat 命令!

总结

在本次实验中,你从零开始构建了一个 Hashcat 命令,学习了其基本命令结构。你已成功使用字典攻击破解了一个 MD5 哈希。

你现在理解了 Hashcat 基本命令的五个核心组成部分:

  1. 可执行文件hashcat
  2. 哈希类型:通过 -m 指定(例如,MD5 为 -m 0)。
  3. 攻击模式:通过 -a 指定(例如,字典攻击为 -a 0)。
  4. 哈希文件:包含目标哈希的文件(例如,hashes.txt)。
  5. 单词列表/掩码:攻击的输入(例如,wordlist.txt)。

你学到的最终命令结构是:hashcat -m <hash_type> -a <attack_mode> <hash_file> <wordlist>。这些知识为你探索更高级的 Hashcat 功能奠定了坚实的基础。