介绍
欢迎来到哈希(Hashing)和密码破解的世界!哈希是网络安全中的一个基本概念,用于验证数据完整性和安全存储密码。哈希函数接收一个输入(如密码),并返回一个固定大小的字节字符串,即哈希值。这个过程被设计为单向的,意味着你不能轻易地反向推导出原始输入。
Hashcat 是一款世界闻名的强大密码恢复工具。在你能够有效地使用它之前,你必须了解哈希的基本概念以及如何处理它们。
在这个 Lab 中,你将学习哈希的基础概念。你将探索常见的哈希类型,生成你自己的哈希,为将其与 Hashcat 配合使用做好准备,并理解密码与其哈希值之间的关键区别。这些知识是你掌握 Hashcat 的旅程中的第一个基本步骤。
理解常见的哈希类型 - 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 实用工具:echo 和 md5sum。
首先,让我们了解这些工具:
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 等常见哈希类型的概念。
- 使用
echo和md5sum命令从字符串生成了一个 MD5 哈希值。 - 准备了一个目标哈希文件,这是破解工具的标准格式。
- 使用
hashcat --help命令识别了 MD5 的正确哈希模式。 - 巩固了对密码与其对应哈希值之间关键区别的理解。
有了这些基础知识,你现在可以更好地准备进入更高级的实验(Labs),在这些实验中,你将使用这些文件和概念,使用 Hashcat 执行实际的密码破解攻击。



