# Abus de Tokens {{#include ../../banners/hacktricks-training.md}} ## Tokens Si vous **ne savez pas ce que sont les Windows Access Tokens**, lisez cette page avant de continuer : {{#ref}} access-tokens.md {{#endref}} **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](https://github.com/ohpe/juicy-potato), [RogueWinRM](https://github.com/antonioCoco/RogueWinRM) (qui nécessite que winrm soit désactivé), [SweetPotato](https://github.com/CCob/SweetPotato), et [PrintSpoofer](https://github.com/itm4n/PrintSpoofer). {{#ref}} roguepotato-and-printspoofer.md {{#endref}} {{#ref}} juicypotato.md {{#endref}} ### 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 accès en lecture** à 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 : - [https://github.com/Hackplayers/PsCabesha-tools/blob/master/Privesc/Acl-FullControl.ps1](https://github.com/Hackplayers/PsCabesha-tools/blob/master/Privesc/Acl-FullControl.ps1) - [https://github.com/giuliano108/SeBackupPrivilege/tree/master/SeBackupPrivilegeCmdLets/bin/Debug](https://github.com/giuliano108/SeBackupPrivilege/tree/master/SeBackupPrivilegeCmdLets/bin/Debug) - suivant **IppSec** dans [https://www.youtube.com/watch?v=IfCysW0Od8w\&t=2610\&ab_channel=IppSec](https://www.youtube.com/watch?v=IfCysW0Od8w&t=2610&ab_channel=IppSec) - Ou comme expliqué dans la section **escalade des privilèges avec les opérateurs de sauvegarde** de : {{#ref}} ../active-directory-methodology/privileged-groups-and-token-privileges.md {{#endref}} ### SeRestorePrivilege La permission pour **l'accès en écriture** à tout fichier système, indépendamment de la liste de contrôle d'accès (ACL) du fichier, est fournie par ce privilège. Cela 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 une permission puissante, 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 du pilote, un chemin spécifique doit être suivi. Ce chemin est `\Registry\User\\System\CurrentControlSet\Services\DriverName`, où `` 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\\System\CurrentControlSet\Services\DriverName` dans `HKCU`, où `` 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](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 :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 pouvez utiliser [ProcDump](https://docs.microsoft.com/en-us/sysinternals/downloads/procdump) de la [SysInternals Suite](https://docs.microsoft.com/en-us/sysinternals/downloads/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**](https://en.wikipedia.org/wiki/Local_Security_Authority_Subsystem_Service)**)**, 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 souhaitez obtenir un shell `NT SYSTEM`, vous pouvez utiliser : - [**SeDebugPrivilege-Exploit (C++)**](https://github.com/bruno-1337/SeDebugPrivilege-Exploit) - [**SeDebugPrivilegePoC (C#)**](https://github.com/daem0nc0re/PrivFu/tree/main/PrivilegedOperations/SeDebugPrivilegePoC) - [**psgetsys.ps1 (Script Powershell)**](https://raw.githubusercontent.com/decoder-it/psgetsystem/master/psgetsys.ps1) ```bash # Get the PID of a process running as NT SYSTEM import-module psgetsys.ps1; [MyProcess]::CreateProcessFromParent(,) ``` ## 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**](https://raw.githubusercontent.com/fashionproof/EnableAllTokenPrivs/master/EnableAllTokenPrivs.ps1) pour activer tous les tokens : ```bash .\EnableAllTokenPrivs.ps1 whoami /priv ``` Ou le **script** intégré dans ce [**post**](https://www.leeholmes.com/adjusting-token-privileges-in-powershell/). ## Table Feuille de triche complète des privilèges de jeton à [https://github.com/gtworek/Priv2Admin](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ège | Impact | Outil | Chemin d'exécution | Remarques | | -------------------------- | ----------- | ----------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | **`SeAssignPrimaryToken`** | _**Admin**_ | Outil 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](https://twitter.com/Defte_) pour la mise à jour. J'essaierai de reformuler cela en quelque chose de plus ressemblant à une recette bientôt. | | **`SeBackup`** | **Menace** | _**Commandes intégrées**_ | Lire 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.

| | **`SeCreateToken`** | _**Admin**_ | Outil tiers | Créer un jeton arbitraire incluant des droits d'administrateur local avec `NtCreateToken`. | | | **`SeDebug`** | _**Admin**_ | **PowerShell** | Dupliquer le jeton `lsass.exe`. | Script à trouver sur [FuzzySecurity](https://github.com/FuzzySecurity/PowerShell-Suite/blob/master/Conjure-LSASS.ps1) | | **`SeLoadDriver`** | _**Admin**_ | Outil 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

| | **`SeRestore`** | _**Admin**_ | **PowerShell** |

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

| | **`SeTakeOwnership`** | _**Admin**_ | _**Commandes 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.

| | **`SeTcb`** | _**Admin**_ | Outil tiers |

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

À vérifier.

| | ## Référence - Jetez un œil à ce tableau définissant les jetons Windows : [https://github.com/gtworek/Priv2Admin](https://github.com/gtworek/Priv2Admin) - Jetez un œil à [**ce document**](https://github.com/hatRiot/token-priv/blob/master/abusing_token_eop_1.0.txt) sur l'élévation de privilèges avec des jetons. {{#include ../../banners/hacktricks-training.md}}