Abusing Tokens
Last updated
Last updated
Si vous ne savez pas ce que sont les jetons d'accès Windows, lisez cette page avant de continuer :
Peut-être pourriez-vous être en mesure d'escalader les privilèges en abusant des jetons que vous avez déjà
Il s'agit d'un privilège détenu par n'importe quel processus qui permet l'impersonation (mais pas la création) de n'importe quel jeton, à condition qu'une poignée de celui-ci puisse être obtenue. Un jeton privilégié peut être acquis à partir d'un service Windows (DCOM) en l'incitant à effectuer une authentification NTLM contre une exploitation, 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.
Il est très similaire à SeImpersonatePrivilege, il utilisera la même méthode pour obtenir un jeton privilégié. Ensuite, ce privilège permet de assigner un jeton principal à un processus nouveau/en attente. Avec le jeton d'impersonation privilégié, vous pouvez dériver un jeton principal (DuplicateTokenEx). Avec le jeton, vous pouvez créer un nouveau processus avec 'CreateProcessAsUser' ou créer un processus en attente et définir le jeton (en général, vous ne pouvez pas modifier le jeton principal d'un processus en cours d'exécution).
Si vous avez activé ce jeton, vous pouvez utiliser KERB_S4U_LOGON pour obtenir un jeton d'impersonation pour tout autre utilisateur sans connaître les informations d'identification, ajouter un groupe arbitraire (administrateurs) au jeton, définir le niveau d'intégrité du jeton sur "moyen" et assigner ce jeton au thread actuel (SetThreadToken).
Le système est amené à accorder un accès en lecture à n'importe quel fichier (limité aux opérations de lecture) par ce privilège. Il est utilisé pour lire les hachages de mots de passe des comptes Administrateur locaux à partir du registre, après quoi, des outils comme "psexec" ou "wmicexec" peuvent être utilisés avec le hachage (technique Pass-the-Hash). Cependant, cette technique échoue dans deux cas : lorsque le compte Administrateur local est désactivé, ou lorsqu'une stratégie est en place qui supprime les droits administratifs des administrateurs locaux se connectant à distance. Vous pouvez abuser de ce privilège avec :
en suivant IppSec dans https://www.youtube.com/watch?v=IfCysW0Od8w&t=2610&ab_channel=IppSec
Ou comme expliqué dans la section escalade de privilèges avec les opérateurs de sauvegarde de :
La permission pour accéder en écriture à n'importe quel 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, d'effectuer du détournement de DLL et de définir des débogueurs via les options d'exécution de fichiers image, entre autres techniques.
SeCreateTokenPrivilege est une permission puissante, particulièrement utile lorsqu'un utilisateur possède la capacité d'impersonner des jetons, mais aussi en l'absence de SeImpersonatePrivilege. Cette capacité repose sur la capacité d'impersonner un jeton qui représente le même utilisateur et dont le niveau d'intégrité n'excède pas celui du processus actuel.
Points clés :
Impersonation sans SeImpersonatePrivilege : Il est possible d'utiliser SeCreateTokenPrivilege pour l'EoP en impersonnant des jetons dans des conditions spécifiques.
Conditions pour l'impersonation de jetons : L'impersonation réussie nécessite que le jeton cible appartienne au même utilisateur et ait un niveau d'intégrité inférieur ou égal à celui du processus tentant l'impersonation.
Création et modification de jetons d'impersonation : Les utilisateurs peuvent créer un jeton d'impersonation et l'améliorer en ajoutant l'identifiant de sécurité (SID) d'un groupe privilégié.
Ce privilège permet de charger et décharger des pilotes de périphériques avec la création d'une entrée de registre avec des valeurs spécifiques pour ImagePath
et Type
. Comme 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\<RID>\System\CurrentControlSet\Services\DriverName
, où <RID>
est l'identifiant relatif de l'utilisateur actuel. À l'intérieur de HKCU
, ce chemin complet doit être créé, et deux valeurs doivent être définies :
ImagePath
, qui est le chemin d'accès binaire à exécuter
Type
, avec une valeur de SERVICE_KERNEL_DRIVER
(0x00000001
).
Étapes à suivre :
Accédez à HKCU
au lieu de HKLM
en raison de l'accès en écriture restreint.
Créez le chemin \Registry\User\<RID>\System\CurrentControlSet\Services\DriverName
dans HKCU
, où <RID>
représente l identifiant relatif de l'utilisateur actuel.
Définissez le ImagePath
sur le chemin d'exécution du binaire.
Attribuez le Type
comme SERVICE_KERNEL_DRIVER
(0x00000001
).
D'autres façons d'abuser de ce privilège se trouvent sur https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/privileged-accounts-and-token-privileges#seloaddriverprivilege
Ceci est similaire à SeRestorePrivilege. Sa fonction principale permet à un processus de prendre possession d'un objet, contournant ainsi l'exigence d'accès discrétionnaire explicite en fournissant des droits d'accès WRITE_OWNER. Le processus implique d'abord de sécuriser la propriété de la clé de registre prévue à des fins d'écriture, puis de modifier le DACL pour permettre des opérations d'écriture.
Ce privilège permet de déboguer d'autres processus, y compris de lire et écrire dans la mémoire. Diverses stratégies d'injection de mémoire, capables de contourner la plupart des antivirus et des solutions de prévention des intrusions hôtes, peuvent être utilisées avec ce privilège.
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 de stocker les informations d'identification de l'utilisateur 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:
Si vous voulez obtenir un shell NT SYSTEM
, vous pourriez utiliser :
Les jetons qui apparaissent comme Désactivés peuvent être activés, vous pouvez en fait abuser des jetons Activés et Désactivés.
Si vous avez des jetons désactivés, vous pouvez utiliser le script EnableAllTokenPrivs.ps1 pour activer tous les jetons :
Ou le script intégré dans ce poste.
Feuille de triche complète sur les privilèges de jetons à https://github.com/gtworek/Priv2Admin, le résumé ci-dessous ne répertorie que les moyens directs d'exploiter le privilège pour obtenir une session administrateur ou lire des fichiers sensibles.
SeAssignPrimaryToken
Admin
Outil tiers
"Cela permettrait à un utilisateur d'usurper des jetons et de s'élever en privilège vers le système nt en utilisant des outils tels que potato.exe, rottenpotato.exe et juicypotato.exe"
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 pour les 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
.
SeLoadDriver
Admin
Outil tiers
1. Charger un pilote de noyau défectueux 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
. par exemple : fltMC sysmondrv
SeRestore
Admin
PowerShell
L'attaque peut être détectée par certains logiciels antivirus.
Une 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.
Une 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 les jetons pour inclure des droits d'administrateur local. Peut nécessiter SeImpersonate.
À vérifier.
Consultez ce tableau définissant les jetons Windows : https://github.com/gtworek/Priv2Admin
Consultez ce document sur l'élévation de privilèges avec les jetons.
Merci à pour la mise à jour. J'essaierai de reformuler cela bientôt de manière plus proche d'une recette.
Script à trouver sur
1. La vulnérabilité de szkg64
est répertoriée sous
2. Le code d'exploitation de szkg64
a été créé par
1. Lancer PowerShell/ISE avec le privilège SeRestore présent. 2. Activer le privilège avec ). 3. Renommer utilman.exe en utilman.old 4. Renommer cmd.exe en utilman.exe 5. Verrouiller la console et appuyer sur Win+U