当前位置: 首页 > news >正文

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 提权方法虽然方便,但需要结合实际环境使用,合理选择绕过策略,以提高提权成功率。

相关文章:

  • Zotero 快速参考文献导出(特定期刊引用)
  • 区块链相关方法-波士顿矩阵 (BCG Matrix)
  • Codes 开源免费研发项目管理平台 2025年第一个大版本3.0.0 版本发布及创新的轻IPD实现
  • 在LangFlow中集成OpenAI Compatible API类型的大语言模型
  • 不同类型的网站选择不同的服务器,那么应该怎么选择服务器呢?
  • STM32-心知天气项目
  • python包重要修改
  • 如何把windows机器作为SSH客户端免密登录
  • Markdown使用方法文字版解读
  • 数据表的存储过程和函数介绍
  • OpenBMC:BmcWeb app.run
  • tortoiseGit的使用和上传拉取
  • 使用docker开发镜像编译
  • pytest下allure
  • 医院安全(不良)事件上报系统源码,基于Laravel8开发,依托其优雅的语法与强大的扩展能力
  • 更换node版本
  • LLM:Agent
  • 【多模态处理篇四】【DeepSeek跨模态检索:联合嵌入空间构建方案 】
  • Ruby Dir 类和方法详解
  • UE求职Demo开发日志#35、36 搬boss和主线任务自动接逻辑
  • A股三大股指低收:汽车股领涨,大金融走弱,两市成交近1.1万亿元
  • 音乐节困于流量
  • 新华时评:让医德医风建设为健康中国护航
  • 证券日报:降准今日正式落地,年内或还有降准空间
  • 六连板成飞集成:航空零部件业务收入占比为1.74%,市场环境没有重大调整
  • 国新办将就2025年4月份国民经济运行情况举行新闻发布会