Abusing Tokens
Reading time: 10 minutes
tip
Impara e pratica l'Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica l'Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
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 di github.
Tokens
Se non sai cosa sono i Windows Access Tokens, leggi questa pagina prima di continuare:
Forse potresti essere in grado di elevare i privilegi abusando dei token che hai già
SeImpersonatePrivilege
Questo è un privilegio detenuto da qualsiasi processo che consente l'impersonificazione (ma non la creazione) di qualsiasi token, a condizione che si possa ottenere un handle. Un token privilegiato può essere acquisito da un servizio Windows (DCOM) inducendolo a eseguire l'autenticazione NTLM contro un exploit, abilitando successivamente l'esecuzione di un processo con privilegi SYSTEM. Questa vulnerabilità può essere sfruttata utilizzando vari strumenti, come juicy-potato, RogueWinRM (che richiede che winrm sia disabilitato), SweetPotato e PrintSpoofer.
RoguePotato, PrintSpoofer, SharpEfsPotato, GodPotato
SeAssignPrimaryPrivilege
È molto simile a SeImpersonatePrivilege, utilizzerà lo stesso metodo per ottenere un token privilegiato.
Poi, questo privilegio consente di assegnare un token primario a un nuovo processo/sospeso. Con il token di impersonificazione privilegiato puoi derivare un token primario (DuplicateTokenEx).
Con il token, puoi creare un nuovo processo con 'CreateProcessAsUser' o creare un processo sospeso e impostare il token (in generale, non puoi modificare il token primario di un processo in esecuzione).
SeTcbPrivilege
Se hai abilitato questo token puoi utilizzare KERB_S4U_LOGON per ottenere un token di impersonificazione per qualsiasi altro utente senza conoscere le credenziali, aggiungere un gruppo arbitrario (amministratori) al token, impostare il livello di integrità del token su "medio" e assegnare questo token al thread corrente (SetThreadToken).
SeBackupPrivilege
Il sistema è indotto a concedere a tutti l'accesso in lettura a qualsiasi file (limitato alle operazioni di lettura) da questo privilegio. Viene utilizzato per leggere gli hash delle password degli account Administrator locali dal registro, dopo di che, strumenti come "psexec" o "wmiexec" possono essere utilizzati con l'hash (tecnica Pass-the-Hash). Tuttavia, questa tecnica fallisce in due condizioni: quando l'account Local Administrator è disabilitato, o quando è in atto una politica che rimuove i diritti amministrativi dagli amministratori locali che si connettono in 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
- O come spiegato nella sezione elevare i privilegi con Backup Operators di:
SeRestorePrivilege
Il permesso per l'accesso in scrittura a qualsiasi file di sistema, indipendentemente dalla Access Control List (ACL) del file, è fornito da questo privilegio. Apre numerose possibilità di elevazione, inclusa la capacità di modificare i servizi, eseguire DLL Hijacking e impostare debugger tramite Image File Execution Options tra varie altre tecniche.
SeCreateTokenPrivilege
SeCreateTokenPrivilege è un permesso potente, particolarmente utile quando un utente possiede la capacità di impersonare token, ma anche in assenza di SeImpersonatePrivilege. Questa capacità si basa sulla possibilità di impersonare un token che rappresenta lo stesso utente e il cui livello di integrità non supera quello del processo corrente.
Punti Chiave:
- Impersonificazione senza SeImpersonatePrivilege: È possibile sfruttare SeCreateTokenPrivilege per EoP impersonando token in condizioni specifiche.
- Condizioni per l'Impersonificazione del Token: L'impersonificazione riuscita richiede che il token target appartenga allo stesso utente e abbia un livello di integrità che è minore o uguale al livello di integrità del processo che tenta l'impersonificazione.
- Creazione e Modifica di Token di Impersonificazione: Gli utenti possono creare un token di impersonificazione e migliorarlo aggiungendo un SID (Security Identifier) di un gruppo privilegiato.
SeLoadDriverPrivilege
Questo privilegio consente di caricare e scaricare driver di dispositivo con la creazione di una voce di registro con valori specifici per ImagePath
e Type
. Poiché l'accesso in scrittura diretto a HKLM
(HKEY_LOCAL_MACHINE) è limitato, è necessario utilizzare HKCU
(HKEY_CURRENT_USER). Tuttavia, per rendere HKCU
riconoscibile dal kernel per la configurazione del driver, deve essere seguita una specifica path.
Questo percorso è \Registry\User\<RID>\System\CurrentControlSet\Services\DriverName
, dove <RID>
è l'Identificatore Relativo dell'utente corrente. All'interno di HKCU
, deve essere creato l'intero percorso e devono essere impostati due valori:
ImagePath
, che è il percorso del binario da eseguireType
, con un valore diSERVICE_KERNEL_DRIVER
(0x00000001
).
Passi da Seguire:
- Accedi a
HKCU
invece diHKLM
a causa dell'accesso in scrittura limitato. - Crea il percorso
\Registry\User\<RID>\System\CurrentControlSet\Services\DriverName
all'interno diHKCU
, dove<RID>
rappresenta l'Identificatore Relativo dell'utente corrente. - Imposta
ImagePath
sul percorso di esecuzione del binario. - Assegna
Type
comeSERVICE_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 consente a un processo di assumere la proprietà di un oggetto, eludendo il requisito di accesso discrezionale esplicito attraverso la fornitura di diritti di accesso WRITE_OWNER. Il processo prevede prima di assicurarsi la proprietà della chiave di registro prevista per scopi di scrittura, quindi di modificare il 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 consente di debuggare altri processi, inclusa la lettura e scrittura nella memoria. Possono essere impiegate varie strategie per l'iniezione di memoria, capaci di eludere la maggior parte delle soluzioni antivirus e di prevenzione delle intrusioni host, con questo privilegio.
Dump della memoria
Puoi utilizzare ProcDump dalla SysInternals Suite per catturare la memoria di un processo. In particolare, questo può applicarsi al processo Local Security Authority Subsystem Service (LSASS), che è responsabile della memorizzazione delle credenziali degli utenti una volta che un utente ha effettuato l'accesso con successo 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>)
Controlla i privilegi
whoami /priv
I token che appaiono come Disabilitati possono essere abilitati, puoi effettivamente abusare dei token Abilitati e Disabilitati.
Abilita tutti i token
Se hai token disabilitati, puoi usare lo script EnableAllTokenPrivs.ps1 per abilitare tutti i token:
.\EnableAllTokenPrivs.ps1
whoami /priv
Or il script incorporato in questo post.
Tabella
Scheda completa dei privilegi dei token su https://github.com/gtworek/Priv2Admin, il riepilogo qui sotto elencherà 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 privesc al sistema nt utilizzando strumenti come potato.exe, rottenpotato.exe e juicypotato.exe" | Grazie a Aurélien Chalot per l'aggiornamento. Proverò a riformularlo in qualcosa di più simile a una ricetta presto. |
SeBackup | Minaccia | Comandi integrati | Leggi file sensibili con robocopy /b | - Potrebbe essere più interessante se puoi leggere %WINDIR%\MEMORY.DMP |
SeCreateToken | Admin | Strumento di terze parti | Crea token arbitrari inclusi i diritti di amministratore locale con NtCreateToken . | |
SeDebug | Admin | PowerShell | Duplica il token di lsass.exe . | Script disponibile su FuzzySecurity |
SeLoadDriver | Admin | Strumento di terze parti | 1. Carica un driver del kernel difettoso come | 1. La vulnerabilità |
SeRestore | Admin | PowerShell | 1. Avvia PowerShell/ISE con il privilegio SeRestore presente. | L'attacco potrebbe essere rilevato da alcuni software antivirus. Il metodo alternativo si basa sulla sostituzione dei file binari di servizio memorizzati in "Program Files" utilizzando lo stesso privilegio |
SeTakeOwnership | Admin | Comandi integrati | 1. | L'attacco potrebbe essere rilevato da alcuni software antivirus. Il metodo alternativo si basa sulla sostituzione dei file binari di servizio memorizzati in "Program Files" utilizzando lo stesso privilegio. |
SeTcb | Admin | Strumento di terze parti | Manipola i token per avere diritti di amministratore locale inclusi. Potrebbe richiedere SeImpersonate. Da verificare. |
Riferimento
- Dai un'occhiata a questa tabella che definisce i token di Windows: https://github.com/gtworek/Priv2Admin
- Dai un'occhiata a questo documento riguardo privesc con i token.
tip
Impara e pratica l'Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica l'Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
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 di github.