Abus de Tokens

Reading time: 11 minutes

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)

Soutenir HackTricks

Tokens

Si vous ne savez pas ce que sont les Windows Access Tokens, lisez cette page avant de continuer :

Access Tokens

Peut-être pourriez-vous être en mesure d'escalader les privilèges en abusant des tokens que vous avez déjà

SeImpersonatePrivilege

C'est un privilège détenu par tout processus qui permet l'imitation (mais pas la création) de tout token, à condition qu'un handle puisse être obtenu. Un token privilégié peut être acquis à partir d'un service Windows (DCOM) en l'incitant à effectuer une authentification NTLM contre un exploit, permettant ensuite l'exécution d'un processus avec des privilèges SYSTEM. Cette vulnérabilité peut être exploitée à l'aide de divers outils, tels que juicy-potato, RogueWinRM (qui nécessite que winrm soit désactivé), SweetPotato, et PrintSpoofer.

RoguePotato, PrintSpoofer, SharpEfsPotato, GodPotato

JuicyPotato

SeAssignPrimaryPrivilege

Il est très similaire à SeImpersonatePrivilege, il utilisera la même méthode pour obtenir un token privilégié.
Ensuite, ce privilège permet d'assigner un token principal à un nouveau processus/suspendu. Avec le token d'imitation privilégié, vous pouvez dériver un token principal (DuplicateTokenEx).
Avec le token, vous pouvez créer un nouveau processus avec 'CreateProcessAsUser' ou créer un processus suspendu et définir le token (en général, vous ne pouvez pas modifier le token principal d'un processus en cours d'exécution).

SeTcbPrivilege

Si vous avez activé ce token, vous pouvez utiliser KERB_S4U_LOGON pour obtenir un token d'imitation pour tout autre utilisateur sans connaître les identifiants, ajouter un groupe arbitraire (administrateurs) au token, définir le niveau d'intégrité du token à "moyen", et assigner ce token au fil d'exécution actuel (SetThreadToken).

SeBackupPrivilege

Le système est amené à accorder tous les droits de lecture sur tout fichier (limité aux opérations de lecture) par ce privilège. Il est utilisé pour lire les hachages de mot de passe des comptes Administrateur locaux à partir du registre, après quoi des outils comme "psexec" ou "wmiexec" peuvent être utilisés avec le hachage (technique Pass-the-Hash). Cependant, cette technique échoue dans deux conditions : lorsque le compte Administrateur local est désactivé, ou lorsqu'une politique est en place qui retire les droits administratifs des Administrateurs locaux se connectant à distance.
Vous pouvez abuser de ce privilège avec :

Privileged Groups

SeRestorePrivilege

Ce privilège permet un accès en écriture à tout fichier système, indépendamment de la liste de contrôle d'accès (ACL) du fichier. Il ouvre de nombreuses possibilités d'escalade, y compris la capacité de modifier des services, effectuer du DLL Hijacking, et définir des débogueurs via les options d'exécution de fichiers d'image parmi diverses autres techniques.

SeCreateTokenPrivilege

SeCreateTokenPrivilege est un puissant privilège, particulièrement utile lorsqu'un utilisateur possède la capacité d'imiter des tokens, mais aussi en l'absence de SeImpersonatePrivilege. Cette capacité repose sur la possibilité d'imiter un token qui représente le même utilisateur et dont le niveau d'intégrité ne dépasse pas celui du processus actuel.

Points Clés :

  • Imitation sans SeImpersonatePrivilege : Il est possible de tirer parti de SeCreateTokenPrivilege pour EoP en imitant des tokens dans des conditions spécifiques.
  • Conditions pour l'imitation de token : Une imitation réussie nécessite que le token cible appartienne au même utilisateur et ait un niveau d'intégrité inférieur ou égal à celui du processus tentant l'imitation.
  • Création et modification de tokens d'imitation : Les utilisateurs peuvent créer un token d'imitation et l'améliorer en ajoutant un SID (Identifiant de Sécurité) d'un groupe privilégié.

SeLoadDriverPrivilege

Ce privilège permet de charger et décharger des pilotes de périphériques en créant une entrée de registre avec des valeurs spécifiques pour ImagePath et Type. Étant donné que l'accès en écriture direct à HKLM (HKEY_LOCAL_MACHINE) est restreint, HKCU (HKEY_CURRENT_USER) doit être utilisé à la place. Cependant, pour rendre HKCU reconnaissable par le noyau pour la configuration des pilotes, un chemin spécifique doit être suivi.

Ce chemin est \Registry\User\<RID>\System\CurrentControlSet\Services\DriverName, où <RID> est l'Identifiant Relatif de l'utilisateur actuel. À l'intérieur de HKCU, ce chemin entier doit être créé, et deux valeurs doivent être définies :

  • ImagePath, qui est le chemin vers le binaire à exécuter
  • Type, avec une valeur de SERVICE_KERNEL_DRIVER (0x00000001).

Étapes à Suivre :

  1. Accéder à HKCU au lieu de HKLM en raison de l'accès en écriture restreint.
  2. Créer le chemin \Registry\User\<RID>\System\CurrentControlSet\Services\DriverName dans HKCU, où <RID> représente l'Identifiant Relatif de l'utilisateur actuel.
  3. Définir ImagePath sur le chemin d'exécution du binaire.
  4. Assigner Type comme 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)

Plus de façons d'abuser de ce privilège dans https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/privileged-accounts-and-token-privileges#seloaddriverprivilege

SeTakeOwnershipPrivilege

Ceci est similaire à SeRestorePrivilege. Sa fonction principale permet à un processus de prendre possession d'un objet, contournant l'exigence d'un accès discrétionnaire explicite grâce à la fourniture de droits d'accès WRITE_OWNER. Le processus consiste d'abord à sécuriser la possession de la clé de registre prévue à des fins d'écriture, puis à modifier le DACL pour permettre les opérations d'écriture.

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

Ce privilège permet de déboguer d'autres processus, y compris de lire et d'écrire dans la mémoire. Diverses stratégies d'injection de mémoire, capables d'échapper à la plupart des solutions antivirus et de prévention des intrusions sur hôte, peuvent être employées avec ce privilège.

Dump mémoire

Vous pourriez utiliser ProcDump de la SysInternals Suite pour capturer la mémoire d'un processus. Plus précisément, cela peut s'appliquer au processus Local Security Authority Subsystem Service (LSASS), qui est responsable du stockage des informations d'identification des utilisateurs une fois qu'un utilisateur s'est connecté avec succès à un système.

Vous pouvez ensuite charger ce dump dans mimikatz pour obtenir des mots de passe :

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

RCE

Si vous voulez obtenir un shell NT SYSTEM, vous pouvez utiliser :

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

Vérifier les privilèges

whoami /priv

Les tokens qui apparaissent comme Désactivés peuvent être activés, vous pouvez en fait abuser des tokens Activés et Désactivés.

Activer tous les tokens

Si vous avez des tokens désactivés, vous pouvez utiliser le script EnableAllTokenPrivs.ps1 pour activer tous les tokens :

powershell
.\EnableAllTokenPrivs.ps1
whoami /priv

Ou le script intégré dans ce post.

Table

Feuille de triche complète des privilèges de jeton à https://github.com/gtworek/Priv2Admin, le résumé ci-dessous ne listera que les moyens directs d'exploiter le privilège pour obtenir une session admin ou lire des fichiers sensibles.

PrivilègeImpactOutilChemin d'exécutionRemarques
SeAssignPrimaryTokenAdminOutil tiers"Cela permettrait à un utilisateur d'imiter des jetons et de s'élever vers le système nt en utilisant des outils tels que potato.exe, rottenpotato.exe et juicypotato.exe"Merci à Aurélien Chalot pour la mise à jour. J'essaierai de reformuler cela en quelque chose de plus ressemblant à une recette bientôt.
SeBackupMenaceCommandes intégréesLire des fichiers sensibles avec robocopy /b

- Peut être plus intéressant si vous pouvez lire %WINDIR%\MEMORY.DMP

- SeBackupPrivilege (et robocopy) n'est pas utile lorsqu'il s'agit de fichiers ouverts.

- Robocopy nécessite à la fois SeBackup et SeRestore pour fonctionner avec le paramètre /b.

SeCreateTokenAdminOutil tiersCréer un jeton arbitraire incluant des droits d'administrateur local avec NtCreateToken.
SeDebugAdminPowerShellDupliquer le jeton lsass.exe.Script à trouver sur FuzzySecurity
SeLoadDriverAdminOutil tiers

1. Charger un pilote de noyau bogué tel que szkg64.sys
2. Exploiter la vulnérabilité du pilote

Alternativement, le privilège peut être utilisé pour décharger des pilotes liés à la sécurité avec la commande intégrée ftlMC. c'est-à-dire : fltMC sysmondrv

1. La vulnérabilité szkg64 est répertoriée comme CVE-2018-15732
2. Le szkg64 code d'exploitation a été créé par Parvez Anwar

SeRestoreAdminPowerShell

1. Lancer PowerShell/ISE avec le privilège SeRestore présent.
2. Activer le privilège avec Enable-SeRestorePrivilege).
3. Renommer utilman.exe en utilman.old
4. Renommer cmd.exe en utilman.exe
5. Verrouiller la console et appuyer sur Win+U

L'attaque peut être détectée par certains logiciels antivirus.

La méthode alternative repose sur le remplacement des binaires de service stockés dans "Program Files" en utilisant le même privilège

SeTakeOwnershipAdminCommandes intégrées

1. takeown.exe /f "%windir%\system32"
2. icalcs.exe "%windir%\system32" /grant "%username%":F
3. Renommer cmd.exe en utilman.exe
4. Verrouiller la console et appuyer sur Win+U

L'attaque peut être détectée par certains logiciels antivirus.

La méthode alternative repose sur le remplacement des binaires de service stockés dans "Program Files" en utilisant le même privilège.

SeTcbAdminOutil tiers

Manipuler des jetons pour inclure des droits d'administrateur local. Peut nécessiter SeImpersonate.

À vérifier.

Référence

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)

Soutenir HackTricks