April 19

Pentesting Active Directory: Типовая разведка (PART 3)

PART 2

Введение

Процесс поиска контроллера домена включает в себя два основных этапа. Первый шаг - это использование команды 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

PowerView | Wiki

: Get-Domain

Перечислить другие домены: Get-Domain -Domain <DomainName>

Получить SID: Get-DomainSID

Получить доменную политику:

  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

Enum Доменные компьютеры:

Get-DomainComputer -Properties OperatingSystem, Name, DnsHostName | Sort-Object -Property DnsHostName

#Enumerate Live machines
Get-DomainComputer -Ping -Properties OperatingSystem, Name, DnsHostName | Sort-Object -Property DnsHostName

Группы и члены групп Enum:

#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>

Enum OUs:

Get-DomainOU -Properties Name | Sort-Object -Property Name

Enum ACLs:

# 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"

Enum доверие к домену:

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

Enum доверие к лесу:

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

Enum Доменные компьютеры:

Get-ADComputer -Filter * -Properties *
Get-ADGroup -Filter *

Enum Доверие к домену:

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