引言
在本实验中,你将学习一种最常见的后渗透技术:从受损的 Windows 目标中转储密码哈希。具体来说,你将使用 Metasploit 的 Meterpreter payload 中提供的 hashdump 命令。一旦获得这些哈希,就可以离线破解以揭示用户密码,从而在网络中进一步提升权限或进行横向移动。
本次教学练习,我们将在模拟的 Metasploit Framework 环境中进行。这使你能够学习精确的命令和工作流程,而无需设置复杂的受害者/攻击者网络。你将从一个已建立的模拟 Windows 机器上的 Meterpreter 会话开始。
你的目标是:
- 访问一个活动的 Meterpreter 会话。
- 使用
hashdump命令提取密码哈希。 - 理解转储哈希的结构。
- 将哈希保存到文件以供将来使用。
获取具有 SYSTEM 权限的 Meterpreter 会话
在此步骤中,你将启动模拟的 Metasploit 控制台并与预先存在的 Meterpreter 会话进行交互。在实际场景中,获取此会话将涉及利用目标机器上的漏洞。对于本次实验,会话已为你准备就绪。
首先,导航到设置脚本创建的模拟目录。
cd ~/project/metasploit-simulation
现在,通过执行 msfconsole 脚本来启动模拟的 Metasploit 控制台。
./msfconsole
你应该会看到一个欢迎横幅和 msf6 > 提示符。这表明你已进入 Metasploit 主控制台。要查看活动会话,请使用带有 -l (list) 标志的 sessions 命令。
sessions -l
你将看到以下输出,显示一个 ID 为 1 的活动会话。
Active sessions
===============
Id Name Type Information Connection
-- ---- ---- ----------- ----------
1 meterpreter x64/windows NT AUTHORITY\SYSTEM @ WIN-PC 10.0.2.15:4444 -> 10.0.2.16:49152
输出显示我们有一个以 NT AUTHORITY\SYSTEM 身份运行的 meterpreter 会话,这是 Windows 系统上的最高权限级别。这对于转储哈希至关重要。
现在,使用其 ID 与此会话进行交互。
sessions -i 1
你的提示符将从 msf6 > 更改为 meterpreter >,确认你现在已进入目标机器上的 Meterpreter 会话。
按需加载 priv 标准 API 扩展
在此步骤中,你将加载 priv 扩展。此 Meterpreter 扩展提供了用于权限提升和访问操作系统敏感部分(例如存储密码哈希的安全账户管理器 (SAM) 数据库)的命令。
虽然许多现代 Meterpreter payload 在调用命令时会自动加载必要的扩展,但了解如何手动加载它们是一个好习惯。这可以确保你拥有所需的功能。
在 meterpreter > 提示符下,键入以下命令加载 priv 扩展:
load priv
模拟器将确认扩展已成功加载。
[+] Loading extension priv...
[+] Loaded extension: priv
加载 priv 扩展后,你现在可以访问 hashdump 等命令。
运行 hashdump 后渗透模块
在此步骤中,你将执行 hashdump 命令。此命令是我们加载 priv 扩展的主要原因。它通过直接从系统内存读取 SAM 数据库来工作,绕过了磁盘上的保护。由于我们的会话是以 SYSTEM 权限运行的,因此这是可能的。
现在你已进入 Meterpreter 提示符并加载了 priv 扩展,只需运行 hashdump 命令。
hashdump
该命令将执行并向屏幕打印用户名及其对应的密码哈希列表。
Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
labex-user:1001:aad3b435b51404eeaad3b435b51404ee:8846f7eaee8fb117ad06bdd830b7586c:::
你已成功从模拟的 Windows 机器中提取了密码哈希。在下一步中,我们将分析此输出的结构。
查看从 SAM 数据库转储的 NTLM 哈希
在此步骤中,你将学习解释 hashdump 命令的输出。理解此格式对于知道如何处理你收集到的哈希至关重要。
让我们检查一下你在上一步生成的输出中的一行:
Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
此字符串是以冒号分隔的,包含多个字段:
用户名 (Username):
Administrator- 这是用户账户名。
相对标识符 (Relative Identifier, RID):
500- 这是域内账户的唯一 ID。RID
500始终是默认管理员账户。
- 这是域内账户的唯一 ID。RID
LM 哈希 (LM Hash):
aad3b435b51404eeaad3b435b51404ee- 这是较旧的 LAN Manager 身份验证协议的哈希。在现代 Windows 系统上,这通常是一个空白或“空”哈希,如此处所示。此特定值表示未存储 LM 哈希。
NTLM 哈希 (NTLM Hash):
31d6cfe0d16ae931b73c59d7e0c089c0- 这是 NT LAN Manager 哈希,所有现代版本的 Windows 都使用它。这是你将在 John the Ripper 或 Hashcat 等离线密码破解工具中使用的哈希。
注释和主目录 (Comment and Home Directory):
:::- 这最后三个字段通常是空的,不用于破解。
通过观察此输出,你可以识别活动的用户账户,最重要的是,识别它们的 NTLM 哈希,这些哈希以不可逆转的格式表示它们的密码。
将哈希保存到文件以进行离线破解
在最后一步中,你将把收集到的哈希保存到一个文本文件。将来自受损系统(compromised system)的证据和战利品(loot)保存起来供以后分析和使用是标准做法。将哈希存储在文件中可以方便地将它们输入到密码破解软件中。
首先,你需要退出模拟的 msfconsole 环境,返回到你的常规 Linux shell。在 meterpreter > 提示符下键入 exit 以返回到 msf6 > 提示符,然后再次键入 exit。
exit
你现在应该回到了 meterpreter > 提示符。再次键入 exit 以离开模拟环境。
exit
你现在应该回到了你的 ~/project/metasploit-simulation 目录。
接下来,使用 nano 文本编辑器创建一个名为 hashes.txt 的新文件。
nano hashes.txt
现在,从你的终端复制哈希输出(来自第 3 步的 hashdump 命令的输出),并将其粘贴到 nano 编辑器中。内容应如下所示:
Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
labex-user:1001:aad3b435b51404eeaad3b435b51404ee:8846f7eaee8fb117ad06bdd830b7586c:::
按 Ctrl+X 退出 nano,然后按 Y 确认你要保存更改,最后按 Enter 确认文件名。
为了验证文件是否已正确保存,你可以使用 cat 命令显示其内容。
cat hashes.txt
你已成功将密码哈希保存到文件,可供离线破解使用。
总结
在此实验中,你使用模拟的 Meterpreter 会话成功执行了一项经典的后渗透(post-exploitation)技术。
你学会了如何:
- 在 Metasploit Framework 控制台中导航和交互会话。
- 加载 Meterpreter 扩展,如
priv,以获得额外功能。 - 执行
hashdump命令以从 Windows 目标提取 NTLM 密码哈希。 - 理解转储哈希的格式,识别用户名、RID 和 NTLM 哈希。
- 将收集到的哈希保存到文件,以便离线使用密码破解工具。
这项技能是渗透测试(penetration testing)的基本组成部分,因为它通常能提供跨网络扩展访问所需的密钥。


