欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 锐评 > Meterpreter之getsystem命令提权原理详解

Meterpreter之getsystem命令提权原理详解

2025/2/26 15:17:42 来源:https://blog.csdn.net/2301_79518550/article/details/145671321  浏览:    关键词:Meterpreter之getsystem命令提权原理详解

在 Windows 渗透测试过程中,获取系统的最高权限是攻击者的最终目标。getsystemMetasploit 中用于提权的命令,旨在将当前的 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 级进程 也依赖管道进行通信。因此,攻击者可以利用该机制劫持 高权限进程的访问令牌,进而提升权限。

命名管道的特点

  • 全双工通信:支持数据的 双向流动,可同时进行读写。
  • 跨进程、跨机器通信:可用于本地进程间通信,或 远程计算机交互(前提是目标系统允许)。
  • 权限控制:可设置访问控制权限,限制特定用户或进程的管道访问权限。
  • 文件系统兼容:操作方式类似文件系统,可使用 CreateFileReadFile 等 API 进行读写。

2. getsystem 提权原理

getsystem 是 Metasploit 中的一个命令,主要用于将当前的 Meterpreter 会话 提升至 NT AUTHORITY\SYSTEM 权限,获得对目标系统的完全控制权限。该命令通过一系列本地提权(LPE)技术来实现权限提升。

默认提权方式

当执行 getsystem 时,Metasploit 会自动尝试使用系统支持的最佳提权方式。通常,它会尝试多种技术,直到成功为止。

通过运行 getsystem -h 命令可以查看其支持的所有提权技术,如图所示:

getsystem 提权方式示意图
如果默认的提权方式失败,用户可以手动指定不同的提权技术来进行尝试:

meterpreter > getsystem -t 2
meterpreter > getsystem -t 3

下面将详细介绍各种提权方式的原理、优缺点和注意事项。

Technique 1 - Named Pipe Impersonation(命名管道模拟)

命名管道模拟(Named Pipe Impersonation)是 getsystem 中最常用的提权方法之一。它通过创建一个伪造的命名管道,诱导一个高权限进程(如 SYSTEM 进程)连接到该管道,并利用 Windows 的进程间通信(IPC)机制 模拟身份,劫持该进程的访问令牌,从而提升权限。

具体流程:
  1. 创建伪造的命名管道(例如 \\.\pipe\fakepipe)。

    • 这个伪造的命名管道将用来诱导系统进程连接。
  2. 等待 SYSTEM 权限的进程(例如 Windows 服务)连接到该管道

    • 目标是让 SYSTEM 权限的进程(如 winlogon.exelsass.exe 等)主动连接到伪造的管道。
  3. 模拟身份认证,劫持该 SYSTEM 进程的访问令牌。

    • 利用 ImpersonateNamedPipeClient API 将当前进程的权限提升至 SYSTEM 级别。
  4. 复制 SYSTEM 令牌,并将其应用到 Meterpreter 进程中,最终实现权限提升。

    • 通过 DuplicateTokenEx API 复制 SYSTEM 进程的令牌并将其应用到 Meterpreter 进程,完成提权。
优点:
  • 无需利用内核漏洞,适用于大多数 Windows 版本(包括 Windows 10 和 Server 系列)。
  • 无需特定权限,只需要 Meterpreter 会话中的普通管理员权限。
局限性:
  • 需要 SeImpersonatePrivilege 权限,系统级的进程可能会启用访问控制,导致攻击失败。
  • 新版本的 Windows 可能会加强对该方式的检测,防止命名管道模拟。

Technique 2 - Token Duplication(令牌复制)

令牌复制技术(Token Duplication)利用 Windows 访问令牌(Access Token) 的复制机制来提升权限。Windows 中,每个进程都与一个访问令牌绑定,令牌代表了进程的安全上下文(包括权限、身份等信息)。攻击者通过复制系统级别进程的令牌并应用到自己的进程中,从而实现权限提升。

具体流程:
  1. 获取 SYSTEM 权限进程的 PID

    • 通过 Meterpreter 查看系统进程列表,获取 SYSTEM 级别进程(如 winlogon.exelsass.exe 等)的 PID。
  2. 使用 OpenProcessToken API 打开目标进程的访问令牌

    • 获取 SYSTEM 进程的访问令牌,使其能够被复制。
  3. 通过 DuplicateTokenEx API 复制令牌,并使用 ImpersonateLoggedOnUser API 让当前进程使用该令牌。

    • 将 SYSTEM 进程的令牌复制到当前 Meterpreter 进程,从而提升权限。
  4. 令牌复制成功后,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。
操作步骤:

  1. 在Meterpreter会话中,加载ask模块:
    use exploit/windows/local/ask
    
  2. 设置当前Session
    set SESSION <session_id>
    
  3. 伪装可执行文件名称(例如Windows更新程序):
    set FILENAME windows_update.exe
    
  4. 运行绕过:
    exploit
    
  5. 等待目标用户执行文件,绕过UAC后即可运行getsystem提权。

缺点:需要用户交互,即目标用户必须手动执行该文件。

4.2 exploit/windows/local/bypassuac 模块

bypassuac模块不同于ask模块,它不需要用户交互,可以直接执行绕过UAC操作。其原理通常基于:

  • 劫持Windows高权限进程
  • 利用特定的自动提升权限程序

操作步骤:

  1. 在Meterpreter会话中,加载bypassuac模块:
    use exploit/windows/local/bypassuac
    
  2. 设置Session:
    set SESSION <session_id>
    
  3. 执行绕过:
    exploit
    
  4. 成功绕过UAC后,即可执行getsystem获取SYSTEM权限:
    getsystem
    

优点:无需用户交互,成功率较高。

缺点:部分Windows版本可能已修复部分绕过方式,需要结合其他UAC绕过技术


小结

getsystem 作为 Meterpreter 内置提权方法,主要依赖 命名管道模拟令牌复制 来劫持 SYSTEM 权限。

  • 核心思路诱骗高权限进程进行身份认证,再利用 Windows 的进程信任机制获取 SYSTEM 权限。
  • 默认方式 采用 命名管道模拟,可结合 令牌复制 方式进行尝试。
  • 在某些环境下,提权可能受 UAC 限制,因此绕过 UAC 可能是必要步骤。

🚀 推荐做法

  1. 先通过 whoami /groups 确认当前权限
  2. 若受限于 UAC,尝试 bypassuac 模块
  3. 执行 getsystem,如失败则尝试不同提权方式

getsystem 提权方法虽然方便,但需要结合实际环境使用,合理选择绕过策略,以提高提权成功率。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词