EasyDA – простой скрипт для доступа к домену Windows

EasyDA – простой скрипт для доступа к домену Windows

У людей, которые проводят внутренние пентесты на доменах Windows, обычно возникают типовые проблемы, связанные, например, с использованием общих паролей. Если вы в состоянии получить хеш локального администратора, то во многих случаях можете скомпрометировать весь домен.

Автор: Даниэль Комптон (Daniel Compton)

У людей, которые проводят внутренние пентесты на доменах Windows, обычно возникают типовые проблемы, связанные, например, с использованием общих паролей. Если вы в состоянии получить хеш локального администратора, то во многих случаях можете скомпрометировать весь домен. Обычно тот же самый хеш используется и на других устройствах, и вы можете найти сеанс связи администратора домена, который может быть сымитирован при помощи соответствующих утилит.

Часто процесс поиска может быть довольно утомительным, особенно, если у вас большое количество хостов, на которых есть множество общих паролей локальных администраторов. Если, к примеру, вы скомпрометировали устройство, получили хеши локальных администраторов и выяснили, что они подходят к 2000 других устройств, как быстро вы можете найти локального администратора, который залогинился на одном из таких устройств?

Стандартный метод, доказавший свою состоятельность, выглядит так:
  • Получить файл с хешем.
  • Скормить его Keimpx или использовать модуль Metasploit SMB Login.
  • Найти хосты, к которым подходит хеш.
  • Получить список токенов сеансов связи для каждой системы, к которой подходит найденный хеш, при помощи утилит наподобие Incognito.
Incognito – прекрасная утилита, которая к тому же встроена в Metasploit и позволяет имитировать токены. Бинарная версия Incognito также включает в себя утилиту find_token.exe, позволяющую искать токены с корректными учетными данными локального администратора, однако не допускает использование значения хеша. Если вы не в состоянии подобрать значения хешей (которые вы можете найти в больших количествах в сетях с Windows 2008) и не можете получить пароли в чистом виде, то есть обходной путь – сымитировать хеш локально при помощи WCE (Windows Credential Editor), а затем использовать утилиту find_token.exe для поиска токенов. Однако для решения этой задачи требуется предпринять несколько шагов, и если у вас много хешей вам нужно выполнять эти шаги для каждого хеша. К тому же, утилита find_token.exe покажет список всех сеансов связи, включая локальных пользователей, поэтому потребуется множество проверок для выяснения того, кто же из пользователей является администратором домена.

Я хотел реализовать автоматизированное средство, которое принимало бы на входе одиночный хеш, список хешей или даже список учетных записей в открытом виде, а также список или диапазон IP-адресов, после чего происходил бы поиск на предмет использования общих учетных записей. Если утилита отыскивает общие пароли, используемые на устройствах, то далее выводится список устройств, где начаты сеансы под административными учетными записями. Обычно список содержит не просто незатейливые имена DOMAIN\Administrator, а список администраторов доменов с уникальными именами.

Теперь рассмотрим скрипт EasyDA, предназначенный для доступа к домену Windows. EasyDA – простой bash-скрипт, который принимает на входе единичный хеш, список хешей или учетные данные в открытом виде, а затем осуществляет поиск по списку IP-адресов на предмет использования общих паролей и выдает список тех пользователей, которые на данный момент находятся в системе. Механизм позволяет сопоставлять список полученных пользователей со списком администраторов доменов (который, возможно, также будет у вас) или искать определенного пользователя, а затем выдает конкретное место установления сеанса связи найденных пользователей. Затем происходит соединение с системой, имитация токена и перехват процесса или выгрузка пароля администратора домена в открытом виде.


В скрипте предусмотрено меню и пользоваться им довольно просто. Единственно, что нужно установить перед использованием скрипта, – Metasploit (http://www.metasploit.com).
Формат входных хешей подобен тому, что вы получаете при помощи Metasploit Hashdump, FGdump, Gsecdump, WCE, PWdump и т. д. Вы также можете передать единичный хеш или список хешей, как показано ниже:

admin1:1003:624AAC413795CDC1FF17365FAF1FFE89:3B1B47E42E0463276E3DED6CEF349F93:::
Administrator:500:ED537EC7634DBBBCAAD3B435B51404EE:3D0CED5A03CDA02AF9CA7CA30A4C85F7:::
testadm1:500:ED537EC7634DBBBCAAD3B435B51404EE:3D0CED5A03CDA02AF9CA7CA30A4C85F7:::
testadm2:500:ED537EC7634DBBBCAAD3B435B51404EE:3D0CED5A03CDA02AF9CA7CA30A4C85F7:::


Затем вы указываете список или диапазон IP-адресов или диапазоны бесклассовой адресации (Classless Inter-Domain Routing, CIDR) точно так же, как это делается в утилитах наподобие Nmap и Metasploit.

После этого скрипт сканирует IP-адреса на предмет использования там хешей или учетных записей.

Как показано на скриншоте ниже, общие учетные записи были найдены на множестве устройств.


Скрипт может искать пользователей, присутствующих в тех системах, где были найдены общие учетные записи.

Для упрощения процесса поиска вы можете передать в скрипт список администраторов доменов, чтобы опознать пользователей, которые находятся в системе как администраторы. Это необходимо потому, что ваша тестовая система не находится в домене и не сможет получить этот список на контроллере домена. Как правило, вы можете получить список либо на скомпрометированной системе, либо из других отчетов по тестированию домена.


Вы можете передать в скрипт текстовый файл, где содержатся необработанные выходные данные следующей команды:

net group "domain admins" /domain >domain-admins.txt

Выходной файл может быть передан без дополнительной обработки.

The request will be processed at a domain controller for domain testcompany.local.

User accounts for \\testdc.testcompany.local
-------------------------------------------------------------------------------

Administrator bob_adm Exch_adm

Exch2 Exec1 Guest

krbtgt steve_adm SUPPORT_388945a0

test_adm

The command completed successfully.

Скрипт произведет автоматическую сортировку и чтение данных.
Вы также можете передать в скрипт список пользователей (по одному на строку, как показано ниже) или просто ввести имя пользователя вручную.

Administrator
Admin
Sysadm
Test_admin

Идеальный вариант – указать скрипту интересующее имя домена. Это позволит удалить локальных пользователей, что сделать результаты поиска более удобочитаемыми. Если вы не знаете имя домена, выведется список всех залогиненных пользователей.
Далее скрипт соединится с каждым IP-адресом, используя список учетных записей, и выведет список залогиненных пользователей домена.


В примере выше был найден залогиненный пользователь TEST_ADM из домена TESTCOMPANY. Затем был выполнен поиск по списку администраторов и подтверждено, что пользователь TEST_ADM – администратор домена.


Как только найден сеанс администратора домена, можно подсоединиться к системе при помощи утилит наподобие Metasploit и сымитировать токен при помощи утилиты Incognito, а затем перехватить любой запущенный процесс или выгрузить учетные записи при помощи Mimikatz. Если вдруг вы столкнетесь с антивирусной защитой, вы всегда можете использовать бинарную версию Incognito (та, которая не является частью Metasploit) и запустить напрямую командную оболочку администратора домена; в таком случае вы не так часто будете наталкиваться на защиту.

Сам скрипт можно взять отсюда: https://github.com/nccgroup/easyda.

Домашний Wi-Fi – ваша крепость или картонный домик?

Узнайте, как построить неприступную стену