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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/22401.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入理解HttpSecurity的设计

一、HttpSecurity的应用 在前章节的介绍中我们讲解了基于配置文件的使用方式,也就是如下的使用。 也就是在配置文件中通过 security:http 等标签来定义了认证需要的相关信息,但是在SpringBoot项目中,我们慢慢脱离了xml配置文件的方式,在SpringSecurity中提供了HttpSecurity…

软件集成测试的技术要求

文章目录 一、软件集成测试的概念二、测试对象三、测试目的四、进入条件五、测试内容六、测试环境七、测试实施方一、软件集成测试的概念 软件集成测试(Software Integration Testing),也称部件测试,一种旨在暴露接口以及集成组件间交互时存在的缺陷的测试。集成测试是灰盒…

STM32-有关内存堆栈、map文件

STM32堆栈空间大小设置_stm32堆栈分配大小-CSDN博客 STM32堆栈的大小及内存四&#xff08;五&#xff09;区的分析 - 天街小雨润地狠 - 博客园 .map文件的位置

java方法学习

java 方法 在Java中&#xff0c;方法是类&#xff08;或对象&#xff09;的行为或功能的实现。&#xff08;一起实现一个功能&#xff09;java的方法类似于其他语言的函数&#xff0c;是一段用来完成特定功能的代码片段。 方法是解决一类问题步骤的有序结合。 方法包含于类或…

编程小白冲Kaggle每日打卡(12)--kaggle学堂:<机器学习简介>模型如何工作

Kaggle官方课程链接&#xff1a;How Models Work 本专栏旨在Kaggle官方课程的汉化&#xff0c;让大家更方便地看懂。 How Models Work 第一步&#xff0c;如果你是机器学习的新手。 Introduction 我们将从概述机器学习模型的工作原理和使用方法开始。如果你以前做过统计建模…

企业知识库构建智慧协作平台

内容概要 现代企业知识库作为智慧协作平台的核心载体&#xff0c;其架构设计需兼顾知识资产的系统性沉淀与敏捷化应用。通过集中化管理机制&#xff0c;企业可将分散于各部门的文档、流程指南及项目经验转化为结构化数字资产&#xff0c;形成具备智能检索能力的知识图谱。在技…

Swiper插件的运用和学习

Swiper中文网-轮播图幻灯片js插件,H5页面前端开发 Swiper 是目前最流行的免费开源轮播组件之一&#xff0c;它功能强大、高度可定制且兼容性好&#xff0c;支持移动端手势操作和丰富的交互动画。 下载Swiper压缩包 轮播图演示页面。可以看见各种不同切换效果的轮播图 然后解压…

Git 合并冲突解决与状态分析笔记

前言 在使用 Git 进行代码管理时&#xff0c;合并分支是常见的操作之一。然而&#xff0c;在合并过程中可能会遇到冲突问题&#xff0c;尤其是在多人协作开发的场景下。本文将详细介绍如何解决 Git 合并冲突&#xff0c;并结合实际案例分析 git status 的输出含义。 背景 在…

ChromeDriver版本不匹配问题的解决

今天运行一个以前写的爬虫程序&#xff0c;遇到如下错误&#xff1a; selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This version of ChromeDriver only supports Chrome version 121 Current browser version is 133.0.6943.98 w…

支持向量机(SVM):算法讲解与原理推导

1 SVM介绍 SVM是一个二类分类器&#xff0c;它的全称是Support Vector Machine&#xff0c;即支持向量机。 SVM的目标是找到一个超平面&#xff0c;使用两类数据离这个超平面越远越好&#xff0c;从而对新的数据分类更准确&#xff0c;即使分类器更加健壮。比如上面的图中&am…

华为云deepseek大模型平台:deepseek满血版

华为云硅基流动使用Chatbox接入DeepSeek-R1满血版671B 1、注册&#xff1a; 华为云deepseek大模型平台注册&#xff1a;https://cloud.siliconflow.cn/i/aDmz6aVN 说明&#xff1a;填写邀请码的话邀请和被邀请的账号都会获得2000 万 Tokens&#xff1b;2个帐号间不会与其他关联…

保姆级! 本地部署DeepSeek-R1大模型 安装Ollama Api 后,Postman本地调用 deepseek

要在Postman中访问Ollama API并调用DeepSeek模型&#xff0c;你需要遵循以下步骤。首先&#xff0c;确保你有一个有效的Ollama服务器实例运行中&#xff0c;并且DeepSeek模型已经被加载。 可以参考我的这篇博客 保姆级&#xff01;使用Ollama本地部署DeepSeek-R1大模型 并java…

ESP32-S3 实战指南:BOOT-KEY 按键驱动开发全解析

一、基础知识 本篇我们使用 BOOT 按键来学习一下 GPIO 功能&#xff0c;首先补充一下相关术语介绍。 1、GPIO&#xff08;General Purpose Input/Output&#xff09; GPIO 是微控制器上的通用引脚&#xff0c;既可以作为输入&#xff08;读取外部信号&#xff09;&#xff0…

Win11 24h2 不能正常使用ensp的问题(已解决)

因为Win11 24h2的内核大小更改&#xff0c;目前virtualbox在7.1.4中更新解决了。所以Win11 24H2系统版本无法使用 5.x.xx的virtualbox版本&#xff0c;virtualbox对于这个5.x.xx版本早已停止维护&#xff0c;所以这个以后不会有调整。 对应的报错代码是 virtualbox错误代码&…

常用电脑,护眼软件推荐 f.lux 3400K | 撰写论文 paper

常用电脑&#xff1f;平均每天用 5 个小时&#xff1f;你就要考虑用一个护眼软件了&#xff0c;对皮肤也好。因为电脑屏幕有辐射&#xff0c;比如蓝光。 f.lux 作为一款专业护眼软件&#xff0c;值得使用。之前用了三年的 Iris Pro&#xff0c;现在 f.lux 做的更好了。 使用…

在 Mac ARM 架构的 macOS 系统上启用 F1 键作为 Snipaste 的截屏快捷键

在 Mac ARM 架构的 macOS 系统上启用 F1 键作为 Snipaste 的截屏快捷键&#xff0c;主要涉及到两个方面&#xff1a;确保 F1 键作为标准功能键工作 和 在 Snipaste 中设置 F1 为快捷键。 因为 Mac 默认情况下&#xff0c;F1-F12 键通常用作控制屏幕亮度、音量等系统功能的快捷键…

开源一款I2C电机驱动扩展板-FreakStudio多米诺系列

总线直流电机扩展板 原文链接&#xff1a; FreakStudio的博客 摘要 设计了一个I2C电机驱动板&#xff0c;通过I2C接口控制多个电机的转速和方向&#xff0c;支持刹车和减速功能。可连接16个扩展板&#xff0c;具有PWM输出、过流过热保护和可更换电机驱动芯片。支持按键控制…

Spring Security+JWT+Redis实现项目级前后端分离认证授权

1. 整体概述 权限管理包括用户身份认证和授权两部分&#xff0c;简称认证授权。对于需要访问控制到资源&#xff0c;用户首先经过身份认证&#xff0c;认证通过后用户具有该资源的访问权限方可访问。 1.1 认证概述 认证是确认用户身份的过程&#xff0c;确保用户是谁。 1.1.1 …

数据结构系列三:List+顺序表+ArrayList

数据结构系列三 一、List&#xff08;1&#xff09;什么是List&#xff08;2&#xff09;常见接口介绍&#xff08;3&#xff09;List的使用 二、顺序表与ArrayList&#xff08;1&#xff09;线性表&#xff08;2&#xff09;顺序表&#xff08;3&#xff09;顺序表常用方法的模…

全局变量,局部变量

在main函数中又定义一遍全局变量&#xff1a;会导致程序出错 因为在函数中调用这个全局变量时&#xff0c;调用的值是在头文件下面的初始值&#xff0c;虽然你在main函数中改变了变量的值&#xff0c;但是你在main函数中重新定义了 如果这样写会过50%的数据&#xff0c;因为在…