Avec cet outil, vous pourrez détecter :
Contrôle d'accès incorrect à un objet COM (LaunchPermission, AccessPermission) - LPE via des méthodes COM abusables, relais d'authentification DCOM. C'est PermissionHunter
.
Droits de registre incorrects sur un objet COM - LPE via COM Hijacking. C'est ComDiver
.
Trouvez un nouveau surnom d'élévation - UAC Bypass. C'est MonikerHound
.
Obtenez des informations détaillées sur un CLSID spécifique - Inspectez un objet COM pour trouver des méthodes COM abusables. C'est ClsidExplorer
.
Vérifiez l'activation entre sessions pour le compte d'un utilisateur peu privilégié - Tentative d'instancier un objet dans la session de quelqu'un d'autre pour LPE. C'est ComTraveller
.
Si nous avions publié cet outil il y a quelques mois (par exemple au printemps 2024), vous auriez découvert CVE-2024-38100 (FakePotato) et CVE-2024-38061 (SilverPotato).
Commencez à utiliser cet outil et vous pourrez trouver d’autres moyens d’élever les privilèges sur les systèmes Windows. C'est comme un OleViewDotnet automatisé :)
PermissionHunter est un outil qui vous permet d'examiner LaunchPermission et ActivatePermission sur tous les objets COM du système.
PS A:mzhmo> .PermissionHunter.exe -h , `-. .-' ,-"`````""-__ | / '-.._ _.-'` '-o, _>--:{{< ) |) .-'' '-.__ .-o` '-._____..-/` | ,-' / `-. ` PermissionHunter - recherche des LaunchPermission et ActivatePermission incorrects Équipe de recherche CICADA8 De Michael Zhmaylo (MzHmO)PermissionHunter.exePetit outil qui vous permet de trouver des objets COM vulnérables avec LaunchPermission et ActivatePermission[OPTIONS]-outfile incorrects : nom de fichier de sortie-outformat : format de sortie. 'csv' et 'xlsx' acceptés-h/--help : affiche cette fenêtre
Il n'y a que deux arguments ici :
-outfile
- nom du fichier contenant le rapport sur les droits ;
-outformat
- format du fichier avec le rapport, vous pouvez le sortir au format csv et xlsx. Il est préférable de sortir au format csv, car si vous n'avez pas Excel, vous ne pourrez pas sortir au format xlsx.
Exemple:
PS A:mzhmo> .PermissionHunter -outfile result -outformat xlsx , `-. .-' ,-"`````""-__ | / '-.._ _.-'` '-o, _>--:{{< ) |) .-'' '-.__ .-o` '-._____..-/` | ,-' / `-. ` PermissionHunter - recherche des erreurs LaunchPermission et ActivatePermission CICADA8 Research Team De Michael Zhmaylo (MzHmO)[+] Le résultat sera dans le résultat, format xlsx[+] Succès
Après cela, vous obtiendrez un fichier result.xlsx, qui répertoriera tous les droits sur les objets COM existants.
J'affiche les colonnes suivantes :
ApplicationID
- ApplicationID d’un objet COM spécifique. Ex : {69AD4AEE-51BE-439b-A92C-86AE490E8B30}
;
ApplicationName
- ApplicationName d'un objet COM spécifique. Ex : Background Intelligent Transfer Service
;
RunAs
- Clé de registre RunAs d'un objet COM. Ex : Interactive User
;
LaunchAccess
, LaunchType
, LaunchPrincipal
, LaunchSid
- Clé de registre LaunchPermission. LaunchPrincipal spécifie l'utilisateur qui dispose des droits LaunchAccess sur l'objet COM. LaunchType - type d'ACE : activation ou désactivation. LaunchSID : SID de LaunchPrincipal. Ex:
Lancement local. Lancement à distance. Activation locale. Accès à l'activation à distanceAutorisé NT AUTHORITYSYSTEM S-1-5-18
Cela signifie que le système dispose des autorisations LocalLaunch, RemoteLaunch, LocalActivation, RemoteActivation sur cet objet COM ;
AccessAccess
, AccessType
, AccessPrincipal
, AccessSID
- les champs ont la même signification que LaunchPermissions, uniquement dans le contexte d'AccessPermission ;
AuthLevel
, ImpLevel
- Niveau d'authentification et niveau d'emprunt d'identité. Par défaut, ils sont définis sur RPC_C_AUTHN_LEVEL_CONNECT
et RPC_C_IMP_LEVEL_IDENTIFY
;
CLSIDs
- CLSID d'objet COM.
Si vous trouvez un objet COM auquel vous pouvez accéder au nom d'un utilisateur peu privilégié, par exemple, vous pouvez en abuser comme suit :
Créez une instance et appelez les méthodes de cet objet COM pour, par exemple, écrire un fichier arbitraire au nom du système. Par exemple, vous avez trouvé un objet COM avec une méthode DeployCmdShell()
qui s'exécute au nom du compte NT AUTHORITYSYSTEM
et vous disposez LaunchPermissions
et AccessPermissions
. Vous pouvez démarrer cet objet COM, appeler la méthode DeployCmdShell()
et obtenir l'exécution de code au nom du système. Vous pouvez afficher les méthodes disponibles à l'aide de ClsidExplorer
.
Abuser de l'authentification DCOM. Pour cela, voir RemoteKrbRelay
Toutes les informations sur les objets COM se trouvent dans le registre. Mais que se passe-t-il si l'enregistrement est incorrect ? Dans un tel cas, nous avons la possibilité de remplacer les paramètres COM, par exemple pour détourner le fichier exécutable.
Cet outil vous permet de détecter de telles vulnérabilités et analyse le registre en fonction de la priorité des clés affichées lors de la recherche d'objets COM. De cette façon, vous pouvez même trouver Shadow COM Hijacking. La priorité est la suivante :
1. HKCUSoftwareClasses (GUID) Traiter comme 2. HKLMSoftwareClasses (GUID) Traiter comme 3. HKCUSoftwareClasses (GUID) InprocServer32 4. HKLMSoftwareClasses (GUID) InprocServer32 5. HKCUSoftwareClasses (GUID) LocalServer32 6. HKLMSoftwareClasses (GUID) LocalServer32
Ainsi, au moins deux vecteurs d’élévation des privilèges émergent :
Si nous avons des autorisations d'écriture sur HKCU...TreatAs
et que l'exécutable COM d'origine se trouve dans HKCU...LocalServer32
, nous pouvons alors effectuer un détournement Shadow COM en écrivant notre exécutable dans HKCU..TreatAs
.
Si l'objet COM se trouve dans HKCU..LocalServer32
et que nous pouvons écrire dans HKCU..LocalServer32
, alors nous pouvons effectuer un détournement de COM.
Regardons de plus près l'outil :
PS A:ssdgitrepoCOMThanasiaComDiverx64Debug> .ComDiver.exe -h / o ^ o / ( ) / ____________(%%%%%%%)____________ ( / / )%%%%%%%( ) (___/___/__/ ________) ( / /(%%%%%%%) ) (__/___/ (%%%%%%%) _____) /( ) / (%%%%%) (%%%) !----------- COM DIVER -------------- [?] Petit outil pour vérifier les autorisations de registre et de disque non sécurisées sur les objets com [?] ARGS -h/--help <- afficher ce message --from<- analyser les CLSID de ce clsid --target <- analyser un clsid cible --no-context <- ne vérifie pas un autre contexte de serveur COM. Uniquement l'analyse du registre. --no-create <- ne crée pas d'objet COM cible. C'est le mode le plus rapide
Il accepte les arguments suivants :
--from
- il existe de nombreux CLSID sur un système Windows. Si vous ne souhaitez pas que l'outil examine tous les CLSID à partir du premier, vous pouvez spécifier le CLSID par lequel commencer, par exemple, --from {50FDBB99-5C92-495E-9E81-E2C2F48CDDA}
--target
- analyse un clsid spécifique ;
--no-context
- ne vérifie pas le nom de l'utilisateur pour le compte duquel l'objet COM est lancé ;
--no-create
- pour ne pas créer un objet COM qui a été détecté. Cela limite les informations que vous pouvez obtenir à ce sujet. Cependant, c'est le moyen le plus rapide d'examiner uniquement les droits du registre.
Exemple:
.ComDiver.exe --no-create
Dans ce cas, nous pouvons voir qu'il n'y a pas de clés dans HKCU et que nous disposons d'autorisations d'écriture sur ces clés. En conséquence, si nous écrivons notre propre valeur sur ce chemin, nous procéderons à un détournement de COM.
Si vous voyez des lignes rouges dans la sortie de l'outil, il s'agit d'un moyen potentiel d'abuser d'un objet COM ! Vous pouvez effectuer un détournement de COM (usurpation d'un exécutable existant) ou un détournement de COM Shadow (usurpation d'un exécutable manquant). En savoir plus sur le détournement de COM ici
Il existe un moyen intégré de contourner l'UAC sur un système Windows, cela se fait via Elevation Moniker. Vous pouvez en savoir plus ici. Ce type de contournement UAC nécessite une méthode non standard d'enregistrement de l'objet COM dans le registre, qui est assez facile à retracer. Vous pouvez donc utiliser mon outil pour trouver de nouvelles façons de contourner l'UAC.
Exemple:
PS A : ssdgitrepoCOMThanasiaMonikerHoundx64Debug> .MonikerHound.exe ,_ _ _,oo/ ,(.-.), _/ |) (| _ /=-=/ ,| =/ |, _/ | /_ _!_/ MonikerHound - trouvez votre propre contournement UAC ! Équipe de recherche CICADA8 De Michael Zhmaylo (MzHmO) [+] Serveur COM potentiel pour le surnom d'élévation trouvé ! Nom : CEIPLuaElevationHelper CLSID : {01D0A625-782D-4777-8D4E-547E6457FAD5} Chaîne localisée : @%systemroot%system32werconcpl.dll,-351 Activé : 1 Référence d'icône : @%systemroot%system32werconcpl.dll,-6 Activer : Succès NID : 15800 DllHost.exe [+]........................[+] [+] Serveur COM potentiel pour le surnom d'élévation trouvé ! Nom : Classe CTapiLuaLib CLSID : {03e15b2e-cca6-451c-8fb0-1e2ee37a27dd} Chaîne localisée : @%systemroot%system32tapiui.dll,-1 Activé : 1 Référence d'icône : @%systemroot%system32tapiui.dll,-201 Activer : Succès NID : 440 DllHost.exe [+]........................[+]
Une fois que vous avez découvert des candidats potentiels pour UAC Bypass, vous pouvez commencer à les examiner. Comme excellent modèle pour exécuter Elevation Moniker, vous pouvez utiliser cette fonction ou ce programme.
ClsidExplorer vous permet de récupérer des informations sur un CLSID spécifique. Le programme génère les données suivantes :
AppID
- ApplicationID d'un objet COM spécifique ;
ProgID
- ProgID d'un objet COM spécifique ;
PID
- PID dans lequel cet objet COM est exécuté ;
Process Name
: le nom du processus PID ;
Username
- nom de l'utilisateur pour le compte duquel le processus est exécuté ;
Methods
- méthodes disponibles de l'objet COM. Fabriqué en analysant TypeLib.
PS A : ssdgitrepoCOMThanasiaClsidExplorerx64Debug> .CLSIDExplorer.exe -h CLSIDExplorer.exe - identifier toutes les informations par clsid Usage: .CLSIDExplorer.exe --clsid "{00000618-0000-0010-8000-00aa006d2ea4}"
Le programme n'accepte qu'un seul argument :
--clsid
- CLSID cible à analyser
PS A : ssdgitrepoCOMThanasiaClsidExplorerx64Debug> .CLSIDExplorer.exe --clsid "{00000618-0000-0010-8000-00aa006d2ea4}"[{00000618-0000-0010-8000-00aa006d2ea4}] ID d'application : inconnu ID Prog : Inconnu NID : 1572 Nom du processus : CLSIDExplorer.exe Nom d'utilisateur : WINPCMichael Méthodes : [0] __stdcall void QueryInterface (IN GUID*, OUT void**) [1] __stdcall long non signé AddRef() [2] __stdcall version longue non signée() [3] __stdcall void GetTypeInfoCount (OUT int non signé*) [4] __stdcall void GetTypeInfo (IN unsigned int, IN unsigned long, OUT void**) [5] __stdcall void GetIDsOfNames (IN GUID*, IN char**, IN unsigned int, IN unsigned long, OUT long*) [6] __stdcall void Invoke (IN long, IN GUID*, IN unsigned long, IN unsigned short, IN DISPPARAMS*, OUT VARIANT*, OUT EXCEPINFO*, OUT unsigned int*) [7] __stdcall Nom BSTR() [8] __stdcall void Nom (IN BSTR) [9] __stdcall RightsEnum GetPermissions (IN VARIANT, IN ObjectTypeEnum, IN VARIANT) [10] __stdcall void SetPermissions (IN VARIANT, IN ObjectTypeEnum, IN ActionEnum, IN RightsEnum, IN InheritTypeEnum, IN VARIANT) [11] __stdcall void ChangePassword (IN BSTR, IN BSTR) [12] Groupes __stdcall* Groupes() [13] Propriétés __stdcall* Propriétés() [14] __stdcall _Catalog* ParentCatalog() [15] __stdcall void ParentCatalog(IN _Catalog*) [16] __stdcall void ParentCatalog(IN _Catalog*) [FINIR]
Ce programme est idéal pour vérifier une classe COM découverte avec ComTraveller
ou PermissionHunter
ou MonikerHound
pour des méthodes intéressantes qui peuvent être utilisées de manière abusive.
ComTraveller - cet outil vous permet d'explorer tous les objets COM disponibles. Premièrement, il vous permet d'identifier rapidement les objets COM avec des valeurs intéressantes (RunAs Interactive User), la disponibilité de TypeLib et les capacités d'activation inter-sessions. Ainsi, vous pouvez détecter rapidement les objets susceptibles d'être instanciés dans une autre session utilisateur, conduisant à une élévation de privilèges.
PS A : SSDgitrepoCOMThanasiaComTravellerx64Debug> .ComTraveller.exe -h ,,_ zd$$??= z$$P? F:`c, _ d$$, `c'cc$$i ,cd$?R $$$$ cud$,?$$$i ,=P"2?z " $" " ?$$$, ?$$$. ,-''`>, bzP 'cLdb,?$$,?$$$ ,h' "I$'J$P ... `?$$$,"$$,`$$h $$PxrF'd$"d$PP""?-,"?$$,?$h`$$,,$$'$F44 "?,,_`=4c,?=,"?hu?$`?L4$'? '""?==""=-"" `""-`'_,,,, .ccu? m?e?JC,-,"=? """=='?"ComTraveller - petit outil pour analyser et extraire des informations sur tous les CLSID enregistrés sur le systèmeUsage:--file
--file
- nom du fichier dans lequel les informations sur les objets COM seront affichées ;
--from
- il existe de nombreux CLSID sur un système Windows. Si vous ne souhaitez pas que l'outil examine tous les CLSID à partir du premier, vous pouvez spécifier le CLSID par lequel commencer, par exemple, --from {50FDBB99-5C92-495E-9E81-E2C2F48CDDA}
--session
- essayez d'instancier un objet dans la session de quelqu'un d'autre
--target
- analyse un seul clsid cible
Exemple:
.ComTraveller.exe --file rep.csv --session 1
Après cela, vous trouverez un fichier rep.csv contenant des informations sur les objets COM. Il y a plusieurs colonnes ici :
CLSID
- CLSID de l'objet COM ;
AppId
- APPID de l'objet COM ;
ProgId
- APPID de l'objet COM ;
RunAs
- valeur dans le registre RunAs. Si la valeur est The Interactive User
ou NT AUTHORITYSYSTEM
, vous pouvez essayer de créer LPE ;
Username
- nom de l'utilisateur pour le compte duquel l'objet COM est exécuté ;
PID
- le PID dans lequel l'objet COM est exécuté ;
ProcessName
- nom du processus dans lequel l'objet COM est en cours d'exécution ;
HasTypeLib
- si l'objet COM a TypeLib. Si tel est le cas, vous pouvez donner cet objet à ClsidExplorer
pour voir les méthodes disponibles ;
canCrossSessionActivate
- s'il est possible d'abuser de cette classe COM pour LPE via l'activation dans la session de quelqu'un d'autre. Si la valeur est +
ou si l'erreur est ACCESS DENIED
, cela pourrait être un candidat potentiel pour LPE.
Par exemple, si vous appliquez des filtres, vous trouverez immédiatement des classes COM intéressantes :) Wow, est-ce une classe COM qui peut être activée entre sessions et qui fonctionne pour le compte du système ?
Il convient de noter que le programme peut planter en raison de l'abondance d'objets COM. Dans ce cas, vous pouvez le redémarrer comme ceci :
.ComTraveller.exe --file rep.csv --session 1 --from "{0006F071-0000-0000-C000-000000000046}"