Abusing Tokens
Reading time: 11 minutes
tip
Impara e pratica il hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: 
HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure: 
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
 - Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
 - Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos github.
 
Tokens
Se non sai cosa sono i Windows Access Tokens leggi questa pagina prima di continuare:
Potresti riuscire a scalare privilegi abusando dei token che già possiedi
SeImpersonatePrivilege
Questo privilegio, se assegnato a un processo, permette l'impersonificazione (ma non la creazione) di qualsiasi token, purché si possa ottenere una handle su di esso. Un token privilegiato può essere acquisito da un servizio Windows (DCOM) inducendolo a effettuare l'autenticazione NTLM verso un exploit, permettendo poi l'esecuzione di un processo con privilegi SYSTEM. Questa vulnerabilità può essere sfruttata con vari strumenti, come juicy-potato, RogueWinRM (che richiede winrm disabilitato), SweetPotato e PrintSpoofer.
RoguePotato, PrintSpoofer, SharpEfsPotato, GodPotato
SeAssignPrimaryPrivilege
È molto simile a SeImpersonatePrivilege, usa lo stesso metodo per ottenere un token privilegiato.
Poi, questo privilegio permette di assegnare un primary token a un processo nuovo/sospeso. Con il token di impersonificazione privilegiato puoi derivare un primary token (DuplicateTokenEx).
Con il token, puoi creare un nuovo processo con 'CreateProcessAsUser' o creare un processo sospeso e impostare il token (in generale, non è possibile modificare il primary token di un processo in esecuzione).
SeTcbPrivilege
Se hai abilitato questo privilegio puoi usare KERB_S4U_LOGON per ottenere un impersonation token per qualsiasi altro utente senza conoscere le credenziali, aggiungere un gruppo arbitrario (admins) al token, impostare il livello di integrità del token a "medium", e assegnare questo token al thread corrente (SetThreadToken).
SeBackupPrivilege
Questo privilegio causa il sistema a concedere pieno accesso in lettura a qualsiasi file (limitato alle operazioni di lettura). Viene utilizzato per leggere gli hash delle password degli account Administrator locali dal registro, dopodiché strumenti come "psexec" o "wmiexec" possono essere usati con l'hash (tecnica Pass-the-Hash). Tuttavia, questa tecnica fallisce in due casi: quando l'account Local Administrator è disabilitato, o quando è in vigore una policy che rimuove i diritti amministrativi agli Local Administrators che si connettono da remoto.
Puoi abusare di questo privilegio con:
- https://github.com/Hackplayers/PsCabesha-tools/blob/master/Privesc/Acl-FullControl.ps1
 - https://github.com/giuliano108/SeBackupPrivilege/tree/master/SeBackupPrivilegeCmdLets/bin/Debug
 - seguendo IppSec in https://www.youtube.com/watch?v=IfCysW0Od8w&t=2610&ab_channel=IppSec
 - Oppure come spiegato nella sezione escalating privileges with Backup Operators di:
 
SeRestorePrivilege
Questo privilegio fornisce il permesso di scrittura su qualsiasi file di sistema, indipendentemente dalla Access Control List (ACL) del file. Apre numerose possibilità per l'escalation, inclusa la capacità di modificare servizi, eseguire DLL Hijacking e impostare debugger tramite Image File Execution Options, oltre ad altre tecniche.
SeCreateTokenPrivilege
SeCreateTokenPrivilege è un permesso potente, particolarmente utile quando un utente possiede la capacità di impersonare token, ma efficace anche in assenza di SeImpersonatePrivilege. Questa possibilità dipende dalla capacità di impersonare un token che rappresenti lo stesso utente e il cui livello di integrità non superi quello del processo corrente.
Punti chiave:
- Impersonazione senza SeImpersonatePrivilege: È possibile sfruttare SeCreateTokenPrivilege per EoP impersonando token in condizioni specifiche.
 - Condizioni per l'impersonazione di token: L'impersonazione avrà successo se il token target appartiene allo stesso utente e ha un livello di integrità minore o uguale a quello del processo che tenta l'impersonazione.
 - Creazione e modifica di impersonation token: Gli utenti possono creare un impersonation token e potenziarlo aggiungendo il SID di un gruppo privilegiato (Security Identifier).
 
SeLoadDriverPrivilege
Questo privilegio permette di caricare e scaricare driver di dispositivo creando una voce di registro con valori specifici per ImagePath e Type. Poiché l'accesso in scrittura diretto a HKLM (HKEY_LOCAL_MACHINE) è limitato, deve essere utilizzato HKCU (HKEY_CURRENT_USER). Tuttavia, per rendere HKCU riconoscibile dal kernel per la configurazione del driver, è necessario seguire un percorso specifico.
Questo percorso è \Registry\User\<RID>\System\CurrentControlSet\Services\DriverName, dove <RID> è il Relative Identifier dell'utente corrente. All'interno di HKCU deve essere creato tutto questo percorso, e vanno impostati due valori:
ImagePath, che è il percorso del binario da eseguireType, con valoreSERVICE_KERNEL_DRIVER(0x00000001).
Steps to Follow:
- Accedere a 
HKCUinvece diHKLMa causa dell'accesso in scrittura limitato. - Creare il percorso 
\Registry\User\<RID>\System\CurrentControlSet\Services\DriverNameall'interno diHKCU, dove<RID>rappresenta il Relative Identifier dell'utente corrente. - Impostare 
ImagePathsul percorso di esecuzione del binario. - Assegnare a 
Typeil valoreSERVICE_KERNEL_DRIVER(0x00000001). 
# Example Python code to set the registry values
import winreg as reg
# Define the path and values
path = r'Software\YourPath\System\CurrentControlSet\Services\DriverName' # Adjust 'YourPath' as needed
key = reg.OpenKey(reg.HKEY_CURRENT_USER, path, 0, reg.KEY_WRITE)
reg.SetValueEx(key, "ImagePath", 0, reg.REG_SZ, "path_to_binary")
reg.SetValueEx(key, "Type", 0, reg.REG_DWORD, 0x00000001)
reg.CloseKey(key)
Altri modi per abusare di questo privilegio in https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/privileged-accounts-and-token-privileges#seloaddriverprivilege
SeTakeOwnershipPrivilege
Questo è simile a SeRestorePrivilege. La sua funzione principale permette a un processo di assumere la proprietà di un oggetto, aggirando la necessità di un accesso discrezionale esplicito mediante l'assegnazione del diritto WRITE_OWNER. Il processo consiste prima nell'ottenere la proprietà della chiave di registro destinata per poter scrivere, quindi nel modificare la DACL per abilitare le operazioni di scrittura.
takeown /f 'C:\some\file.txt' #Now the file is owned by you
icacls 'C:\some\file.txt' /grant <your_username>:F #Now you have full access
# Use this with files that might contain credentials such as
%WINDIR%\repair\sam
%WINDIR%\repair\system
%WINDIR%\repair\software
%WINDIR%\repair\security
%WINDIR%\system32\config\security.sav
%WINDIR%\system32\config\software.sav
%WINDIR%\system32\config\system.sav
%WINDIR%\system32\config\SecEvent.Evt
%WINDIR%\system32\config\default.sav
c:\inetpub\wwwwroot\web.config
SeDebugPrivilege
Questo privilegio permette di eseguire il debug di altri processi, incluso leggere e scrivere nella memoria. Con questo privilegio possono essere impiegate varie strategie di memory injection, in grado di eludere la maggior parte degli antivirus e delle soluzioni di host intrusion prevention.
Dump della memoria
Puoi usare ProcDump dalla SysInternals Suite per catturare la memoria di un processo. In particolare, questo può essere applicato al processo Local Security Authority Subsystem Service (LSASS), che è responsabile della memorizzazione delle credenziali utente una volta che un utente ha effettuato con successo l'accesso a un sistema.
Puoi quindi caricare questo dump in mimikatz per ottenere le password:
mimikatz.exe
mimikatz # log
mimikatz # sekurlsa::minidump lsass.dmp
mimikatz # sekurlsa::logonpasswords
RCE
Se vuoi ottenere una shell NT SYSTEM puoi usare:
# Get the PID of a process running as NT SYSTEM
import-module psgetsys.ps1; [MyProcess]::CreateProcessFromParent(<system_pid>,<command_to_execute>)
SeManageVolumePrivilege
Questo diritto (Perform volume maintenance tasks) permette di aprire raw volume device handles (ad es., \.\C:) per I/O diretto su disco che bypassa gli NTFS ACLs. Con esso puoi copiare i byte di qualsiasi file sul volume leggendo i blocchi sottostanti, consentendo la lettura arbitraria di file contenenti materiale sensibile (ad es., chiavi private della macchina in %ProgramData%\Microsoft\Crypto, registry hives, SAM/NTDS via VSS). È particolarmente impattante sui server CA, dove l'esfiltrazione della chiave privata della CA permette di forgiare un Golden Certificate per impersonare qualsiasi entità.
See detailed techniques and mitigations:
Semanagevolume Perform Volume Maintenance Tasks
Verificare i privilegi
whoami /priv
I tokens che appaiono come Disabled possono essere abilitati; in realtà puoi abusare sia dei token Enabled che Disabled.
Abilitare tutti i token
Se hai token disabilitati, puoi usare lo script EnableAllTokenPrivs.ps1 per abilitare tutti i token:
.\EnableAllTokenPrivs.ps1
whoami /priv
Oppure lo script incorporato in questo post.
Tabella
Cheatsheet completo dei privilegi dei token su https://github.com/gtworek/Priv2Admin, il riepilogo seguente elenca solo i modi diretti per sfruttare il privilegio per ottenere una sessione admin o leggere file sensibili.
| Privilegio | Impatto | Strumento | Percorso di esecuzione | Osservazioni | 
|---|---|---|---|---|
SeAssignPrimaryToken | Admin | strumento di terze parti | "Consentirebbe a un utente di impersonare token e ottenere privesc su nt system utilizzando strumenti come potato.exe, rottenpotato.exe e juicypotato.exe" | Grazie a Aurélien Chalot per l'aggiornamento. Cercherò di riformularlo in modo più 'ricettario' a breve. | 
SeBackup | Threat | Comandi integrati | Leggere file sensibili con robocopy /b | - Può essere più interessante se si riesce a leggere %WINDIR%\MEMORY.DMP  | 
SeCreateToken | Admin | strumento di terze parti | Creare token arbitrari inclusi diritti locali admin con NtCreateToken. | |
SeDebug | Admin | PowerShell | Duplicare il token di lsass.exe. | Script da trovare su FuzzySecurity | 
SeLoadDriver | Admin | strumento di terze parti | 1. Caricare un kernel driver vulnerabile come   | 1. La vulnerabilità di   | 
SeRestore | Admin | PowerShell | 1. Avviare PowerShell/ISE con il privilegio SeRestore abilitato.  | L'attacco può essere rilevato da alcuni software AV. Il metodo alternativo si basa sulla sostituzione dei binari dei servizi memorizzati in "Program Files" usando lo stesso privilegio  | 
SeTakeOwnership | Admin | Comandi integrati | 1.   | L'attacco può essere rilevato da alcuni software AV. Il metodo alternativo si basa sulla sostituzione dei binari dei servizi memorizzati in "Program Files" usando lo stesso privilegio.  | 
SeTcb | Admin | strumento di terze parti | Manipolare i token per includere i diritti locali admin. Può richiedere SeImpersonate. Da verificare.  | 
Riferimenti
- Dai un'occhiata a questa tabella che definisce i token di Windows: https://github.com/gtworek/Priv2Admin
 - Dai un'occhiata a questo paper sul privesc con i token.
 - Microsoft – Eseguire attività di manutenzione del volume (SeManageVolumePrivilege): https://learn.microsoft.com/previous-versions/windows/it-pro/windows-10/security/threat-protection/security-policy-settings/perform-volume-maintenance-tasks
 - 0xdf – HTB: Certificate (SeManageVolumePrivilege → CA key exfil → Golden Certificate): https://0xdf.gitlab.io/2025/10/04/htb-certificate.html
 
tip
Impara e pratica il hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: 
HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure: 
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
 - Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
 - Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos github.
 
HackTricks