Abusing Tokens

Reading time: 11 minutes

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks

Tokens

If you don't know what are Windows Access Tokens read this page before continuing:

Access Tokens

Vielleicht kannst du Privilegien eskalieren, indem du die Tokens, die du bereits hast, missbrauchst

SeImpersonatePrivilege

This is privilege that is held by any process allows the impersonation (but not creation) of any token, given that a handle to it can be obtained. A privileged token can be acquired from a Windows service (DCOM) by inducing it to perform NTLM authentication against an exploit, subsequently enabling the execution of a process with SYSTEM privileges. This vulnerability can be exploited using various tools, such as juicy-potato, RogueWinRM (which requires winrm to be disabled), SweetPotato, and PrintSpoofer.

RoguePotato, PrintSpoofer, SharpEfsPotato, GodPotato

JuicyPotato

SeAssignPrimaryPrivilege

It is very similar to SeImpersonatePrivilege, it will use the same method to get a privileged token.
Then, this privilege allows to assign a primary token to a new/suspended process. With the privileged impersonation token you can derivate a primary token (DuplicateTokenEx).
With the token, you can create a new process with 'CreateProcessAsUser' or create a process suspended and set the token (in general, you cannot modify the primary token of a running process).

SeTcbPrivilege

If you have enabled this token you can use KERB_S4U_LOGON to get an impersonation token for any other user without knowing the credentials, add an arbitrary group (admins) to the token, set the integrity level of the token to "medium", and assign this token to the current thread (SetThreadToken).

SeBackupPrivilege

Dieses Privileg veranlasst das System, vollen Lesezugriff auf jede Datei zu gewähren (beschränkt auf Leseoperationen). Es wird genutzt, um die Passwort-Hashes lokaler Administrator-Konten aus der Registry zu lesen, wonach Tools wie "psexec" oder "wmiexec" mit dem Hash verwendet werden können (Pass-the-Hash-Technik). Diese Methode schlägt jedoch in zwei Fällen fehl: wenn das Local Administrator-Konto deaktiviert ist oder wenn eine Richtlinie vorhanden ist, die Administratorrechte von Local Administrators bei Remote-Verbindungen entfernt.
Du kannst dieses Privileg ausnutzen mit:

Privileged Groups

SeRestorePrivilege

Dieses Privileg gewährt Schreibzugriff auf jede Systemdatei, unabhängig von der Access Control List (ACL) der Datei. Es eröffnet viele Eskalationsmöglichkeiten, darunter Dienste zu ändern, DLL Hijacking durchzuführen und Debugger über Image File Execution Options zu setzen, sowie verschiedene andere Techniken.

SeCreateTokenPrivilege

SeCreateTokenPrivilege ist ein mächtiges Recht, besonders nützlich, wenn ein Benutzer die Fähigkeit besitzt, Tokens zu impersonieren, aber auch ohne SeImpersonatePrivilege. Diese Fähigkeit hängt davon ab, ein Token zu impersonieren, das denselben Benutzer repräsentiert und dessen integrity level das des aktuellen Prozesses nicht übersteigt.

Wichtige Punkte:

  • Impersonation ohne SeImpersonatePrivilege: Es ist möglich, SeCreateTokenPrivilege für EoP zu nutzen, indem man Tokens unter bestimmten Bedingungen impersoniert.
  • Bedingungen für Token-Impersonation: Erfolgreiche Impersonation erfordert, dass das Zieltoken zum selben Benutzer gehört und ein integrity level hat, das kleiner oder gleich dem integrity level des Prozesses ist, der die Impersonation versucht.
  • Erstellung und Modifikation von Impersonation-Tokens: Benutzer können ein impersonation token erstellen und es erweitern, indem sie die SID (Security Identifier) einer privilegierten Gruppe hinzufügen.

SeLoadDriverPrivilege

This privilege allows to load and unload device drivers with the creation of a registry entry with specific values for ImagePath and Type. Since direct write access to HKLM (HKEY_LOCAL_MACHINE) is restricted, HKCU (HKEY_CURRENT_USER) must be utilized instead. However, to make HKCU recognizable to the kernel for driver configuration, a specific path must be followed.

This path is \Registry\User\<RID>\System\CurrentControlSet\Services\DriverName, where <RID> is the Relative Identifier of the current user. Inside HKCU, this entire path must be created, and two values need to be set:

  • ImagePath, which is the path to the binary to be executed
  • Type, with a value of SERVICE_KERNEL_DRIVER (0x00000001).

Steps to Follow:

  1. Access HKCU instead of HKLM due to restricted write access.
  2. Create the path \Registry\User\<RID>\System\CurrentControlSet\Services\DriverName within HKCU, where <RID> represents the current user's Relative Identifier.
  3. Set the ImagePath to the binary's execution path.
  4. Assign the Type as SERVICE_KERNEL_DRIVER (0x00000001).
python
# 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)

More ways to abuse this privilege in https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/privileged-accounts-and-token-privileges#seloaddriverprivilege

SeTakeOwnershipPrivilege

Das ist ähnlich wie SeRestorePrivilege. Seine Hauptfunktion erlaubt es einem Prozess, die Eigentümerschaft eines Objekts zu übernehmen und damit die Notwendigkeit expliziter diskretionärer Zugriffsrechte zu umgehen, indem WRITE_OWNER-Zugriffsrechte vergeben werden. Der Vorgang besteht darin, zunächst die Eigentümerschaft des vorgesehenen registry key für Schreibzwecke zu erlangen und anschließend die DACL zu ändern, um Schreibzugriffe zu ermöglichen.

bash
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

Dieses Privileg erlaubt das debug other processes, einschließlich des Lesens und Schreibens im Speicher. Verschiedene Strategien für memory injection, die die meisten antivirus- und host intrusion prevention solutions umgehen können, lassen sich mit diesem Privileg einsetzen.

Speicher auslesen

Sie können ProcDump aus der SysInternals Suite verwenden, um den Speicher eines Prozesses zu erfassen. Dies kann sich speziell auf den Prozess Local Security Authority Subsystem Service (LSASS) beziehen, der dafür verantwortlich ist, Benutzeranmeldeinformationen zu speichern, nachdem sich ein Benutzer erfolgreich an einem System angemeldet hat.

Sie können diesen Dump dann in mimikatz laden, um Passwörter zu erhalten:

mimikatz.exe
mimikatz # log
mimikatz # sekurlsa::minidump lsass.dmp
mimikatz # sekurlsa::logonpasswords

RCE

Wenn du eine NT SYSTEM-Shell erhalten möchtest, kannst du Folgendes verwenden:

bash
# Get the PID of a process running as NT SYSTEM
import-module psgetsys.ps1; [MyProcess]::CreateProcessFromParent(<system_pid>,<command_to_execute>)

SeManageVolumePrivilege

Dieses Recht (Perform volume maintenance tasks) erlaubt das Öffnen von rohen Volume-Geräte-Handles (z. B. \.\C:) für direkten Festplatten-I/O, der NTFS ACLs umgeht. Damit können Sie die Bytes beliebiger Dateien auf dem Volume kopieren, indem Sie die zugrunde liegenden Blöcke lesen, was das beliebige Lesen von Dateien mit sensiblen Inhalten ermöglicht (z. B. private Maschinenschlüssel in %ProgramData%\Microsoft\Crypto, Registry-Hives, SAM/NTDS via VSS). Dies ist besonders gravierend auf CA-Servern, wo das Exfiltrieren des CA-Private-Keys das Fälschen eines Golden Certificate ermöglicht, um sich als jeden Principal auszugeben.

See detailed techniques and mitigations:

Semanagevolume Perform Volume Maintenance Tasks

Privilegien prüfen

whoami /priv

Die tokens, die als Disabled angezeigt werden, können aktiviert werden; tatsächlich kann man sowohl Enabled- als auch Disabled-tokens ausnutzen.

Alle tokens aktivieren

Wenn du deaktivierte tokens hast, kannst du das script EnableAllTokenPrivs.ps1 verwenden, um alle tokens zu aktivieren:

bash
.\EnableAllTokenPrivs.ps1
whoami /priv

Oder das in diesem post eingebettete script.

Tabelle

Vollständiges Cheatsheet für Token-Privilegien unter https://github.com/gtworek/Priv2Admin, die folgende Zusammenfassung listet nur direkte Wege auf, das Privileg auszunutzen, um eine Admin-Sitzung zu erhalten oder sensible Dateien zu lesen.

PrivilegAuswirkungToolAusführungspfadBemerkungen
SeAssignPrimaryTokenAdminTool eines Drittanbieters"Es würde einem Benutzer erlauben, Tokens zu impersonifizieren und privesc zum nt system durchzuführen, indem Tools wie potato.exe, rottenpotato.exe und juicypotato.exe verwendet werden"Danke an Aurélien Chalot für das Update. Ich werde versuchen, es bald etwas rezeptartig umzuformulieren.
SeBackupBedrohungBuilt-in commandsSensible Dateien mit robocopy /b lesen.

- Kann interessanter sein, wenn Sie %WINDIR%\MEMORY.DMP lesen können

- SeBackupPrivilege (und robocopy) ist nicht hilfreich bei geöffneten Dateien.

- Robocopy benötigt sowohl SeBackup als auch SeRestore, um mit dem /b-Parameter zu funktionieren.

SeCreateTokenAdminTool eines DrittanbietersEinen beliebigen Token erstellen, einschließlich lokaler Admin-Rechte, mit NtCreateToken.
SeDebugAdminPowerShellDen Token von lsass.exe duplizieren.Script ist zu finden bei FuzzySecurity
SeLoadDriverAdminTool eines Drittanbieters

1. Lade einen fehlerhaften Kernel-Treiber wie szkg64.sys
2. Exploitiere die Treiberschwachstelle

Alternativ kann das Privileg verwendet werden, sicherheitsrelevante Treiber mit dem eingebauten Befehl ftlMC zu entladen. z. B.: fltMC sysmondrv

1. Die szkg64-Schwachstelle ist als CVE-2018-15732 gelistet
2. Der szkg64 Exploit-Code wurde von Parvez Anwar erstellt

SeRestoreAdminPowerShell

1. Starte PowerShell/ISE mit vorhandenem SeRestore-Privileg.
2. Aktiviere das Privileg mit Enable-SeRestorePrivilege ).
3. Benenne utilman.exe in utilman.old um
4. Benenne cmd.exe in utilman.exe um
5. Sperre die Konsole und drücke Win+U

Angriff kann von einigen AV-Programmen erkannt werden.

Eine alternative Methode beruht darauf, Service-Binärdateien im Ordner "Program Files" mit demselben Privileg zu ersetzen

SeTakeOwnershipAdminBuilt-in commands

1. takeown.exe /f "%windir%\system32"
2. icalcs.exe "%windir%\system32" /grant "%username%":F
3. Benenne cmd.exe in utilman.exe um
4. Sperre die Konsole und drücke Win+U

Angriff kann von einigen AV-Programmen erkannt werden.

Alternative Methode beruht darauf, Service-Binärdateien im Ordner "Program Files" mit demselben Privileg zu ersetzen.

SeTcbAdminTool eines Drittanbieters

Tokens manipulieren, um lokale Admin-Rechte einzuschließen. Kann SeImpersonate erfordern.

Zu verifizieren.

Referenz

  • Siehe diese Tabelle, die Windows-Tokens definiert: https://github.com/gtworek/Priv2Admin
  • Siehe dieses Paper über privesc mit tokens.
  • Microsoft – Durchführung von Volume-Wartungsaufgaben (SeManageVolumePrivilege): https://learn.microsoft.com/previous-versions/windows/it-pro/windows-10/security/threat-protection/security-policy-settings/perform-volume-maintenance-tasks
  • 0xdf – HTB: Zertifikat (SeManageVolumePrivilege → CA key exfil → Golden Certificate): https://0xdf.gitlab.io/2025/10/04/htb-certificate.html

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks