在 Windows 渗透测试过程中,获取系统的最高权限是攻击者的最终目标。getsystem
是 Metasploit 中用于提权的命令,旨在将当前的 Meterpreter 会话 提升至 NT AUTHORITY\SYSTEM 权限。需要特别注意的是,getsystem
并不是 Metasploit 框架(MSF)本身的命令,而是 Meterpreter shell 内置的提权工具。
许多初学者可能误以为 getsystem
是一个一键提权的命令,但在实际操作中,通常会遇到诸如 “incorrect” 或 “denied” 的错误提示。这是因为 getsystem
仅适用于管理员组用户,并不能直接用于低权限账户的提权。因此,在执行此命令时,必须确保当前用户具备足够的权限,否则无法成功提升到 SYSTEM 权限。
本文将详细解析 getsystem
的工作原理,并介绍其不同的提权方式,以帮助更好地理解和应用这一工具。
1. 前置知识:什么是命名管道(Named Pipe)?
命名管道的概念
命名管道(Named Pipe) 是 Windows 用于 进程间通信(IPC, Inter-Process Communication) 的一种机制,允许不同进程(甚至不同计算机上的进程)进行数据传输。
在 Windows 系统中,命名管道的路径通常如下:
\\.\pipe\管道名称
例如:
\\.\pipe\mypipe
命名管道广泛应用于 系统服务、客户端-服务器通信 和 本地进程数据交互,并且 SYSTEM 级进程 也依赖管道进行通信。因此,攻击者可以利用该机制劫持 高权限进程的访问令牌,进而提升权限。
命名管道的特点
- 全双工通信:支持数据的 双向流动,可同时进行读写。
- 跨进程、跨机器通信:可用于本地进程间通信,或 远程计算机交互(前提是目标系统允许)。
- 权限控制:可设置访问控制权限,限制特定用户或进程的管道访问权限。
- 文件系统兼容:操作方式类似文件系统,可使用
CreateFile
、ReadFile
等 API 进行读写。
2. getsystem
提权原理
getsystem
是 Metasploit 中的一个命令,主要用于将当前的 Meterpreter 会话 提升至 NT AUTHORITY\SYSTEM 权限,获得对目标系统的完全控制权限。该命令通过一系列本地提权(LPE)技术来实现权限提升。
默认提权方式
当执行 getsystem
时,Metasploit 会自动尝试使用系统支持的最佳提权方式。通常,它会尝试多种技术,直到成功为止。
通过运行 getsystem -h
命令可以查看其支持的所有提权技术,如图所示:
如果默认的提权方式失败,用户可以手动指定不同的提权技术来进行尝试:
meterpreter > getsystem -t 2
meterpreter > getsystem -t 3
下面将详细介绍各种提权方式的原理、优缺点和注意事项。
Technique 1 - Named Pipe Impersonation(命名管道模拟)
命名管道模拟(Named Pipe Impersonation)是 getsystem
中最常用的提权方法之一。它通过创建一个伪造的命名管道,诱导一个高权限进程(如 SYSTEM 进程)连接到该管道,并利用 Windows 的进程间通信(IPC)机制 模拟身份,劫持该进程的访问令牌,从而提升权限。
具体流程:
-
创建伪造的命名管道(例如
\\.\pipe\fakepipe
)。- 这个伪造的命名管道将用来诱导系统进程连接。
-
等待 SYSTEM 权限的进程(例如 Windows 服务)连接到该管道。
- 目标是让 SYSTEM 权限的进程(如
winlogon.exe
、lsass.exe
等)主动连接到伪造的管道。
- 目标是让 SYSTEM 权限的进程(如
-
模拟身份认证,劫持该 SYSTEM 进程的访问令牌。
- 利用
ImpersonateNamedPipeClient
API 将当前进程的权限提升至 SYSTEM 级别。
- 利用
-
复制 SYSTEM 令牌,并将其应用到 Meterpreter 进程中,最终实现权限提升。
- 通过
DuplicateTokenEx
API 复制 SYSTEM 进程的令牌并将其应用到 Meterpreter 进程,完成提权。
- 通过
优点:
- 无需利用内核漏洞,适用于大多数 Windows 版本(包括 Windows 10 和 Server 系列)。
- 无需特定权限,只需要 Meterpreter 会话中的普通管理员权限。
局限性:
- 需要 SeImpersonatePrivilege 权限,系统级的进程可能会启用访问控制,导致攻击失败。
- 新版本的 Windows 可能会加强对该方式的检测,防止命名管道模拟。
Technique 2 - Token Duplication(令牌复制)
令牌复制技术(Token Duplication)利用 Windows 访问令牌(Access Token) 的复制机制来提升权限。Windows 中,每个进程都与一个访问令牌绑定,令牌代表了进程的安全上下文(包括权限、身份等信息)。攻击者通过复制系统级别进程的令牌并应用到自己的进程中,从而实现权限提升。
具体流程:
-
获取 SYSTEM 权限进程的 PID。
- 通过 Meterpreter 查看系统进程列表,获取 SYSTEM 级别进程(如
winlogon.exe
、lsass.exe
等)的 PID。
- 通过 Meterpreter 查看系统进程列表,获取 SYSTEM 级别进程(如
-
使用
OpenProcessToken
API 打开目标进程的访问令牌。- 获取 SYSTEM 进程的访问令牌,使其能够被复制。
-
通过
DuplicateTokenEx
API 复制令牌,并使用ImpersonateLoggedOnUser
API 让当前进程使用该令牌。- 将 SYSTEM 进程的令牌复制到当前 Meterpreter 进程,从而提升权限。
-
令牌复制成功后,Meterpreter 进程权限提升至 SYSTEM,获得完全的系统访问权限。
优点:
- 适用于 Named Pipe Impersonation 失败的环境。
- 直接复制访问令牌,相比其他方式更直接。
局限性:
- SeDebugPrivilege 权限是必需的,否则无法访问 SYSTEM 级别的进程令牌。
- 在 Windows 10 及以上版本,Windows 可能会加强对令牌复制的检测,导致此方法失败。
- 此方法依赖于目标系统未启用强化的安全措施(如 LSA保护 或 Credential Guard)。
3. getsystem
提权的局限性
虽然 getsystem
提供了强大的权限提升功能,但它并非 万无一失,以下是一些常见的局限性和失败场景:
❌ 1. 目标用户不属于管理员组
getsystem
主要适用于 管理员账户。如果当前用户权限较低,且不是管理员组的成员,那么该命令通常无法成功。- 如果当前用户是普通用户或标准用户,必须先利用 漏洞利用 提升到管理员权限,例如:
- LPE 漏洞(如 CVE-2021-1732)
- 错误配置的服务(如 AlwaysInstallElevated)
❌ 2. UAC(用户账户控制)未绕过
- 用户账户控制(UAC) 在 Windows 中用于提升应用程序权限。如果 UAC 激活,
getsystem
可能无法直接工作。 - 必须通过 UAC 绕过技术(如
bypassuac
)绕过这一防护,或通过 内存注入技术以避免 UAC 限制。
❌ 3. 安全软件检测
- 许多安全软件(如 EDR/AV)会检测并阻止权限提升行为,尤其是 令牌复制 或 命名管道模拟。
- 现代 EDR/AV 解决方案往往会利用 行为分析 阻止这种攻击。此时需要使用 无文件攻击(Fileless Attack) 或利用 反病毒软件绕过技术。
4. 绕过UAC(Bypass UAC)
在目标用户属于管理员组但受到UAC限制时,getsystem
命令无法直接提升权限。这时,需要先Bypass UAC,以便让Meterpreter进程在高完整性级别(High Integrity Level)下运行。
4.1 exploit/windows/local/ask
模块
ask
模块通过伪造一个具有管理员权限的应用程序来欺骗用户点击运行,进而绕过UAC。
操作步骤:
- 在Meterpreter会话中,加载
ask
模块:use exploit/windows/local/ask
- 设置当前Session:
set SESSION <session_id>
- 伪装可执行文件名称(例如Windows更新程序):
set FILENAME windows_update.exe
- 运行绕过:
exploit
- 等待目标用户执行文件,绕过UAC后即可运行
getsystem
提权。
缺点:需要用户交互,即目标用户必须手动执行该文件。
4.2 exploit/windows/local/bypassuac
模块
bypassuac
模块不同于ask
模块,它不需要用户交互,可以直接执行绕过UAC操作。其原理通常基于:
- 劫持Windows高权限进程
- 利用特定的自动提升权限程序
操作步骤:
- 在Meterpreter会话中,加载
bypassuac
模块:use exploit/windows/local/bypassuac
- 设置Session:
set SESSION <session_id>
- 执行绕过:
exploit
- 成功绕过UAC后,即可执行
getsystem
获取SYSTEM权限:getsystem
优点:无需用户交互,成功率较高。
缺点:部分Windows版本可能已修复部分绕过方式,需要结合其他UAC绕过技术。
小结
getsystem
作为 Meterpreter 内置提权方法,主要依赖 命名管道模拟 和 令牌复制 来劫持 SYSTEM 权限。
- 其 核心思路 是 诱骗高权限进程进行身份认证,再利用 Windows 的进程信任机制获取 SYSTEM 权限。
- 默认方式 采用 命名管道模拟,可结合 令牌复制 方式进行尝试。
- 在某些环境下,提权可能受 UAC 限制,因此绕过 UAC 可能是必要步骤。
🚀 推荐做法:
- 先通过
whoami /groups
确认当前权限 - 若受限于 UAC,尝试
bypassuac
模块 - 执行
getsystem
,如失败则尝试不同提权方式
getsystem
提权方法虽然方便,但需要结合实际环境使用,合理选择绕过策略,以提高提权成功率。