Атака RBCD для захвата домена Active Directory

Атака RBCD для захвата домена Active Directory

В этой статье, на примере прохождения задания Support Hack The Box я покажу, как провести ата­ку RBCD для захвата домена Active Directory.

Еще по теме: Атаки на службы сертификатов Active Directory

Лучше подключаться к машине HTB с помощью VPN. И желательно не делать это со своего личного компа, на котором хранится чувствительная информация. Подробнее в статье «Как подключиться и использовать Hack The Box»

Для начала до­бав­им IP-адрес машины в /etc/hosts:

Начнем со сканирования портов. Это стан­дар­тная операция при любом пентесте. Сканирование портов позволит определить, какие служ­бы на машине при­нима­ют соеди­нение.

Для этого отлично подходит популярный сканер Nmap. Следующий скрипт улучшит резуль­таты сканирования:

Он дей­ству­ет в два эта­па. Пер­вый про­изво­дит­ просто быс­трое ска­ниро­вание, вто­рой — глубокое ска­ниро­вание, используя име­ющиеся скрип­ты (опция 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.

Об­щие ресур­сы
Об­щие ресур­сы

После подключения к расшареному ресур­су ищем, что-нибудь интересное.

Со­дер­жимое катало­га support-tools
Со­дер­жимое катало­га support-tools

Исходя из названий фай­лов, нас может заинтересовать UserInfo.exe.zip.

Со­дер­жимое архи­ва UserInfo.exe.zip
Со­дер­жимое архи­ва UserInfo.exe.zip

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

Ис­ходный код клас­са Protected
Ис­ходный код клас­са Protected

Да­вайте вос­ста­новим алго­ритм и узна­ем пароль.

Рас­шифро­ван­ный пароль из при­ложе­ния
Рас­шифро­ван­ный пароль из при­ложе­ния

В ито­ге получа­ем пароль и про­дол­жаем ана­лиз при­ложе­ния.

В исходном коде клас­са LdapQuery мож­но узнать имя поль­зовате­ля, которое исполь­зует­ся при под­клю­чении к LDAP.

Ис­ходный код клас­са LdapQuery
Ис­ходный код клас­са LdapQuery

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

Па­нель авто­риза­ции JXplorer
Па­нель авто­риза­ции JXplorer

 

Глав­ное окно JXplorer
Глав­ное окно JXplorer

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

Ат­рибуты поль­зовате­ля support

Воз­можно, это пароль. Про­верить гипоте­зу мож­но с помощью CrackMapExec.

Про­вер­ка учет­ных дан­ных
Про­вер­ка учет­ных дан­ных

Мы наш­ли пароль поль­зовате­ля домена, поп­робу­ем извлечь из это­го боль­ше информа­ции. На уда­лен­ном хос­те активна служ­ба уда­лен­ного управле­ния Windows, поэто­му получим спи­сок поль­зовате­лей груп­пы Remote Management Users.

Поль­зовате­ли в груп­пе Remote Management Users
Поль­зовате­ли в груп­пе Remote Management Users

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

Флаг поль­зовате­ля
Флаг поль­зовате­ля

Те­перь нуж­но разоб­рать­ся, куда дви­гать­ся даль­ше. Инс­тру­мен­ты WinPEAS и PowerUp ничего не дали, зна­чит, нуж­на более прод­винутая раз­ведка, в которой мы задей­ству­ем BloodHound.

Ути­лита BloodHound исполь­зует теорию гра­фов для выяв­ления скры­тых и зачас­тую неп­редна­мерен­ных вза­имос­вязей в сре­де Active Directory. Ее мож­но исполь­зовать, что­бы лег­ко иден­тифици­ровать очень слож­ные пути ата­ки.

Помимо самой ути­литы, которая поз­воля­ет прос­матри­вать граф, сущес­тву­ет часть, заг­ружа­емая на уда­лен­ный хост для сбо­ра информа­ции. Она быва­ет в вер­сиях для Windows — на PowerShell или C# — и для Linux — на Python.

Пер­вым делом кача­ем с GitHub вер­сию наг­рузки BloodHound на Python:

А теперь соберем информа­цию с целево­го хос­та, бла­го это не зай­мет мно­го вре­мени. В парамет­рах ука­зыва­ем учет­ные дан­ные для под­клю­чения, адрес хос­та и тип собира­емой информа­ции — всю (параметр -c, зна­чение all).

Ло­ги BloodHound
Ло­ги BloodHound

В логах видим, сколь­ко доменов, лесов и компь­юте­ров было най­дено, сколь­ко поль­зовате­лей и групп получе­но. BloodHound соз­даст в текущей дирек­тории нес­коль­ко фай­лов. Для работы с ними нам нуж­но уста­новить СУБД Neo4j и гра­фичес­кую оснас­тку BloodHound для пос­тро­ения гра­фа свя­зей.

За­пус­тим уста­нов­ленную СУБД коман­дой

Пос­ле сооб­щения об успешном стар­те зай­дем через бра­узер на:

Нам сра­зу пред­ложат уста­новить пароль. Пос­ле уста­нов­ки пароля запус­каем BloodHound (коман­да bloodhound в коман­дной стро­ке) и авто­ризу­емся с толь­ко что уста­нов­ленным паролем. Откро­ется пус­тое окош­ко. Закиды­ваем в него получен­ные в резуль­тате работы bloodhound-python фай­лы.

В поле поис­ка ука­зыва­ем груп­пу поль­зовате­лей. На экра­не будут отоб­ражены все поль­зовате­ли из этой груп­пы, сре­ди которых най­дем всех под­кон­троль­ных нам и пометим как Mark User as Owned. На икон­ке поль­зовате­ля дол­жен появить­ся череп.

По­мечен­ный поль­зователь
По­мечен­ный поль­зователь

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

Граф пути повыше­ния при­виле­гий
Граф пути повыше­ния при­виле­гий

Ес­ли сле­довать гра­фу, то целевой поль­зователь Support — член груп­пы Shared Support Accounts, которая, в свою оче­редь, име­ет пра­ва GenericAll (пол­ные пра­ва) на объ­ект кон­трол­лера домена.

В дан­ном слу­чае мы можем про­вес­ти ата­ку RBCD. Обыч­ный спо­соб про­веде­ния этой ата­ки — соз­дать учет­ную запись компь­юте­ра, что может сде­лать каж­дый поль­зователь домена (по умол­чанию до десяти таких акка­унтов).

Сде­лаем это с помощью скрип­та addcomputer из набора скрип­тов impacket.

Соз­дание учет­ной записи компь­юте­ра
Соз­дание учет­ной записи компь­юте­ра

Но­вый SPN необ­ходимо ука­зать вот в этом атри­буте целево­го объ­екта (в нашем слу­чае кон­трол­лера домена):

Для это­го мож­но исполь­зовать го­товый скрипт.

За­пол­нение целево­го атри­бута
За­пол­нение целево­го атри­бута

За­тем, исполь­зуя дан­ные этой учет­ной записи, зло­умыш­ленник может получить тикет через зап­росы S4U2Self и  S4U2Proxy. В этом тоже поможет пакет скрип­тов impacket.

Зап­рос тикета
Зап­рос тикета

Пос­ле получе­ния тикета мож­но исполь­зовать Pass-the-Ticket (см. также Атака Pass the hash Pass the ticket ) для дос­тупа к целево­му хос­ту. Экспор­тиру­ем билет и под­клю­чаем­ся к сер­веру по WMI.

Флаг рута
Флаг рута

Ма­шина Support Hack The Box зах­вачена!

ПОЛЕЗНЫЕ ССЫЛКИ:

ВКонтакте
OK
Telegram
WhatsApp
Viber

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *