Hashcat 哈希基础知识

LinuxBeginner
立即练习

介绍

欢迎来到哈希(Hashing)和密码破解的世界!哈希是网络安全中的一个基本概念,用于验证数据完整性和安全存储密码。哈希函数接收一个输入(如密码),并返回一个固定大小的字节字符串,即哈希值。这个过程被设计为单向的,意味着你不能轻易地反向推导出原始输入。

Hashcat 是一款世界闻名的强大密码恢复工具。在你能够有效地使用它之前,你必须了解哈希的基本概念以及如何处理它们。

在这个 Lab 中,你将学习哈希的基础概念。你将探索常见的哈希类型,生成你自己的哈希,为将其与 Hashcat 配合使用做好准备,并理解密码与其哈希值之间的关键区别。这些知识是你掌握 Hashcat 的旅程中的第一个基本步骤。

这是一个实验(Guided Lab),提供逐步指导来帮助你学习和实践。请仔细按照说明完成每个步骤,获得实际操作经验。根据历史数据,这是一个 初级 级别的实验,完成率为 94%。获得了学习者 100% 的好评率。

理解常见的哈希类型 - MD5、SHA1 和 NTLM

在这一步中,你将学习在网络安全领域中会经常遇到的三种常见哈希类型:MD5, SHA1 和 NTLM。此步骤中没有需要运行的命令;目标是理解这些核心概念。

  • 什么是哈希(Hash)?
    哈希是一个由数据生成出来的、唯一的、固定长度的字符序列。哈希算法被设计为单向函数,这意味着仅凭哈希值,计算上几乎不可能反向推导出原始输入数据。

  • MD5 (Message Digest 5)
    MD5 是最古老且最广为人知的哈希算法之一。它生成一个 128 位(32 个十六进制字符)的哈希值。虽然它曾被广泛用于密码存储,但由于其易受“碰撞”(Collision,即两个不同的输入产生相同哈希值)的漏洞,现在认为它不安全,不应用于密码存储。如今,它主要用于验证文件完整性,以确保文件在传输过程中未被篡改。

  • SHA-1 (Secure Hash Algorithm 1)
    SHA-1 是作为 MD5 的继任者开发的。它生成一个 160 位(40 个十六进制字符)的哈希值。与 MD5 类似,由于发现了弱点,SHA-1 也不再被认为对加密目的安全。然而,你仍然会在较旧的系统和遗留应用程序中找到它。

  • NTLM (NT LAN Manager)
    NTLM 是微软 Windows 用于存储用户密码的哈希算法。当你在 Windows 系统上设置密码时,该密码会被转换为 NTLM 哈希值并存储起来。在涉及 Windows 环境的渗透测试任务中,这些哈希值是一个常见的攻击目标。

理解这些类型是识别哈希并选择正确破解方法的第一步。

使用 'echo' 和 'md5sum' 从字符串创建 MD5 哈希

在这一步中,你将从一个简单的文本字符串生成一个 MD5 哈希值。这是从命令行快速哈希一段数据的常见操作。我们将使用两个标准的 Linux 实用工具:echomd5sum

首先,让我们了解这些工具:

  • echo: 此命令用于显示一行文本。
  • md5sum: 此命令计算并校验 MD5 消息摘要。
  • | (管道/Pipe): 此操作符将左侧命令的输出作为输入发送给右侧的命令。

我们将对字符串 password123 进行哈希处理。重要的是在 echo 命令中使用 -n 标志。这告诉 echo 不要输出末尾的换行符,否则换行符将被包含在哈希计算中,从而产生不同的结果。

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

echo -n "password123" | md5sum

你将看到以下输出。这一长串字符是 "password123" 的 MD5 哈希值,而 - 表示 md5sum 是从标准输入(管道)而不是文件读取的输入。

482c811da5d5b4bc6d497ffa98491e38  -

你现在已经成功创建了你的第一个哈希值!

准备一个包含单个目标哈希的文本文件

在这一步中,你将创建一个文件来存储你生成的哈希值。Hashcat 和其他密码破解工具通常处理包含一个或多个哈希值的文件,而不是直接的字符串输入。这使得你能够一次性针对多个哈希值进行操作。

我们将使用你在上一步中为 password123 生成的 MD5 哈希值:482c811da5d5b4bc6d497ffa98491e38

我们可以再次使用 echo 命令,但这次我们将使用输出重定向操作符 > 将该字符串写入一个名为 target_hash.txt 的新文件中。此命令将在你当前的目录(~/project)中创建该文件。

运行以下命令来创建文件:

echo "482c811da5d5b4bc6d497ffa98491e38" > target_hash.txt

现在,让我们验证文件是否已正确创建并包含哈希值。使用 cat 命令显示文件的内容:

cat target_hash.txt

输出应该是哈希值本身:

482c811da5d5b4bc6d497ffa98491e38

你现在有了一个格式正确的目标文件,已准备好用于 Hashcat 等破解工具。

从 Hashcat 的帮助信息中确定 MD5 的正确哈希模式

在这一步中,你将学习如何在 Hashcat 中找到特定哈希类型的正确模式。Hashcat 支持数百种不同的哈希算法,你必须准确地告诉它你正在尝试破解哪种类型的哈希。这是通过使用一个数字“哈希模式”(hash mode)来完成的。

要找到正确的模式,你可以使用 Hashcat 内置的帮助菜单。运行 hashcat --help 将显示所有支持的哈希类型及其对应模式的非常长的列表。为了快速找到我们需要的信息,我们可以将此输出通过管道传递给 grep 命令,以搜索 "md5"。

运行以下命令来搜索 MD5 哈希模式:

hashcat --help | grep -i "md5"

grep 中的 -i 标志使搜索不区分大小写。你将看到很多输出,因为 MD5 有很多变体。寻找最基础的那一个。

...
      0 | MD5                                            | Raw Hash
...
   2410 | Cisco-ASA MD5                                  | Operating System
...

正如你在输出中看到的,标准、原始 MD5 哈希的哈希模式是 0。这就是你将使用 -m 标志(例如,-m 0)提供给 Hashcat 的数字,以告知它你正在破解一个 MD5 哈希。

区分哈希(Hash)和密码(Password)

在最后一步中,我们将巩固密码和其哈希值之间的关键区别。这是密码破解中的一个基本概念。

  • 密码(Password)是秘密的、人类可读的字符串。在我们的示例中,它是 password123
  • 哈希值(Hash)是由密码生成的、经过混淆的、固定长度的字符串。在我们的示例中,它是 482c811da5d5b4bc6d497ffa98491e38

密码破解并是反转哈希值。相反,它的工作原理是获取一个潜在密码列表(一个字典文件,wordlist),对每个密码进行哈希处理,然后将结果与目标哈希值进行比较。如果它们匹配,则找到了密码。

为了说明这一点,让我们创建一个简单的字典文件。在实际场景中,这个文件将包含数百万个密码猜测。对于本次实验(Lab),它将只包含这一个正确的密码。

创建一个名为 potential_passwords.txt 的文件,其中包含原始密码:

echo "password123" > potential_passwords.txt

现在,让我们看看你准备好的两个文件。使用 ls 命令查看它们在你目录中的情况。

ls
potential_passwords.txt  target_hash.txt

你拥有 target_hash.txt,其中包含要破解的哈希值,以及 potential_passwords.txt,其中包含要测试的密码。这种分离是密码破解工具如何操作的关键。

总结

恭喜你完成了本次实验(Lab)!你已经成功学习了在使用 Hashcat 等工具之前所必需的哈希(hashing)基本原理。

在本次实验中,你:

  • 学习了 MD5、SHA-1 和 NTLM 等常见哈希类型的概念。
  • 使用 echomd5sum 命令从字符串生成了一个 MD5 哈希值。
  • 准备了一个目标哈希文件,这是破解工具的标准格式。
  • 使用 hashcat --help 命令识别了 MD5 的正确哈希模式。
  • 巩固了对密码与其对应哈希值之间关键区别的理解。

有了这些基础知识,你现在可以更好地准备进入更高级的实验(Labs),在这些实验中,你将使用这些文件和概念,使用 Hashcat 执行实际的密码破解攻击。