Pentesting Active Directory: Типовая разведка (PART 3)
Введение
Процесс поиска контроллера домена включает в себя два основных этапа. Первый шаг - это использование команды nmap с опцией --script broadcast-dhcp-discover
. Этот сценарий позволяет обнаружить DHCP-серверы в локальной подсети путем широковещательной рассылки DHCP-запросов.
Второй шаг - поиск машин с открытыми портами 389, 88 и 53. Эти порты обычно связаны со службами контроллера домена. Когда у вас есть список IP-адресов и открытых портов, вы можете использовать команду grep
, чтобы отфильтровать только те IP-адреса, у которых открыт порт 53. Этот список IP-адресов будет вашей целью для перечисления файловых ресурсов.
Процесс перечисления файловых ресурсов выполняется с помощью команды crackmapexe
, за которой следует опция smb
и диапазон IP-адресов, которые вы хотите просканировать (в данном случае xx.xx.xx.0/24
). Эта команда выполнит поиск открытых SMB-обменников в указанном диапазоне IP-адресов и сообщит всю информацию, которую сможет собрать о них.
Поиск контроллера домена
Шаг 1: Обнаружьте DHCP-серверы в локальной подсети с помощью команды nmap с параметром -script broadcast-dhcp-discover
. Это поможет вам определить потенциальные контроллеры домена в сети.
nmap --script broadcast-dhcp-discover
Шаг 2: Отфильтруйте рабочие станции с открытыми портами 389, 88 и 53, которые обычно связаны со службами контроллера домена.
nmap -p 389,88,53 -oG xxx.txt xx.xx.xx.0/24 cat xxx.txt | grep "\\:53\\b" >domain_controllers.txt
Перечисление файловых ресурсов
Используйте инструмент CrackMapExec с опцией smb, чтобы просканировать диапазон IP-адресов на наличие открытых SMB-активов и собрать информацию о них.
crackmapexec smb xx.xx.xx.0/24 --shares
Эта команда выведет информацию обо всех доступных SMB-обменниках в указанном диапазоне IP-адресов. Просмотрите вывод, чтобы определить файловые ресурсы, которые могут содержать конфиденциальную информацию или предоставлять дополнительный доступ к сети.
Bloodhound Recon
BloodHound - это веб-приложение, использующее теорию графов для выявления взаимосвязей в среде Active Directory. Оно помогает как атакующим, так и защитникам выявлять сложные пути атак и понимать взаимоотношения привилегий в среде AD.
Установка BloodHound
sudo apt-get update sudo apt-get install bloodhound
Получите доступ к консоли Neo4j: http://localhost:7474/ (учетные данные по умолчанию: neo4j:neo4j).
Перечисление и сбор данных
Перечислите домен жертвы с помощью SharpHound, чтобы создать JSON-файл с описанием отношений и разрешений между объектами AD. Импортируйте этот файл в BloodHound для визуализации потенциальных уязвимостей.
Использование SharpHound
Загрузите SharpHound с Github: https://github.com/BloodHoundAD/SharpHound.
Политика выполнения PowerShell
Чтобы обойти политику выполнения "Ограничено" по умолчанию, используйте:
powershell -ep bypass
Запуск инструменто
powershell -ep bypass . .\sharphound.ps1
Выполните команду Invoke-BloodHound:
Invoke-BloodHound -CollectionMethod All -Domain domain.local -ZipFileName file.zip
Анализ
Переместите полученный zip-файл на машину злоумышленника и загрузите его в BloodHound для анализа.
Переместите zip-файл на машину злоумышленника:
- Если обе машины находятся в одной сети, вы можете использовать инструмент передачи файлов, такой как scp (для Linux) или WinSCP (для Windows), чтобы передать zip-файл на машину злоумышленника.
- Также вы можете использовать общую папку или облачное хранилище, чтобы загрузить zip-файл с машины жертвы и скачать его на машину злоумышленника.
Загрузите zip-файл в BloodHound:
- Откройте BloodHound на атакующей машине и войдите в систему, используя учетные данные Neo4j (по умолчанию: neo4j:neo4j).
- В интерфейсе BloodHound нажмите на кнопку "Upload Data" в правом верхнем углу (она выглядит как облако со стрелкой вверх).
- Перейдите к месту, где вы сохранили переданный zip-файл, выберите его и нажмите "Open", чтобы начать процесс загрузки.
Проанализируйте данные в программе BloodHound:
- После загрузки данных BloodHound визуализирует отношения и разрешения между объектами Active Directory, позволяя исследовать сеть, выявить потенциальные уязвимости и обнаружить пути атак.
- Вы можете использовать встроенные запросы BloodHound или создавать собственные запросы для исследования конкретных отношений или уязвимостей в среде AD.
PowerView Recon
PowerView - это инструмент PowerShell для ситуационной осведомленности о домене Windows. Он заменяет различные команды "net *" альтернативами чистого PowerShell, используя крючки PowerShell AD и функции Win32 API для задач домена.
PowerView Метафункции
PowerView включает написанные на заказ функции поиска пользователей для отслеживания пользователей в сети и определения машин, на которых они зарегистрированы. Кроме того, он может проверять машины, на которых текущий пользователь имеет доступ локального администратора.
Перечисление и эксплуатация доверия к доменам
В PowerView есть функции для перечисления и использования доменных трастов. Каждая функция поставляется со своими опциями и описанием использования. Чтобы получить подробную информацию о функциональности, передайте флаги -Verbose или -Debug.
Различные функции
Export-PowerViewCSV Resolve-IPAddress ConvertTo-SID Convert-ADName ConvertFrom-UACValue Add-RemoteConnection Remove-RemoteConnection Invoke-UserImpersonation Invoke-RevertToSelf Get-DomainSPNTicket Invoke-Kerberoast Get-PathAcl
Функции домена
Get-DomainDNSZone Get-DomainDNSRecord Get-Domain Get-DomainController Get-Forest Get-ForestDomain Get-ForestGlobalCatalog Find-DomainObjectPropertyOutlier Get-DomainUser New-DomainUser Get-DomainUserEvent Get-DomainComputer Get-DomainObject Set-DomainObject Get-DomainObjectAcl Add-DomainObjectAcl Find-InterestingDomainAcl Get-DomainOU Get-DomainSite Get-DomainSubnet Get-DomainSID Get-DomainGroup New-DomainGroup Get-DomainManagedSecurityGroup Get-DomainGroupMember Add-DomainGroupMember Get-DomainFileServer Get-DomainDFSShare
GPO Функции
Get-DomainGPO Get-DomainGPOLocalGroup Get-DomainGPOUserLocalGroupMapping Get-DomainGPOComputerLocalGroupMapping Get-DomainPolicy
Функции компьютерного перечисления
Get-NetLocalGroup Get-NetLocalGroupMember Get-NetShare Get-NetLoggedon Get-NetSession Get-RegLoggedOn Get-NetRDPSession Test-AdminAccess Get-NetComputerSiteName Get-WMIRegProxy Get-WMIRegLastLoggedOn Get-WMIRegCachedRDPConnection Get-WMIRegMountedDrive Get-WMIProcess Find-InterestingFile
PowerView - это важный инструмент для ситуационной осведомленности и безопасности домена Windows, предлагающий ряд мощных функций и метафункций для специалистов по безопасности.
Перечисление доменов
Использование PowerView
Перечислить другие домены: Get-Domain -Domain <DomainName>
Get-DomainPolicy #Will show us the policy configurations of the Domain about system access or kerberos Get-DomainPolicy | Select-Object -ExpandProperty SystemAccess Get-DomainPolicy | Select-Object -ExpandProperty KerberosPolicy
Get-DomainController Get-DomainController -Domain <DomainName>
Перечисление пользователей домена:
#Save all Domain Users to a file Get-DomainUser | Out-File -FilePath .\DomainUsers.txt #Will return specific properties of a specific user Get-DomainUser -Identity [username] -Properties DisplayName, MemberOf | Format-List #Enumerate user logged on a machine Get-NetLoggedon -ComputerName <ComputerName> #Enumerate Session Information for a machine Get-NetSession -ComputerName <ComputerName> #Enumerate domain machines of the current/specified domain where specific users are logged into Find-DomainUserLocation -Domain <DomainName> | Select-Object UserName, SessionFromName
Get-DomainComputer -Properties OperatingSystem, Name, DnsHostName | Sort-Object -Property DnsHostName #Enumerate Live machines Get-DomainComputer -Ping -Properties OperatingSystem, Name, DnsHostName | Sort-Object -Property DnsHostName
#Save all Domain Groups to a file: Get-DomainGroup | Out-File -FilePath .\DomainGroup.txt #Return members of Specific Group (eg. Domain Admins & Enterprise Admins) Get-DomainGroup -Identity '<GroupName>' | Select-Object -ExpandProperty Member Get-DomainGroupMember -Identity '<GroupName>' | Select-Object MemberDistinguishedNam #Enumerate the local groups on the local (or remote) machine. Requires local admin rights on the remote machine Get-NetLocalGroup | Select-Object GroupName #Enumerates members of a specific local group on the local (or remote) machine. Also requires local admin rights on the remote machine Get-NetLocalGroupMember -GroupName Administrators | Select-Object MemberName, IsGroup, IsDomain #Return all GPOs in a domain that modify local group memberships through Restricted Groups or Group Policy Preferences Get-DomainGPOLocalGroup | Select-Object GPODisplayName, GroupName
#Enumerate Domain Shares Find-DomainShare #Enumerate Domain Shares the current user has access Find-DomainShare -CheckShareAccess #Enumerate "Interesting" Files on accessible shares Find-InterestingDomainShareFile -Include *passwords*
Перечисление групповых политик:
Get-DomainGPO -Properties DisplayName | Sort-Object -Property DisplayName #Enumerate all GPOs to a specific computer Get-DomainGPO -ComputerIdentity <ComputerName> -Properties DisplayName | Sort-Object -Property DisplayName #Get users that are part of a Machine's local Admin group Get-DomainGPOComputerLocalGroupMapping -ComputerName <ComputerName>
Get-DomainOU -Properties Name | Sort-Object -Property Name
# Returns the ACLs associated with the specified account Get-DomaiObjectAcl -Identity <AccountName> -ResolveGUIDs #Search for interesting ACEs Find-InterestingDomainAcl -ResolveGUIDs #Check the ACLs associated with a specified path (e.g smb share) Get-PathAcl -Path "\\Path\Of\A\Share"
Get-DomainTrust Get-DomainTrust -Domain <DomainName> #Enumerate all trusts for the current domain and then enumerates all trusts for each domain it finds Get-DomainTrustMapping
Get-ForestDomain Get-ForestDomain -Forest <ForestName> #Map the Trust of the Forest Get-ForestTrust Get-ForestTrust -Forest <ForestName>
#Finds all machines on the current domain where the current user has local admin access Find-LocalAdminAccess -Verbose #Find local admins on all machines of the domain Find-DomainLocalGroupMember -Verbose #Find computers were a Domain Admin OR a spesified user has a session Find-DomainUserLocation | Select-Object UserName, SessionFromName #Confirming admin access Test-AdminAccess
Использование модуля AD
Получить текущий домен: Get-ADDomain
Enum другие домены: Get-ADDomain -Identity <Domain>
Получить домен SID: Get-DomainSID
Get-ADDomainController Get-ADDomainController -Identity <DomainName>
Перечислите пользователей домена:
Get-ADUser -Filter * -Identity <user> -Properties * #Get a spesific "string" on a user's attribute Get-ADUser -Filter 'Description -like "*wtver*"' -Properties Description | select Name, Description
Get-ADComputer -Filter * -Properties * Get-ADGroup -Filter *
Get-ADForest Get-ADForest -Identity <ForestName> #Domains of Forest Enumeration (Get-ADForest).Domains
Enum Локальная политика эффективности AppLocker:
Get-AppLockerPolicy -Effective | select -ExpandProperty RuleCollections
Использование BloodHound
Python репозиторий или используйте для установки pip3 install bloodhound
bloodhound-python -u <UserName> -p <Password> -ns <Domain Controller's Ip> -d <Domain> -c All
Использование Adalanche
# kali linux: ./adalanche collect activedirectory --domain <Domain> \ --username <Username@Domain> --password <Password> \ --server <DC> # Example: ./adalanche collect activedirectory --domain windcorp.local \ --username spoNge369@windcorp.local --password 'password123!' \ --server dc.windcorp.htb ## -> Terminating successfully ## Any error?: # LDAP Result Code 200 "Network Error": x509: certificate signed by unknown authority ? ./adalanche collect activedirectory --domain windcorp.local \ --username spoNge369@windcorp.local --password 'password123!' \ --server dc.windcorp.htb --tlsmode NoTLS --port 389 # Invalid Credentials ? ./adalanche collect activedirectory --domain windcorp.local \ --username spoNge369@windcorp.local --password 'password123!' \ --server dc.windcorp.htb --tlsmode NoTLS --port 389 \ --authmode basic # Analyze data # go to web browser -> 127.0.0.1:8080 ./adalanche analyze
Полезные инструменты перечисления
- ldapdomaindump Сборщик информации через LDAP
- adidnsdump Интегрированный сброс DNS любым аутентифицированным пользователем
- ACLight Расширенное обнаружение привилегированных учетных записей
- ADRecon Подробное средство восстановления Active Directory
Оригинальная статья | Перевод: THREAD