深入理解MSF之Getsystem
字数 2666 2025-08-18 11:35:30

深入理解MSF之Getsystem技术原理与实现

Windows访问控制模型基础

访问令牌(Access Token)

Windows访问控制模型的核心是访问令牌,它是在用户身份认证后生成的内核对象,包含以下关键信息:

  1. 用户标识符(User Identifier):唯一的安全标识符(SID)
  2. 组标识符(Group Identifiers):用户所属组的SIDs
  3. 权限(Privileges):线程能执行的系统级操作
  4. 所有者(Owner):默认所有者SID
  5. 访问控制列表(DACL):指定用户/组对对象的操作权限
  6. 登录会话(Logon Session):关联的登录会话标识符

令牌类型

  1. 主令牌(Primary Token):进程创建时分配的默认令牌
  2. 模拟令牌(Impersonation Token):线程模拟客户端时的临时令牌

安全检查流程

  1. 线程携带访问令牌访问安全对象
  2. 系统检查安全对象的安全描述符
  3. 依次执行ACE(访问控制条目)检查
  4. 通过检查后授予相应权限

ACE优先级规则:

  • 显式(手动设置) > 继承
  • 拒绝 > 允许

关键概念与技术

UAC与完整性级别

Windows引入UAC(用户账户控制)和MIC(强制完整性控制)机制:

完整性级别 描述
System 最高权限,系统和服务保留
Installer 修改系统核心组件的能力
High 管理员权限进程
Medium 标准用户进程
Low 与互联网交互的进程
Untrusted 匿名登录进程
AppContainer 轻量级应用容器

命名管道(Named Pipe)

命名管道是进程间通信(IPC)机制,关键特性:

  • 使用NPFS(命名管道文件系统)接口
  • 支持模拟客户端权限(ImpersonateNamedPipeClient)
  • 可通过标准文件API(ReadFile/WriteFile)操作

创建命名管道示例:

const char pipename[] = "\\\\.\\pipe\\endlessparadox";
CreateNamedPipeA(pipename, PIPE_ACCESS_DUPLEX, PIPE_TYPE_BYTE|PIPE_WAIT, 
                10, 2048, 2048, 0, NULL);

模拟令牌流程

  1. 创建命名管道并等待连接
  2. 高权限进程连接管道
  3. 调用ImpersonateNamedPipeClient模拟客户端
  4. 获取线程令牌并创建新进程
ImpersonateNamedPipeClient(hPipe);
OpenThreadToken(GetCurrentThread(), TOKEN_ALL_ACCESS, FALSE, &hToken);
DuplicateTokenEx(hToken, TOKEN_ALL_ACCESS, NULL, SecurityImpersonation, 
                TokenPrimary, &hSystemTokenDup);
CreateProcessWithTokenW(hSystemTokenDup, LOGON_WITH_PROFILE, NULL, 
                      cmd, 0x00000400, NULL, NULL, &si, &pi);

MSF的Getsystem技术详解

技术1:服务命名管道(elevate_via_service_namedpipe)

原理

  • 创建SYSTEM权限服务连接恶意命名管道
  • 模拟服务令牌获取SYSTEM权限

实现步骤

  1. 检查操作系统版本(排除NT4)
  2. 生成随机命名管道名
  3. 创建服务(使用cmd.exe,预期会失败)
  4. 服务尝试连接管道时模拟其令牌

OPSEC注意事项

  • 服务创建行为易被检测
  • 管道名称有特征

技术2:DLL服务命名管道(elevate_via_service_namedpipe2)

改进点

  • 写入DLL到磁盘
  • 通过rundll32.exe以SYSTEM权限执行

OPSEC问题

  • 文件落地易被检测
  • rundll32.exe行为可疑

技术3:令牌复制(elevate_via_service_tokendup)

前提条件

  • 需要SeDebugPrivilege权限
  • 仅适用于x86系统

实现方法

  1. 枚举服务获取PID
  2. 打开目标进程
  3. 反射式注入DLL
  4. 复制注入线程的令牌

优势

  • 无文件落地
  • 内存操作隐蔽

技术4:RPCSS服务利用(elevate_via_service_namedpipe_rpcss)

目标

  • 从NETWORK SERVICE提权至SYSTEM

关键流程

  1. 创建恶意命名管道
  2. 获取RPCSS服务PID
  3. 查找可用高权限Token句柄
  4. 复制最佳令牌
// 核心代码片段
get_system_token() {
    // 获取Token对象类型索引
    get_token_object_index();
    // 查询进程信息
    NtQueryInformationProcess();
    // 遍历句柄查找高权限Token
    for(...) {
        DuplicateHandle();
        GetTokenInformation();
        // 比较并选择最佳令牌
        if(is_equal_luid(...)) {
            hBestToken = hTokenDup;
        }
    }
    return hBestToken;
}

技术5:打印机欺骗(elevate_via_namedpipe_printspooler)

利用点

  • 打印机服务(spoolsv.exe)的路径规范化缺陷
  • 自动添加\pipe\spoolss后缀

欺骗过程

  1. 创建形如\\localhost/pipe/test的管道
  2. 规范化后变为\\localhost\pipe\test
  3. 打印机添加后缀变为\\localhost\pipe\test\pipe\spoolss
  4. 实际连接攻击者管道

RPC触发函数

RpcRemoteFindFirstPrinterChangeNotification(
    hPrinter, fdwFlags, fdwOptions, 
    pszLocalMachine, // 恶意管道路径
    dwPrinterLocal, cbBuffer, pBuffer);

技术6:EFSRPC利用(elevate_via_namedpipe_efs)

基础

  • MS-EFSR(加密文件系统远程)协议
  • 调用EfsRpcOpenFileRaw欺骗lsass.exe

绕过修复

  • 使用RpcBindingSetAuthInfoW设置AuthnLevel为RPC_C_AUTHN_LEVEL_PKT_PRIVACY

触发函数

EfsRpcOpenFileRaw(
    binding_h, hContext, 
    FileName, // 恶意管道路径
    Flags);

防御与检测规避

检测点分析

  1. Sigma规则检测

    # 检测服务创建+命名管道特征
    selection:
      CommandLine|contains: 
        - 'pipe'
        - 'echo'
      ParentImage|endswith: '\cmd.exe'
    condition: selection
    
  2. 行为特征

    • 短暂存在的命名管道
    • 服务创建行为
    • RPC调用模式异常

OPSEC改进建议

  1. 管道技术优化

    • 使用合法管道名称
    • 延长管道存在时间
    • 混淆命令行参数
  2. 内存操作

    • 使用无文件技术(反射DLL注入)
    • 擦除NT/DOS头规避内存扫描
  3. 权限获取

    • 优先使用RPC类技术(4/5/6)
    • 避免服务创建和文件落地

实际应用技巧

  1. 应急提权

    • 在只能利用一次的漏洞场景中,可尝试进程PID欺骗:
      # CS命令
      ps
      steal_token <pid>
      
  2. 自定义实现

    • 将提权技术集成到shellcode加载器
    • 上线即高权限,减少后期操作
  3. 技术选择矩阵

技术 适用系统 需要条件 隐蔽性
1-服务管道 Win2000+ 管理员
2-DLL服务 Win2000+ 管理员
3-令牌复制 WinXP-7 SeDebugPrivilege
4-RPCSS Win8.1+
5-打印机 Win8.1+
6-EFSRPC Win8-11

总结

Windows提权技术的核心在于令牌窃取,MSF的getsystem提供了多种实现方式。理解这些技术原理有助于:

  1. 根据目标环境选择最合适的提权方法
  2. 自定义开发规避检测的工具
  3. 更好地防御此类提权攻击

RPC相关技术(4/5/6)因其高隐蔽性和广泛适用性,成为现代Windows系统提权的首选方案。

深入理解MSF之Getsystem技术原理与实现 Windows访问控制模型基础 访问令牌(Access Token) Windows访问控制模型的核心是访问令牌,它是在用户身份认证后生成的内核对象,包含以下关键信息: 用户标识符(User Identifier) :唯一的安全标识符(SID) 组标识符(Group Identifiers) :用户所属组的SIDs 权限(Privileges) :线程能执行的系统级操作 所有者(Owner) :默认所有者SID 访问控制列表(DACL) :指定用户/组对对象的操作权限 登录会话(Logon Session) :关联的登录会话标识符 令牌类型 主令牌(Primary Token) :进程创建时分配的默认令牌 模拟令牌(Impersonation Token) :线程模拟客户端时的临时令牌 安全检查流程 线程携带访问令牌访问安全对象 系统检查安全对象的安全描述符 依次执行ACE(访问控制条目)检查 通过检查后授予相应权限 ACE优先级规则: 显式(手动设置) > 继承 拒绝 > 允许 关键概念与技术 UAC与完整性级别 Windows引入UAC(用户账户控制)和MIC(强制完整性控制)机制: | 完整性级别 | 描述 | |------------|------| | System | 最高权限,系统和服务保留 | | Installer | 修改系统核心组件的能力 | | High | 管理员权限进程 | | Medium | 标准用户进程 | | Low | 与互联网交互的进程 | | Untrusted | 匿名登录进程 | | AppContainer | 轻量级应用容器 | 命名管道(Named Pipe) 命名管道是进程间通信(IPC)机制,关键特性: 使用NPFS(命名管道文件系统)接口 支持模拟客户端权限(ImpersonateNamedPipeClient) 可通过标准文件API(ReadFile/WriteFile)操作 创建命名管道示例: 模拟令牌流程 创建命名管道并等待连接 高权限进程连接管道 调用ImpersonateNamedPipeClient模拟客户端 获取线程令牌并创建新进程 MSF的Getsystem技术详解 技术1:服务命名管道(elevate_ via_ service_ namedpipe) 原理 : 创建SYSTEM权限服务连接恶意命名管道 模拟服务令牌获取SYSTEM权限 实现步骤 : 检查操作系统版本(排除NT4) 生成随机命名管道名 创建服务(使用cmd.exe,预期会失败) 服务尝试连接管道时模拟其令牌 OPSEC注意事项 : 服务创建行为易被检测 管道名称有特征 技术2:DLL服务命名管道(elevate_ via_ service_ namedpipe2) 改进点 : 写入DLL到磁盘 通过rundll32.exe以SYSTEM权限执行 OPSEC问题 : 文件落地易被检测 rundll32.exe行为可疑 技术3:令牌复制(elevate_ via_ service_ tokendup) 前提条件 : 需要SeDebugPrivilege权限 仅适用于x86系统 实现方法 : 枚举服务获取PID 打开目标进程 反射式注入DLL 复制注入线程的令牌 优势 : 无文件落地 内存操作隐蔽 技术4:RPCSS服务利用(elevate_ via_ service_ namedpipe_ rpcss) 目标 : 从NETWORK SERVICE提权至SYSTEM 关键流程 : 创建恶意命名管道 获取RPCSS服务PID 查找可用高权限Token句柄 复制最佳令牌 技术5:打印机欺骗(elevate_ via_ namedpipe_ printspooler) 利用点 : 打印机服务(spoolsv.exe)的路径规范化缺陷 自动添加 \pipe\spoolss 后缀 欺骗过程 : 创建形如 \\localhost/pipe/test 的管道 规范化后变为 \\localhost\pipe\test 打印机添加后缀变为 \\localhost\pipe\test\pipe\spoolss 实际连接攻击者管道 RPC触发函数 : 技术6:EFSRPC利用(elevate_ via_ namedpipe_ efs) 基础 : MS-EFSR(加密文件系统远程)协议 调用EfsRpcOpenFileRaw欺骗lsass.exe 绕过修复 : 使用RpcBindingSetAuthInfoW设置AuthnLevel为RPC_ C_ AUTHN_ LEVEL_ PKT_ PRIVACY 触发函数 : 防御与检测规避 检测点分析 Sigma规则检测 : 行为特征 : 短暂存在的命名管道 服务创建行为 RPC调用模式异常 OPSEC改进建议 管道技术优化 : 使用合法管道名称 延长管道存在时间 混淆命令行参数 内存操作 : 使用无文件技术(反射DLL注入) 擦除NT/DOS头规避内存扫描 权限获取 : 优先使用RPC类技术(4/5/6) 避免服务创建和文件落地 实际应用技巧 应急提权 : 在只能利用一次的漏洞场景中,可尝试进程PID欺骗: 自定义实现 : 将提权技术集成到shellcode加载器 上线即高权限,减少后期操作 技术选择矩阵 : | 技术 | 适用系统 | 需要条件 | 隐蔽性 | |------|----------|----------|--------| | 1-服务管道 | Win2000+ | 管理员 | 低 | | 2-DLL服务 | Win2000+ | 管理员 | 中 | | 3-令牌复制 | WinXP-7 | SeDebugPrivilege | 高 | | 4-RPCSS | Win8.1+ | 无 | 高 | | 5-打印机 | Win8.1+ | 无 | 高 | | 6-EFSRPC | Win8-11 | 无 | 高 | 总结 Windows提权技术的核心在于令牌窃取,MSF的getsystem提供了多种实现方式。理解这些技术原理有助于: 根据目标环境选择最合适的提权方法 自定义开发规避检测的工具 更好地防御此类提权攻击 RPC相关技术(4/5/6)因其高隐蔽性和广泛适用性,成为现代Windows系统提权的首选方案。