使用 John the Ripper 破解 NTLM 哈希

Kali LinuxBeginner
立即练习

引言

在本实验中,你将通过使用强大的密码破解工具 John the Ripper 来实践破解 NTLM (NT LAN Manager) 哈希。NTLM 哈希在 Windows 环境中常用于存储用户密码。理解这些哈希如何被破解,对于理解密码安全漏洞和实施更强的安全措施至关重要。

你将从模拟 NTLM 哈希的提取开始,然后学习如何为 John the Ripper 正确格式化它们。随后,你将使用两种主要的破解方法:使用单词列表的字典攻击和使用增量模式的暴力破解攻击。最后,你将反思 NTLM 哈希的安全影响以及强密码策略的重要性。本实验提供了一种实践性的方法来学习网络安全中的一个基本概念。

从系统中提取 NTLM 哈希

在此步骤中,你将模拟提取 NTLM 哈希。在实际场景中,NTLM 哈希可以从多种来源提取,例如 Windows 系统上的 Security Account Manager (SAM) 数据库、Active Directory 或网络流量。在本实验中,我们已在你的 ~/project 目录中提供了一个名为 hashes.txt 的文件,其中包含示例 NTLM 哈希。

首先,让我们验证 hashes.txt 文件的存在并检查其内容。此文件包含多行,每行代表一个用户条目及其 NTLM 哈希。格式通常包括用户名、用户 ID、LM 哈希(通常为空或默认值)、NTLM 哈希以及其他字段。我们将重点关注 NTLM 哈希部分。

使用 ls 命令列出当前目录中的文件,然后使用 cat 命令显示 hashes.txt 的内容。

ls -l ~/project/hashes.txt
cat ~/project/hashes.txt

你应该会看到类似以下的输出,显示文件详细信息及其内容:

-rw-r--r-- 1 labex labex 300 Mar 10 10:00 /home/labex/project/hashes.txt
user1:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
user2:501:aad3b435b51404eeaad3b435b51404ee:209c6174efb4b710:209c6174efb4b710:::
user3:502:aad3b435b51404eeaad3b435b51404ee:8846f7eaee8fb117ad065adec1000000:::
user4:503:aad3b435b51404eeaad3b435b51404ee:e52cac67419a9a224a30370a31323334:::
user5:504:aad3b435b51404eeaad3b435b51404ee:d41d8cd98f00b204e9800998ecf8427e:::

NTLM 哈希是每行中的第四个字段,由冒号分隔。例如,对于 user1,NTLM 哈希是 31d6cfe0d16ae931b73c59d7e0c089c0

为 John the Ripper 格式化 NTLM 哈希

在此步骤中,你将准备 NTLM 哈希以供 John the Ripper 使用。虽然 John the Ripper 通常可以自动处理各种哈希格式,但了解其期望的输入格式是一个好习惯。对于 NTLM 哈希,John the Ripper 通常期望的格式是 username:NTLM_hash

我们的 hashes.txt 文件包含额外的字段。我们需要只提取用户名和 NTLM 哈希。我们可以使用 cut 命令来实现这一点。cut 命令可以从文件的每一行中提取部分内容。我们将使用 : 作为分隔符,并选择第一个和第四个字段。

执行以下命令来提取和格式化哈希,然后将输出重定向到你的 ~/project 目录中一个名为 ntlm_hashes.txt 的新文件。

cut -d ':' -f 1,4 ~/project/hashes.txt > ~/project/ntlm_hashes.txt
cat ~/project/ntlm_hashes.txt

你应该会看到格式化后的哈希,已准备好供 John the Ripper 使用:

user1:31d6cfe0d16ae931b73c59d7e0c089c0
user2:209c6174efb4b710
user3:8846f7eaee8fb117ad065adec1000000
user4:e52cac67419a9a224a30370a31323334
user5:d41d8cd98f00b204e9800998ecf8427e

这个 ntlm_hashes.txt 文件现在只包含用户名和相应的 NTLM 哈希,这是 John the Ripper 的理想格式。

使用字典文件破解 NTLM 哈希

在此步骤中,你将使用 John the Ripper 和字典文件(也称为字典攻击)来破解 NTLM 哈希。字典文件是一个包含常见密码、字典单词或先前泄露密码列表的文件。这通常是破解弱密码最有效的方法。

我们已在你的 ~/project 目录中提供了一个名为 wordlist.txt 的简单字典文件。让我们先检查一下它的内容。

cat ~/project/wordlist.txt

你应该会看到以下内容:

password
123456
qwerty
admin
test

现在,使用 John the Ripper 的 wordlist.txt 来破解 ntlm_hashes.txt 中的哈希。命令 john --format=NT --wordlist=wordlist.txt ntlm_hashes.txt 指定哈希格式为 NTLM (NT),要使用的字典文件,以及包含哈希的文件。

john --format=NT --wordlist=~/project/wordlist.txt ~/project/ntlm_hashes.txt

John the Ripper 将尝试破解哈希。你可能会看到类似以下的输出,指示哪些哈希已被破解:

Using default input encoding: UTF-8
Loaded 5 password hashes with no different salts (NT [MD4 HASHES])
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
123456           (user4)
test             (user2)
password         (user1)
3g 0:00:00:00 DONE (2023-10-27 08:00) 100.0% (ETA: 08:00) 3.750g/s 11.25p/s 11.25c/s 11.25C/s 123456...test
Session completed.

破解过程完成后,你可以使用 john --show 命令查看已破解的密码。

john --show ~/project/ntlm_hashes.txt

输出将列出已破解的哈希及其对应的明文密码:

user1:password
user2:test
user4:123456

3 password hashes cracked, 2 left

这表明 user1 的密码是 passworduser2 的密码是 testuser4 的密码是 123456。另外两个哈希(user3user5)未能被此字典文件破解,这表明它们的密码可能更强或不在我们简单的字典文件中。

使用增量模式破解 NTLM 哈希

在此步骤中,你将探索 John the Ripper 的增量模式,它执行暴力破解攻击。与字典攻击不同,增量模式系统地尝试字符组合,从简短、简单的组合开始,并逐渐增加复杂性。此方法对于破解不在字典中的密码非常有效,但对于长密码或复杂密码可能非常耗时。

John the Ripper 的增量模式使用字符集和规则来生成密码。对于 NTLM 哈希,我们可以指定 NT 格式并使用 --incremental 选项。John the Ripper 具有内置的增量模式(例如 alnumdigitsall)。我们将使用默认的增量模式,它会尝试各种字符集。

在运行增量模式之前,重置 John the Ripper 的会话是一个好习惯,以避免与先前破解的哈希发生冲突。

john --session=reset

现在,在增量模式下针对 ntlm_hashes.txt 文件运行 John the Ripper。此过程可能需要一些时间,具体取决于剩余未破解哈希的复杂性。

john --format=NT --incremental ~/project/ntlm_hashes.txt

当 John the Ripper 尝试破解剩余的哈希时,你可能会看到类似以下的输出:

Using default input encoding: UTF-8
Loaded 5 password hashes with no different salts (NT [MD4 HASHES])
Remaining 2 password hashes to crack
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
(user5)
(user3)
2g 0:00:00:00 DONE (2023-10-27 08:05) 100.0% (ETA: 08:05) 2.500g/s 7.500p/s 7.500c/s 7.500C/s
Session completed.

过程完成后,再次使用 john --show 检查已破解的密码。

john --show ~/project/ntlm_hashes.txt

你现在应该看到所有哈希都已破解,包括 user3user5user3 的密码是 admin,而 user5 的密码是空字符串(表示为 "" 或冒号后的空白)。

user1:password
user2:test
user4:123456
user3:admin
user5:

5 password hashes cracked, 0 left

这展示了增量模式对于破解可能不在字典中,尤其是简短或简单的密码的有效性。

理解 NTLM 哈希的安全性

在此步骤中,你将反思 NTLM 哈希的安全影响以及强密码实践的重要性。你已经看到相对简单的密码如何通过字典文件快速破解,以及即使是简短的、非字典的密码也可以通过增量模式等暴力破解方法找到。

NTLM 哈希因多种因素而存在漏洞:

  • 缺乏加盐(Salting): 与现代哈希算法(例如 bcrypt、scrypt)不同,NTLM 哈希不使用“盐”。盐是在哈希处理之前添加到密码中的随机数据,即使密码相同,也能使每个哈希独一无二。没有加盐,攻击者可以使用预计算表(彩虹表)快速破解哈希。
  • 弱哈希算法: NTLM 使用 MD4,这是一个相对较旧且在密码学上较弱的哈希算法。
  • 不区分大小写(针对 LM 哈希,尽管 NTLM 区分大小写): 虽然 NTLM 本身区分大小写,但其前身 LM 哈希不区分,这导致了混淆,有时也导致了较弱的密码实践。

为减轻与 NTLM 哈希破解相关的风险,组织和用户应:

  • 强制执行强密码策略: 要求使用长而复杂的密码,结合大写和小写字母、数字和特殊字符。这使得字典攻击和暴力破解攻击都变得更加困难。
  • 实施多因素身份验证(MFA): MFA 在密码之外增加了额外的安全层,即使攻击者破解了密码,也极大地增加了他们获得未经授权访问的难度。
  • 使用现代哈希算法: 对于新系统或迁移时,优先选择现代的、加盐的、自适应的哈希算法,如 bcrypt、scrypt 或 Argon2。
  • 定期审计和监控: 持续监控可疑的登录尝试并审计密码强度。

通过理解 NTLM 哈希的漏洞并实施强大的安全措施,你可以显著增强系统和用户账户的安全态势。

总结

在此实验中,你成功学习了如何使用 John the Ripper 破解 NTLM 哈希。你首先了解了 NTLM 哈希的结构,然后将其格式化以最佳地用于 John the Ripper。接着,你应用了两种常见的密码破解技术:字典攻击和增量(暴力破解)攻击,展示了它们对弱密码和简单密码的有效性。

你还深入了解了 NTLM 哈希的安全弱点,例如缺乏加盐(salting)以及使用了较弱的哈希算法。这种理解对于认识到强密码策略、多因素身份验证以及采用现代、强大的哈希算法来保护敏感信息的重要性至关重要。这种实践经验为你提供了密码安全和常见破解方法的基础理解。