排查 Hashcat 常见错误

Kali LinuxBeginner
立即练习

引言

Hashcat 是一个强大且功能多样的密码恢复工具,但像任何复杂的软件一样,用户可能会遇到起初令人困惑的错误。理解这些常见问题是有效使用 Hashcat 的关键。

在本实验中,你将学习诊断和修复 Hashcat 操作中最常见的错误。我们将涵盖与哈希格式、文件解析和硬件管理相关的问题。通过本实验的结束,你将能更好地解决自己的 Hashcat 会话问题。

排查“Token length exception”错误

在此步骤中,我们将探讨 Token length exception 错误。当输入文件中的哈希长度不符合指定的哈希模式 (-m) 时,就会出现此错误。例如,标准的 MD5 哈希必须正好是 32 个十六进制字符。如果 Hashcat 找到的行长度过短或过长,它将报告此错误并停止。

首先,让我们尝试在一个包含格式错误哈希的文件上运行 Hashcat。为此,我们准备了一个名为 hashes_token_length.txt 的文件。我们将使用哈希模式 0,它对应于 MD5。

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

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

你将看到类似以下的错误消息:

hashcat (v6.2.x) starting

...

* Token length exception: 1/2 hashes
  This error happens if the hashes you are trying to crack do not meet the length requirements of the selected hash-mode.
  Please make sure you have specified the correct hash-mode and that all of your hashes are valid.
  ...
* Startup failed: Invalid hash-length

消息清楚地表明了“Token length exception”。要解决此问题,你需要识别文件中的无效哈希,并对其进行更正或删除。查找长度不正确的行的简单方法是使用 awk 等工具。对于 MD5 哈希(32 个字符),我们可以检查任何长度不等于 32 的行。

运行此命令来检查文件:

awk 'length != 32' hashes_token_length.txt

输出将显示有问题的一行:

5d41402abc4b2a76b9719d911017c59

现在你已经找到了无效的哈希,可以创建一个更正后的文件。让我们创建一个名为 hashes_corrected.txt 的新文件,其中只包含有效的哈希。

awk 'length == 32' hashes_token_length.txt > hashes_corrected.txt

现在你可以使用更正后的文件成功运行 Hashcat:

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

这次,Hashcat 将在没有错误的情况下启动。

解决“No hashes loaded”错误

在此步骤中,我们将解决 No hashes loaded 错误。这是最常见的问题之一,通常意味着 Hashcat 无法将你的哈希文件中的任何行解析为所选哈希模式的有效哈希。这可能是由于哈希模式不正确、文件损坏或文件格式不正确。

我们有一个名为 hashes_no_load.txt 的文件。让我们尝试使用哈希模式 10 (md5(pass.salt)) 来破解它。此模式要求哈希和盐用冒号 (:) 分隔,但我们的文件只包含原始 MD5 哈希。

运行以下命令:

hashcat -m 10 -a 0 hashes_no_load.txt wordlist.txt

Hashcat 将启动但会立即退出,并显示状态消息,表明没有加载哈希:

...
Hashes: 2 digests; 2 unique digests, 1 unique salts
Bitmaps: 16 bits, 65536 entries, 0x0000ffff mask, 262144 bytes, 5/13 rotates
Rules: 1

Applicable optimizers:
* Zero-Byte
* Precompute-Init
* Precompute-Merkle-Demgard
* Meet-In-The-Middle
* Early-Skip
* Not-Iterated
* Not-Salted
* Raw-Hash

Minimum password length supported by kernel: 0
Maximum password length supported by kernel: 256

Watchdog: Hardware monitoring interface not found on your system.
Watchdog: Temperature monitoring is disabled.

No hashes loaded.

Started: ...
Stopped: ...

关键行是 No hashes loaded。这告诉你你的哈希文件内容与你指定的哈希模式之间存在不匹配。文件 hashes_no_load.txt 包含一个原始 MD5 哈希,对应于模式 0

要解决此问题,你必须提供正确的哈希模式。让我们再次使用 -m 0 运行命令。

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

这次,Hashcat 将正确加载文件中的有效哈希并开始破解会话。它将忽略行 "not_a_hash",因为它对于模式 0 来说不像一个有效的哈希。

...
Hashes: 1 digests; 1 unique digests, 1 unique salts
...
Session..........: hashcat
Status...........: Running
...

处理“Device temperature abort”警告

在此步骤中,我们将讨论如何处理与温度相关的问题。在使用 GPU 等强大硬件运行时,Hashcat 会产生大量热量。为保护你的硬件免受损坏,Hashcat 会监控设备温度,并在温度过高时自动暂停或中止会话。

在 LabEx 虚拟环境中,我们无法访问物理 GPU,因此无法直接触发此错误。但是,对于实际使用来说,这是一个需要理解的关键功能。错误消息可能类似于 Device #1 temperature abort trigger reached

Hashcat 提供了命令行选项来管理此行为:

  • --gpu-temp-abort=X: 当任何 GPU 温度达到 X 摄氏度时中止会话。
  • --gpu-temp-retain=Y: 当任何 GPU 温度达到 Y 摄氏度时暂停会话,并在冷却后恢复。

你可以使用这些标志来设置适合你的硬件和散热设置的自定义温度限制。例如,要让 Hashcat 在温度超过 90°C 时停止,你可以在命令中添加 --gpu-temp-abort=90

让我们运行一个带有此标志的命令,看看它是如何使用的。我们将使用在设置过程中创建的 valid_hash.txt 文件。

hashcat -m 0 -a 0 valid_hash.txt wordlist.txt --gpu-temp-abort=90

命令将照常运行,但 Hashcat 现在已配置了你的自定义温度限制。

在某些情况下,硬件监控可能存在故障或不受支持,导致温度读数不正确和不必要的关机。如果你确定你的散热足够好且温度读数错误,你可以使用 --hwmon-disable 标志完全禁用硬件监控功能。

hashcat -m 0 -a 0 valid_hash.txt wordlist.txt --hwmon-disable

请谨慎使用此选项,因为它会禁用一项重要的安全功能。

解决单词列表或规则中的“Line-length exception”错误

在此步骤中,我们将处理 Line-length exception 错误。此错误与步骤 1 中的 token length exception 类似,但它适用于你的输入文件,例如单词列表或规则文件,而不是哈希文件。Hashcat 为其从这些文件中读取的行有一个内部缓冲区,如果某行超过此限制(通常为 256 字节),则会触发此错误。

这可能发生在单词列表损坏或规则文件生成不当时。我们有一个名为 wordlist_long_line.txt 的文件,其中包含一行非常长的内容。

让我们尝试在破解会话中使用它来破解我们的 valid_hash.txt

hashcat -m 0 -a 0 valid_hash.txt wordlist_long_line.txt

你将收到一条指向单词列表文件的错误消息:

...
ATTENTION!
The wordlist 'wordlist_long_line.txt' contains a line that is larger than 256 bytes.
The line is ignored.
To fix this, remove the line from the wordlist.
...

虽然 Hashcat 在此警告后可能会继续运行,但最佳实践是清理你的输入文件。你可以使用 awk 等工具查找并删除过大的行。以下命令将打印文件中任何长度超过 256 个字符的行:

awk 'length > 256' wordlist_long_line.txt

这将显示有问题的长行。要解决此问题,你可以创建一个新的、干净的单词列表,其中不包含任何长度超过 256 个字符的行。

awk 'length <= 256' wordlist_long_line.txt > wordlist_corrected.txt

现在,你可以使用你的 wordlist_corrected.txt 文件而不会遇到该错误。

hashcat -m 0 -a 0 valid_hash.txt wordlist_corrected.txt

会话现在将干净地启动,没有任何关于行长度的警告。

理解并解决“Separator not found”错误

在最后一步中,我们将处理 Separator not found 错误。当你使用的哈希模式(hash mode)需要特定格式的分隔符(通常是冒号 :)但你的哈希文件中的行不包含它时,就会发生此错误。许多哈希格式,如 user:passwordhash:salt,都依赖于这种结构。

在本示例中,我们将使用哈希模式 5500,这是 NetNTLMv1 的模式。此格式通常看起来像 USER::DOMAIN:LM_HASH:NT_HASH:CHALLENGE。冒号是必不可少的分隔符。我们有一个名为 hashes_no_separator.txt 的文件,其中包含一个哈希字符串但缺少必需的分隔符。

让我们尝试使用此文件运行 Hashcat:

hashcat -m 5500 -a 0 hashes_no_separator.txt wordlist.txt

Hashcat 将会失败并显示 Separator not found 错误。它还会向你展示正确格式的示例。

...
* Separator unmatched: 1/1 hashes
  This error happens if the hashes you are trying to crack are not in the correct format.
  Please read https://hashcat.net/wiki/doku.php?id=example_hashes to learn more about the correct format.
  ...
* Startup failed: Invalid hash-format

错误消息表明哈希缺少所需的分隔符。要解决此问题,你必须编辑哈希文件以匹配预期的格式。假设用户名是 labex,域是 corp,挑战是 1122334455667788。正确格式应为 labex::corp:<the_hash>:1122334455667788

让我们使用 nano 编辑器打开文件并进行更正。

nano hashes_no_separator.txt

将文件内容从:
U4BE_AC149FD0318023832132BFB833521AAF8A631114317A4935

更改为以下内容,确保将 <the_hash> 替换为原始哈希字符串:
labex::corp:U4BE_AC149FD0318023832132BFB833521AAF8A631114317A4935:1122334455667788

Ctrl+X,然后按 Y,最后按 Enter 保存文件并退出 nano

现在,再次运行 Hashcat 命令:

hashcat -m 5500 -a 0 hashes_no_separator.txt wordlist.txt

使用更正后的格式,Hashcat 现在将接受哈希并正确启动破解会话。这证明了确保你的哈希文件与你使用的特定哈希模式格式正确的重要性。

总结

在本实验中,你学习了如何诊断和解决使用 Hashcat 时遇到的五个最常见错误。

我们涵盖了:

  • Token length exception:由指定模式下哈希长度不正确引起。
  • No hashes loaded:哈希文件格式与所选哈希模式不匹配的结果。
  • Device temperature abort:一种硬件安全功能,可以通过温度控制标志进行管理。
  • Line-length exception:由单词列表或规则文件中的过大行触发。
  • Separator not found:当哈希格式需要一个哈希文件中不存在的分隔符时发生。

通过理解这些错误的成因以及如何修复它们,你可以更有效地使用 Hashcat 并避免常见的陷阱。关键是要始终验证你的输入文件,并确保你为特定任务使用了正确的选项。