Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
В этой статье я расскажу о тестировании сети одной государственной компании, в котором я участвовал. Организация несколько раз в год заказывала пентесты как внешней, так и внутренней инфраструктуры. Мы отрабатывали модель внутреннего нарушителя — злоумышленника, обладающего доступом к сети компании, но без привилегий в домене. Pentest Award
Этот текст занял третьей место на премии Pentest Award 2024 в категории «Пробив инфры». Соревнование ежегодно проводит компания Awilix.
Дело было осенью 2022 года. Мы работали вдвоем с коллегой: он отвечал за веб‑уязвимости, а я за анализ инфраструктуры — сервисы, домен и прочее.
Представитель заказчика из команды безопасников с порога заявил, что ничего у нас не получится, что их только недавно тестировали и все возможные дырки они закрыли. Он был настолько уверен в этом, что готов был спорить на ящик пенного. Немного жалею, что от спора мы решили отказаться.
В частности, в отделе безопасности утверждали, что регулярно проводят анализ NTDS путем прогона NTLM-хешей паролей доменных пользователей по популярным словарям, так что спреить на популярные пароли смысла нет.
И действительно, проект оказался непростым, учетную запись в домене мне не предоставили. Я проверил возможность LLMNR poisoning и прочие вариации этой атаки, попробовал слушать трафик, сканировал на предмет наличия популярных уязвимостей (Bluekeep, EternalBlue и тому подобных), проверил анонимные файловые ресурсы, нашел и изучил принтеры и МФУ. Веб тоже не дал никаких надежд.
В один прекрасный момент мне повезло: я нашел три хоста с активным сервисом DameWare, из них доменный был только один. В некоторых версиях этого продукта есть уязвимость CVE-2019-3980, позволяющая получить несанкционированный удаленный доступ к атакуемой системе.
Версия DameWare оказалась уязвимой, и мне удалось создать локальную учетную запись администратора, извлечь учетные данные из памяти процесса LSASS и развить атаку до полной компрометации домена. Опущу подробности этого вектора, они не представляют особого интереса, он был достаточно тривиален. Других векторов нам обнаружить тогда не удалось. Самое интересное было дальше.
info
Название домена целевой организации на всех скриншотах замазано, в текстовой части заменено test.local
.
warning
Статья имеет ознакомительный характер и предназначена для специалистов по безопасности, проводящих тестирование в рамках контракта. Автор и редакция не несут ответственности за любой вред, причиненный с применением изложенной информации. Распространение вредоносных программ, нарушение работы систем и нарушение тайны переписки преследуются по закону.
С заказчиком у нас был заключен договор сразу на два проекта, и весной 2023 года мы вернулись к нему снова, в ту же самую инфраструктуру, с той же самой точкой подключения, сервисов DameWare в сети уже не нашли. Заказчик с еще большей уверенностью стал заявлять, что в этот раз у нас точно ничего не получится, так как все замечания и единственный найденный нами баг они устранили. Даже спор снова предложил, а мы снова отказались. И снова пожалели об этом!
Доменную учетную запись нам, как всегда, не дали, и мы принялись за сетевое окружение. Я вновь посканировал на предмет аномальных ресурсов, обошел все МФУ, посниффал трафик и провел все прочие процедуры. Ничего. Мой коллега уязвимостей тоже не нашел.
И тут на одном из веб‑ресурсов мне попалось опубликованное .NET-приложение.
Веб‑ресурс ppo-app
После нажатия кнопки Start на странице http://ppo-app.test.local/
происходит скачивание исполняемых файлов приложения во временную директорию на компьютере пользователя. Я подробно изучил скачанное приложение и выяснил, что оно подключается к базе данных Microsoft SQL, размещенной на хосте PPO-BD.test.local
. Учетные данные для подключения к базе находятся в файле star.exe.config
, который скачивается вместе с приложением.
Окно настроек подключения к базе данных
Однако пароль от учетной записи хранится в нем в зашифрованном виде. По скриншоту может показаться, что это обычный Base64, но на поверку это оказалось не так.
Параметры подключения к базе данных в star.exe.config
Для расшифровки пароля я декомпилировал приложение с помощью ILSpy. В динамической библиотеке Star.Wpf.Controls.dll
нашлась функция EncryptionLogic
, содержащая ключ шифрования и алгоритм расшифровки. В результате мне удалось получить пароль от учетной записи базы данных asabrys
(это не доменная учетная запись). Затем с помощью DBeaver я подключился к базе данных.
У скомпрометированной учетки были права sysadmin в пределах MS SQL, чем я и воспользовался, чтобы включить оболочку xp_cmdshell, позволяющую исполнять команды операционной системы.
Оказалось, что сервер базы данных работает в контексте служебной учетной записи MSSQL$SQLEXPRESS
, у которой есть привилегия SeImpersonatePrivilege
, то есть можно выполнять команды в контексте любой учетной записи, в том числе системной.
Функция расшифровки пароля для подключения к базе данных (файл Star.Wpf.Controls.dll)
Чтобы загрузить необходимые инструменты на хост PPO-BD.test.local
, я развернул FTP-сервер на рабочей станции, с которой проводил тестирование. Для эскалации привилегий до уровня SYSTEM я использовал инструмент SharpImpersonation. С его помощью создал учетку локального администратора itadmin
. Затем со своего компьютера подключился к хосту PPO-BD.test.local
по протоколу RDP и с помощью обфусцированной сборки Mimikatz создал дамп памяти системного процесса lsass.exe и извлек хранящиеся там учетные данные.
В дампе памяти нашелся NTLM-хеш пароля учетной записи компьютера test.localPPO-BD$
. Других актуальных доменных учеток на хосте PPO-BD.test.local
не было.
Я использовал Rubeus, чтобы запросить TGT-билет Kerberos для учетной записи test.localPPO-BD$
, используя NTLM-хеш ее пароля. Это позволило получить доступ в домен test.local
.
Привилегии и контекст учетной записи сервера базы данных на хосте PPO-BD
Выполнение техники Pass the Hash для учетной записи PPO-BD$
Используя учетную запись компьютера PPO-BD$
, я собрал информацию о домене, включая данные о групповых политиках. При анализе скриптов, запускаемых этими политиками, удалось найти несколько файлов, в которых был прописан пароль для локальной учетной записи LocalAdmin
.
Пароль для локальной учетной записи LocalAdmin в скрипте
Я подключился к серверу OMO-FSCHANGE.test.local
от имени учетной записи LocalAdmin
. Быстрый осмотр содержимого дисков не принес ничего полезного — ценных данных не нашлось, активных сессий администраторов тоже не было. Зато удалось сделать дамп хранилища локальных учетных записей (LSA).
Дамп LSA на хосте OMO-FSCHANGE.test.local
Извлеченные из LSA локальные учетные данные включали NTLM-хеш локальной учетки admin-omsk
, которая состоит в группе локальных администраторов. После перебора хеша по словарю удалось восстановить пароль — 16010916.
С помощью локальной учетной записи admin-omsk
я получил доступ к серверу OMO-TECH.test.local
. На этом сервере нашел активную сессию учетной записи с таким же именем, но уже доменной — test.localadmin-omsk
.
Сессии на сервере OMO-TECH
Хоть учетная запись test.localadmin-omsk
и не входила в состав доменных административных групп, она оказалась владельцем учетных записей администраторов, отвечающих за регион «ОМСК».
Владелец учетной записи omo-adminvrs
Источник: xakep.ru