Potato 浅析
前言
在不用内核提权的情况下,用的最多的就是土豆和UAC Bypass了。
简要利用思路
取得了目标的访问权限后,查看可用权限
1 | whoami /priv |
例如,普通用户具有的权限如下图
管理员用户具有的权限如下图
iis用户具有的权限如下图
Privilege Name项表示具有的权限,State表示权限的状态,我们可以通过WinAPI AdjustTokenPrivileges将权限设置为Disabled或者Enabled
可供参考的实现代码
代码实现了开启指定权限(SeDebugPrivilege),并且查看当前用户名称和具有的权限
如果包含以下九个权限,我们就可以对其进一步利用
1 | SeImpersonatePrivilege |
注:
iis或者sqlserver的用户通常具有 SeImpersonatePrivilege
和 SeAssignPrimaryPrivilege
权限
Backup service用户通常具有 SeBackupPrivilege
和 SeRestorePrivilege
权限
SeImpersonatePrivilege权限的利用思路
参考资料
身份验证后模拟客户端(Impersonatea client after authentication)
拥有该权限的进程能够模拟已有的token,但不能创建新的token
以下用户具有该权限:
- 本地管理员组成员和本地服务帐户
- 由服务控制管理器启动的服务
- 由组件对象模型 (COM) 基础结构启动的并配置为在特定帐户下运行的COM服务器
通常,iis或者sqlserver用户具有该权限
利用思路
利用NTLM Relay to Local Negotiation获得System用户的Token 可使用开源工具Rotten Potato、lonelypotato或者Juicy Potato
通过WinAPI CreateProcessWithToken创建新进程,传入System用户的Token 具有SeImpersonatePrivilege权限才能创建成功
该Token具有System权限
可供参考的测试代码
代码实现了开启当前进程的SeImpersonatePrivilege权限,调用CreateProcessWithToken,传入当前进程的Token,创建一个进程,配合RottenPotato,可用来从LocalService提权至System权限
SeAssignPrimaryPrivilege权限的利用思路
参考资料
向进程(新创建或者挂起的进程)分配token
通常,iis或者sqlserver用户具有该权限
利用思路1
- 利用NTLM Relay to Local Negotiation获得System用户的Token
- 通过WinAPI CreateProcessAsUser创建新进程,传入System用户的Token
- 该Token具有System权限
可供参考的测试代码
代码实现了开启当前进程的SeAssignPrimaryTokenPrivilege权限,调用CreateProcessAsUser,传入当前进程的Token,创建一个进程,配合RottenPotato,可用来从LocalService提权至System权限
利用思路2
- 利用NTLM Relay to Local Negotiation获得System用户的Token
- 通过WinAPI CreateProcess创建一个挂起的新进程,参数设置为CREATE_SUSPENDED
- 通过WinAPI NtSetInformationProcess将新进程的Token替换为System用户的Token
- 该Token具有System权限
SeTcbPrivilege权限的利用思路
参考资料
等同于获得了系统的最高权限
利用思路
- 调用LsaLogonUser获得Token
- 将该Token添加至Local System account组
- 该Token具有System权限
可供参考的测试代码
代码实现了开启当前进程的SeTcbPrivilege权限,登录用户test1,将其添加至Local System account组,获得System权限,创建注册表项HKEY_LOCAL_MACHINE\SOFTWARE\testtcb
SeBackupPrivilege权限的利用思路
参考资料
用来实现备份操作,对当前系统任意文件具有读权限
利用思路
- 读取注册表
HKEY_LOCAL_MACHINE\SAM
、HKEY_LOCAL_MACHINE\SECURITY
和HKEY_LOCAL_MACHINE\SYSTEM
- 导出当前系统的所有用户hash mimikatz的命令如下:
1 | lsadump::sam /sam:SamBkup.hiv /system:SystemBkup.hiv |
可供参考的测试代码
代码实现了开启当前进程的SeBackupPrivilege权限,读取注册表,将其保存成文件C:\\test\\SAM
、C:\\test\\SECURITY
和C:\\test\\SYSTEM
SeRestorePrivilege权限的利用思路
参考资料
用来实现恢复操作,对当前系统任意文件具有写权限
利用思路1
- 获得SeRestorePrivilege权限,修改注册表HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options
- 劫持exe文件的启动
- 实现提权或是作为后门
利用思路2
- 获得SeRestorePrivilege权限,向任意路径写入dll文件
- 实现dll劫持
- 实现提权或是作为后门
可供参考的测试代码
代码实现了开启当前进程的SeRestorePrivilege权限,创建注册表项HKEY_LOCAL_MACHINE\SOFTWARE\testrestore
SeCreateTokenPrivilege权限的利用思路
参考资料
用来创建Primary Token
利用思路
- 通过WinAPI ZwCreateToken创建Primary Token
- 将Token添加至local administrator组
- 该Token具有System权限
可供参考的测试代码
代码实现了开启当前进程的SeCreateTokenPrivilege权限,创建Primary Token,将其添加至local administrator组,开启SeDebugPrivilege和SeTcbPrivilege权限
SeLoadDriverPrivilege权限的利用思路
参考资料
用来加载驱动文件
利用思路
- 创建驱动文件的注册表
1
2reg add hkcu\System\CurrentControlSet\CAPCOM /v ImagePath /t REG_SZ /d "\??\C:\test\Capcom.sys"
reg add hkcu\System\CurrentControlSet\CAPCOM /v Type /t REG_DWORD /d 1 - 加载驱动文件Capcom.sys
- Capcom.sys存在漏洞,系统加载后,可从普通用户权限提升至System权限,利用代码可参考
- 获得System权限
可供参考的测试代码
代码实现了开启当前进程的SeLoadDriverPrivilege权限,读取注册表项hkcu\System\CurrentControlSet\CAPCOM
,加载驱动文件Capcom.sys
SeTakeOwnershipPrivilege权限的利用思路
参考资料
同SeRestorePrivilege类似,对当前系统任意文件具有写权限
利用思路1
- 获得SeTakeOwnershipPrivilege权限,修改注册表HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options
- 劫持exe文件的启动
- 实现提权或是作为后门
利用思路2
- 获得SeTakeOwnershipPrivilege权限,向任意路径写入dll文件
- 实现dll劫持
- 实现提权或是作为后门
可供参考的测试代码
代码实现了开启当前进程的SeTakeOwnershipPrivilege权限,修改注册表项hklm\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options
的权限,普通用户权限对其具有完整操作权限
后续的写操作:
1 | reg add "hklm\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options" /v takeownership /t REG_SZ /d "C:\\Windows\\System32\\calc.exe" |
SeDebugPrivilege权限的利用思路
参考资料
用来调试指定进程,包括读写内存,常用作实现dll注入
利用思路
- 找到System权限的进程
- dll注入
- 获得System权限
可供参考的测试代码
代码实现了开启当前进程的SeDebugPrivilege权限,向指定进程注入dll
参考
Hot Potato
powershell版本Hot Potato:
Rotten Potato
lonelypotato
Juicy Potato
https://github.com/hatRiot/token-priv
https://foxglovesecurity.com/2017/08/25/abusing-token-privileges-for-windows-local-privilege-escalation/
https://foxglovesecurity.com/2016/01/16/hot-potato/
https://foxglovesecurity.com/2016/09/26/rotten-potato-privilege-escalation-from-service-accounts-to-system/
https://foxglovesecurity.com/2017/08/25/abusing-token-privileges-for-windows-local-privilege-escalation/