Abusing Tokens

Erlernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)!

Tokens

Wenn Sie nicht wissen, was Windows-Zugriffstoken sind, lesen Sie diese Seite, bevor Sie fortfahren:

pageAccess Tokens

Möglicherweise können Sie Berechtigungen eskalieren, indem Sie die Tokens missbrauchen, die Sie bereits haben

SeImpersonatePrivilege

Dies ist ein Privileg, das von jedem Prozess gehalten wird und die Übernahme (aber nicht die Erstellung) eines beliebigen Tokens ermöglicht, sofern ein Handle dafür erhalten werden kann. Ein privilegiertes Token kann von einem Windows-Dienst (DCOM) erworben werden, indem man ihn dazu bringt, eine NTLM-Authentifizierung gegen einen Exploit durchzuführen, was anschließend die Ausführung eines Prozesses mit SYSTEM-Berechtigungen ermöglicht. Diese Schwachstelle kann mit verschiedenen Tools ausgenutzt werden, wie juicy-potato, RogueWinRM (der die Deaktivierung von WinRM erfordert), SweetPotato und PrintSpoofer.

pageRoguePotato, PrintSpoofer, SharpEfsPotato, GodPotatopageJuicyPotato

SeAssignPrimaryPrivilege

Es ist sehr ähnlich wie SeImpersonatePrivilege, es wird die gleiche Methode verwendet, um ein privilegiertes Token zu erhalten. Dann ermöglicht dieses Privileg das Zuweisen eines primären Tokens zu einem neuen/ausgesetzten Prozess. Mit dem privilegierten Übernahme-Token können Sie einen primären Token ableiten (DuplicateTokenEx). Mit dem Token können Sie einen neuen Prozess mit 'CreateProcessAsUser' erstellen oder einen Prozess suspendieren und das Token setzen (im Allgemeinen können Sie den primären Token eines laufenden Prozesses nicht ändern).

SeTcbPrivilege

Wenn Sie dieses Token aktiviert haben, können Sie KERB_S4U_LOGON verwenden, um ein Übernahme-Token für einen anderen Benutzer ohne Kenntnis der Anmeldeinformationen zu erhalten, eine beliebige Gruppe (Administratoren) zum Token hinzufügen, den Integritätslevel des Tokens auf "medium" setzen und diesen Token dem aktuellen Thread zuweisen (SetThreadToken).

SeBackupPrivilege

Das System wird veranlasst, allen Dateien (auf Lesevorgänge beschränkt) durch dieses Privileg vollen Lesezugriff zu gewähren. Es wird verwendet, um die Passwort-Hashes der lokalen Administrator-Konten aus der Registrierung zu lesen, woraufhin Tools wie "psexec" oder "wmicexec" mit dem Hash verwendet werden können (Pass-the-Hash-Technik). Diese Technik scheitert jedoch unter zwei Bedingungen: wenn das lokale Administrator-Konto deaktiviert ist oder wenn eine Richtlinie besteht, die administrativen Rechten von lokalen Administratoren, die sich remote verbinden, entfernt. Sie können dieses Privileg missbrauchen mit:

pagePrivileged Groups

SeRestorePrivilege

Dieses Privileg ermöglicht Schreibzugriff auf jede Systemdatei, unabhängig von der Zugriffssteuerungsliste (ACL) der Datei. Es eröffnet zahlreiche Möglichkeiten zur Eskalation, einschließlich der Möglichkeit, Dienste zu modifizieren, DLL-Hijacking durchzuführen und Debugger über Image File Execution Options einzurichten, unter verschiedenen anderen Techniken.

SeCreateTokenPrivilege

SeCreateTokenPrivilege ist eine leistungsstarke Berechtigung, besonders nützlich, wenn ein Benutzer die Fähigkeit besitzt, Tokens zu übernehmen, aber auch in Abwesenheit von SeImpersonatePrivilege. Diese Fähigkeit hängt von der Möglichkeit ab, ein Token zu übernehmen, das denselben Benutzer repräsentiert und dessen Integritätslevel nicht höher ist als der des aktuellen Prozesses.

Hauptpunkte:

  • Übernahme ohne SeImpersonatePrivilege: Es ist möglich, SeCreateTokenPrivilege für EoP zu nutzen, indem Tokens unter bestimmten Bedingungen übernommen werden.

  • Bedingungen für Token-Übernahme: Eine erfolgreiche Übernahme erfordert, dass das Ziel-Token demselben Benutzer gehört und einen Integritätslevel hat, der kleiner oder gleich dem Integritätslevel des Prozesses ist, der die Übernahme versucht.

  • Erstellung und Änderung von Übernahme-Tokens: Benutzer können ein Übernahme-Token erstellen und es verbessern, indem sie die SID (Security Identifier) einer privilegierten Gruppe hinzufügen.

SeLoadDriverPrivilege

Dieses Privileg ermöglicht es, Gerätetreiber zu laden und zu entladen, indem ein Registrierungseintrag mit spezifischen Werten für ImagePath und Type erstellt wird. Da der direkte Schreibzugriff auf HKLM (HKEY_LOCAL_MACHINE) eingeschränkt ist, muss stattdessen HKCU (HKEY_CURRENT_USER) verwendet werden. Um HKCU jedoch für die Konfiguration von Treibern für den Kernel erkennbar zu machen, muss ein spezifischer Pfad befolgt werden.

Dieser Pfad lautet \Registry\User\<RID>\System\CurrentControlSet\Services\DriverName, wobei <RID> die Relative Kennung des aktuellen Benutzers ist. Innerhalb von HKCU muss dieser gesamte Pfad erstellt und zwei Werte festgelegt werden:

  • ImagePath, der Pfad zur auszuführenden Binärdatei

  • Type, mit einem Wert von SERVICE_KERNEL_DRIVER (0x00000001).

Schritte zum Folgen:

  1. Greifen Sie auf HKCU anstelle von HKLM aufgrund des eingeschränkten Schreibzugriffs zu.

  2. Erstellen Sie den Pfad \Registry\User\<RID>\System\CurrentControlSet\Services\DriverName innerhalb von HKCU, wobei <RID> die Relative Kennung des aktuellen Benutzers darstellt.

  3. Legen Sie den ImagePath auf den Ausführungspfad der Binärdatei fest.

  4. Weisen Sie den Type als SERVICE_KERNEL_DRIVER (0x00000001) zu.

# 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)

Weitere Möglichkeiten, dieses Privileg zu missbrauchen, finden Sie unter https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/privileged-accounts-and-token-privileges#seloaddriverprivilege

SeTakeOwnershipPrivilege

Dies ist ähnlich wie SeRestorePrivilege. Seine Hauptfunktion ermöglicht es einem Prozess, Eigentum an einem Objekt zu übernehmen, um die Notwendigkeit für expliziten Zugriff durch die Bereitstellung von WRITE_OWNER-Zugriffsrechten zu umgehen. Der Prozess beinhaltet zunächst die Sicherung des Eigentums am beabsichtigten Registrierungsschlüssel für Schreibzwecke und dann die Änderung des DACL, um Schreiboperationen zu ermöglichen.

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

Diese Berechtigung erlaubt es, andere Prozesse zu debuggen, einschließlich Lesen und Schreiben im Speicher. Mit dieser Berechtigung können verschiedene Strategien für die Speicherinjektion eingesetzt werden, die die meisten Antiviren- und Host-IPS-Lösungen umgehen können.

Speicher dumpen

Sie könnten ProcDump aus der SysInternals Suite verwenden, um den Speicher eines Prozesses zu erfassen. Dies gilt insbesondere für den Local Security Authority Subsystem Service (LSASS)-Prozess, der für die Speicherung von Benutzeranmeldeinformationen verantwortlich ist, sobald sich ein Benutzer erfolgreich an einem System angemeldet hat.

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

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

RCE

Wenn Sie eine NT SYSTEM-Shell erhalten möchten, könnten Sie Folgendes verwenden:

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

Überprüfen von Berechtigungen

whoami /priv

Die Tokens, die als Deaktiviert erscheinen, können aktiviert werden, sodass Sie tatsächlich Aktivierte und Deaktivierte Tokens missbrauchen können.

Aktivieren Sie alle Tokens

Wenn Sie deaktivierte Tokens haben, können Sie das Skript EnableAllTokenPrivs.ps1 verwenden, um alle Tokens zu aktivieren:

.\EnableAllTokenPrivs.ps1
whoami /priv

Oder das Skript in diesem Beitrag.

Tabelle

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

PrivilegAuswirkungToolAusführungspfadBemerkungen

SeAssignPrimaryToken

Admin

Drittanbieter-Tool

"Es würde einem Benutzer ermöglichen, Tokens zu übernehmen und mit Tools wie potato.exe, rottenpotato.exe und juicypotato.exe zu nt-System zu eskalieren"

Danke an Aurélien Chalot für das Update. Ich werde versuchen, es bald etwas mehr rezeptartig umzuformulieren.

SeBackup

Bedrohung

Eingebaute Befehle

Lesen sensibler Dateien mit robocopy /b

- Möglicherweise interessanter, wenn Sie %WINDIR%\MEMORY.DMP lesen können - SeBackupPrivilege (und robocopy) sind nicht hilfreich, wenn es um geöffnete Dateien geht. - Robocopy erfordert sowohl SeBackup als auch SeRestore, um mit dem /b-Parameter zu funktionieren.

SeCreateToken

Admin

Drittanbieter-Tool

Erstellen eines beliebigen Tokens einschließlich lokaler Adminrechte mit NtCreateToken.

SeDebug

Admin

PowerShell

Duplizieren des Tokens von lsass.exe.

Skript zu finden unter FuzzySecurity

SeLoadDriver

Admin

Drittanbieter-Tool

1. Laden eines fehlerhaften Kernel-Treibers wie szkg64.sys 2. Ausnutzen der Treiberschwachstelle Alternativ kann das Privileg verwendet werden, um sicherheitsrelevante Treiber mit dem integrierten Befehl ftlMC zu entladen. z.B.: fltMC sysmondrv

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

SeRestore

Admin

PowerShell

1. Starten von PowerShell/ISE mit dem vorhandenen SeRestore-Privileg. 2. Aktivieren des Privilegs mit Enable-SeRestorePrivilege). 3. Umbenennen von utilman.exe in utilman.old 4. Umbenennen von cmd.exe in utilman.exe 5. Sperren der Konsole und Drücken von Win+U

Der Angriff kann von einigen AV-Software erkannt werden.

Alternative Methode beruht auf dem Ersetzen von Dienst-Binärdateien, die mit demselben Privileg in "Program Files" gespeichert sind

SeTakeOwnership

Admin

Eingebaute Befehle

1. takeown.exe /f "%windir%\system32" 2. icalcs.exe "%windir%\system32" /grant "%username%":F 3. Umbenennen von cmd.exe in utilman.exe 4. Sperren der Konsole und Drücken von Win+U

Der Angriff kann von einigen AV-Software erkannt werden.

Alternative Methode beruht auf dem Ersetzen von Dienst-Binärdateien, die mit demselben Privileg in "Program Files" gespeichert sind.

SeTcb

Admin

Drittanbieter-Tool

Manipulieren von Tokens, um lokale Adminrechte einzuschließen. Möglicherweise erfordert SeImpersonate.

Zu überprüfen.

Referenz

Erlernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!

Last updated