Источник: https://github.com/AnaktaCTF/CTF/blob/main — Misc/Паттерны решения задач Active Directory в CTF.md


Nmap

Пример команды для сканирования портов, которые могут быть использованы в AD:

nmap -p 88,389,445,636,3268 <target-ip>
  • Порты:
    • 88 — Kerberos
    • 389 — LDAP
    • 445 — SMB
    • 636 — LDAP с SSL
    • 3268 — Global Catalog

Это поможет найти активные сервисы AD и настроить цели для дальнейшего анализа.


Enum4linux

Пример команды для получения списка пользователей в домене:

enum4linux -U <target-ip>

Для получения информации о группах:

enum4linux -G <target-ip>

Если нужно собрать информацию о домене:

enum4linux -S <target-ip>

Этот инструмент полезен, когда тебе нужно узнать, кто является администратором, какие у пользователей права и какие группы существуют в домене.


ldapsearch позволяет делать запросы к LDAP-серверам и получать всю структуру домена.

Пример команды для выполнения базового запроса:

ldapsearch -x -h <target-ip> -b "dc=example,dc=com"

Эта команда вернет информацию обо всех объектах в домене example.com. Ты можешь искать учетные записи, группы и другие объекты.


BloodHound

BloodHound — это мощный инструмент для анализа и эксплуатации прав доступа в Active Directory. Он помогает выявить петли доверия и перехват прав через слабые настройки в домене.

BloodHound -ip <target-ip> -u <user> -p <password>

SecretsDump (Impacket)

Если ты уже получил доступ к машине, SecretsDump поможет тебе извлечь хеши паролей с целевой машины:

secretsdump.py <domain>/<username>:<password>@<target-ip>

Это полезно для сбора учетных данных и их дальнейшего использования в атаках Pass-the-Hash.


WMI и DCOM

Если тебе нужно выполнить команды на удаленной машине, можно использовать WMI или DCOM для удаленного выполнения команд. Пример с использованием WMI:

wmiexec.py <domain>/<username>:<password>@<target-ip>

Этот инструмент позволяет запускать команды на удаленных хостах без необходимости взаимодействовать с ними напрямую.


Эксплуатация уязвимостей

Давай сосредоточимся на трех самых популярных и мощных инструментах, которые чаще всего используются в решении задач с Active Directory в CTF: RubeusMimikatz и Impacket.

**1. Rubeus

Rubeus — это инструмент, который специализируется на эксплуатации Kerberos в Windows-сетях. Kerberos — это основной механизм аутентификации в доменах Windows, и если его неправильно настроить или использовать уязвимости, можно легко получить доступ к различным ресурсам внутри сети. Rubeus позволяет работать с тикетами Kerberos (TGT, TGS), выполнять атаки, такие как Pass-the-Ticket (PTT), а также извлекать билеты из памяти.

Получение TGT (Ticket Granting Ticket)

Первая задача, с которой ты столкнешься при работе с Rubeus — это получение TGT (Ticket Granting Ticket). Если у тебя есть хеш пароля пользователя в домене, ты можешь запросить TGT для этого пользователя. Это своего рода первый шаг для аутентификации в системе и получения доступа к другим сервисам.

Пример команды для получения TGT:

Rubeus asktgt /user:<username> /rc4:<password-hash>
  • /user:<username> — указываешь имя пользователя, для которого ты хочешь получить тикет.
  • /rc4:<password-hash> — передаешь хеш пароля этого пользователя, который используется для генерации тикета.

Когда ты выполнешь эту команду, Rubeus вернет тебе TGT, который можно использовать для дальнейших атак или для аутентификации на других системах, требующих Kerberos.

Pass-the-Ticket (PTT)

Теперь, когда у тебя есть TGT, можно использовать его в атаке Pass-the-Ticket (PTT). Это позволяет обойти традиционную аутентификацию, используя уже сгенерированный тикет для доступа к другим сервисам в сети.

Вот как это делается:

Rubeus tgtdeleg /ticket:<path-to-ticket>
  • /ticket:<path-to-ticket> — это путь к файлу с тикетом, который ты хочешь передать. Например, это может быть путь к TGT, который ты только что сгенерировал.

С помощью этой команды ты можешь взять тикет и передать его на другую машину в сети, чтобы получить доступ к сервисам, которые требуют Kerberos аутентификацию. Важно, что с помощью PTT можно «передать» тикет в другую сессию или сервер, что дает возможность работать с сервисами без повторной аутентификации.

Извлечение билетов из памяти

Если ты уже получил доступ к системе и у тебя есть нужные привилегии, ты можешь извлечь Kerberos билеты прямо из памяти компьютера. Это позволяет получить тикеты без необходимости их заново запрашивать.

Команда для извлечения билетов из памяти:

Rubeus dump

Просто запускаешь эту команду, и Rubeus извлечет все тикеты Kerberos, которые находятся в памяти на целевой машине. Это полезно, если ты хочешь получить доступ к сервисам, использующим Kerberos аутентификацию, и уже имеешь скомпрометированную машину.


2. Mimikatz

Извлечение паролей из памяти

Одной из самых популярных функций Mimikatz является извлечение паролей из памяти. Когда пользователи входят в систему, пароли могут храниться в памяти Windows, и Mimikatz позволяет извлечь эти данные, включая хеши паролей.

Для того чтобы извлечь пароли, можно использовать команду:

mimikatz sekurlsa::logonpasswords

Эта команда позволяет Mimikatz отобразить все сохраненные пароли, а также хеши пользователей, которые в данный момент вошли в систему.

Pass-the-Hash (PTH)

Pass-the-Hash — это атака, в ходе которой атакующий использует хеш пароля для аутентификации, не зная самого пароля. Mimikatz позволяет выполнить такую атаку с помощью хешей паролей, полученных из памяти или захваченных другим способом.

mimikatz sekurlsa::pth /user:<username> /domain:<domain> /rc4:<password-hash>

/user:<username> — имя пользователя, для которого будет выполнена аутентификация.
/domain:<domain> — домен, в котором находится учетная запись.
/rc4:<password-hash> — хеш пароля в формате RC4, который будет использоваться для аутентификации.

После выполнения этой команды можно будет аутентифицироваться в системе с использованием только хеша пароля, обойдя обычную процедуру ввода пароля.

Pass-the-Ticket (PTT)

Pass-the-Ticket — это атака, в которой используется уже сгенерированный Kerberos-тикет для доступа к сервисам в сети. Mimikatz поддерживает работу с тикетами Kerberos, что позволяет проводить атаки PTT.

mimikatz kerberos::ptt /ticket:<path-to-ticket>

/ticket:<path-to-ticket> — путь к файлу с Kerberos тикетом, который ты хочешь использовать для аутентификации.

Эта команда позволяет атакующему передавать тикет для аутентификации без повторной проверки пароля, что полезно при атаках на сетевые ресурсы, требующие аутентификации с использованием Kerberos.

Извлечение учетных данных из процесса LSASS

LSASS (Local Security Authority Subsystem Service) — это процесс, который управляет аутентификацией в Windows. Извлечение учетных данных из LSASS может дать атакующему доступ к важным данным, таким как пароли и хеши, которые используются для входа в систему.

mimikatz sekurlsa::minidump <path-to-LSASS.dmp>

<path-to-LSASS.dmp> — путь к дампу памяти процесса LSASS. Чтобы его создать, нужно сначала получить дамп процесса LSASS с помощью инструментов вроде ProcDump или других утилит.

После выполнения этой команды Mimikatz может извлечь учетные данные из дампа, включая пароли и хеши.

Повышение привилегий

Mimikatz предоставляет возможность повышать привилегии, захватывая токены безопасности и привилегии с помощью следующих команд:

mimikatz token::list

Эта команда позволяет вывести список всех токенов безопасности, которые существуют в текущем процессе. Можно выбрать токен, который дает более высокие привилегии, и использовать его для повышения прав.

mimikatz token::impersonate /sid:<sid-of-target> /user:<user-to-impersonate>

/sid:<sid-of-target> — SID целевой учетной записи, с которой ты хочешь работать.
/user:<user-to-impersonate> — имя пользователя, чьи привилегии ты хочешь принять.

Эта команда позволяет атакующему принять токен целевой учетной записи и выполнять действия с ее привилегиями.


3. Impacket

Impacket — это библиотека для Python, которая позволяет тебе напрямую работать с различными сетевыми протоколами Windows.

SMB Enumeration — Основы взаимодействия с сетью

С помощью инструмента Impacket ты можешь быстро получить информацию о системе, например, о версиях SMB сервисов или о доменных учетных записях.

impacket-smbclient //<target-ip>/C$ -username <username> -password <password>

//<target-ip>/C$ — это путь к удаленной системе через SMB (обычно это скрытый ресурс C:).
-username <username> — указываешь имя пользователя.
-password <password> — указываешь пароль или хеш, если используешь Pass-the-Hash.

Если все настроено правильно, ты получишь доступ к удаленной системе через SMB, что даст тебе возможность увидеть файловую систему, запрашивать файлы и т.д.

NTLM Relay Attacks — Relay атакой через SMB и другие протоколы

Теперь давай углубимся в одну из самых популярных атак в Windows-сетях — NTLM Relay Attacks. NTLM Relay позволяет атакующему перехватить аутентификацию NTLM и «переправить» ее на другие серверы. Это особенно опасно, потому что можно «перехватить» сессию, не зная пароля.

Impacket предоставляет удобные инструменты для этой атаки. Например, ты можешь использовать утилиту ntlmrelayx.py для проведения NTLM Relay Attack:

python3 impacket/examples/ntlmrelayx.py -t smb://<target-ip> -smb2support

-t smb://<target-ip> — указываешь целевой IP, на который будет осуществляться передача NTLM аутентификации.
-smb2support — добавляет поддержку SMB2, что актуально для новых систем.

Что происходит при этом? Ты настраиваешь NTLM Relay на своем компьютере, который будет принимать аутентификацию NTLM от клиента и передавать её на другой сервер, например, на SMB или веб-сервер. Атака позволяет получить доступ к сервисам, где требуется только правильная аутентификация, но не обязательна защита от ретрансляций.

Kerberos Attacks — Атаки через Kerberos

Impacket также позволяет работать с Kerberos аутентификацией, что дает тебе возможность проводить более сложные атаки, такие как Pass-the-Ticket и Kerberoasting.

Для использования Kerberos в Impacket есть специальная утилита GetTGT.py, которая позволяет тебе получить Ticket Granting Ticket (TGT) для пользователя, если у тебя есть хеш пароля:

python3 impacket/examples/GetTGT.py <domain>/<username>:<password-hash> -dc-ip <domain-controller-ip>

<domain>/<username> — имя пользователя и домен.
<password-hash> — хеш пароля.
-dc-ip <domain-controller-ip> — IP адрес контроллера домена, с которым нужно взаимодействовать.

Kerberoasting — Получение сервисных тикетов

Одним из мощных инструментов для атак на Kerberos является Kerberoasting. Это атака, при которой ты запрашиваешь сервисные тикеты для сервисных аккаунтов, а затем пытаешься их расшифровать офлайн, если сервис использует слабые пароли. С помощью Impacket ты можешь выполнить Kerberoasting с помощью утилиты GetUserSPNs.py.

python3 impacket/examples/GetUserSPNs.py <domain>/<username>:<password-hash> -dc-ip <domain-controller-ip>

После выполнения ты получишь Service Principal Names (SPNs), которые можно использовать для дальнейших атак, например, для добычи паролей с использованием атак на слабые хеши.

LDAP и DCOM — Манипуляции с каталогами и удаленными сервисами

Impacket также позволяет работать с LDAP и DCOM, что полезно для получения информации о пользователях и группах в домене, а также для удаленного выполнения команд. Например, с помощью ldapsearch.py можно запросить LDAP-сервер, чтобы извлечь информацию о пользователях:

python3 impacket/examples/ldapsearch.py -u <username> -p <password> -h <ldap-server-ip>

Также есть утилита для выполнения удаленных команд с помощью DCOM:

python3 impacket/examples/smbexec.py <target-ip> -username <username> -password <password>