引言
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 基本命令的五个核心组成部分:
- 可执行文件:
hashcat - 哈希类型:通过
-m指定(例如,MD5 为-m 0)。 - 攻击模式:通过
-a指定(例如,字典攻击为-a 0)。 - 哈希文件:包含目标哈希的文件(例如,
hashes.txt)。 - 单词列表/掩码:攻击的输入(例如,
wordlist.txt)。
你学到的最终命令结构是:hashcat -m <hash_type> -a <attack_mode> <hash_file> <wordlist>。这些知识为你探索更高级的 Hashcat 功能奠定了坚实的基础。


