Содержание статьи
info
О том, как получить NTLM-аутентификацию, предшествующую Relay-атаке, подробно рассказано в статье «Гид по NTLM Relay. Захватываем NTLM-аутентификацию для Relay-атаки». NTLM Relay-атаки можно проводить не только в Active Directory, но еще, например, в ALD и FreeIPA-доменах.
Для глубокого понимания темы с точки зрения теории рекомендую прочитать статью. Прежде чем перейти непосредственно к разбору методов, договоримся о терминах.
Допустим, клиент хочет пройти аутентификацию с машины Work1 на SMB, атакующий перехватывает эту сессию и хочет пройти аутентификацию на LDAP. Такой кейс мы будем называть Relay с SMB на LDAP.
Еще один пример, чтобы закрепить наше понимание. Клиент хочет пройти аутентификацию с машины Work1 на HTTP, атакующий перехватывает эту сессию и хочет пройти аутентификацию на SMB. Такой кейс мы будем называть Relay с HTTP на SMB.
Клиенты
Для реализации атаки нам нужен клиент и сервер, ntlmrelayx как раз по такой модели и построен. Про RelayServers мы говорили в прошлой статье, в этой будем говорить про RelayClients.
SMB (445/TCP)
На SMB аутентификацию можно пересылать с любого другого протокола. Главное условие успешности Relay-атаки — это отсутствие требования подписи SMB-сообщений на машине, куда мы выполняем Relay. Чтобы проверить это, можно воспользоваться следующей командой:
crackmapexec smb -u '' -p '' --shares <target IP or nets or file>
На рисунке требование подписи включено, на этой машине выполнить атаку на SMB Relay не получится.
А в этом примере на машине требование отключено, на нее Relay делать можно.
Для автоматизации можно использовать следующую команду:
crackmapexec smb --gen-relay-list targets.txt <nets>
Рассмотрим варианты выполнения Relay на SMB. Самый простой вариант — выполнить Relay на машину с SMB, когда пересылаемая нами учетная запись имеет права локального администратора на целевом хосте. При выполнении такой пересылки сдампятся хеши SAM, и мы получим NT-хеш локального администратора и закрепимся на машине.
impacket-ntlmrelyx -t smb://<IP>
Но если прав нет, мы получим ошибку, и на этом атака закончится.
В ситуации, когда у нас используется SMBv2, всегда необходимо добавлять флаг -smb2support
. В качестве цели можно указать файл, где перечисляются в порядке приоритета цели и протокол, на который надо выполнить атаку, примерно в следующем формате:
smb://IP1
ldap://IP2
smb://IP3
rpc://IP4
Чтобы подать на вход этот файл со списком целей, используем флаг -tf
:
impacket-ntlmrelayx -tf targt.txt
И тут стоит сказать, что обычно аутентификация прилетает не одна, а сразу несколько, поэтому можно попробовать Relay в несколько мест. Но также в ntlmrelayx есть механизм multirelay, суть которого состоит в том, что он может одну условную аутентификацию превратить в десять. Это действительно работает, но не стабильно. При первой же ошибке или отказе доступа процесс остановится. Чтобы отключить этот механизм в случае с несколькими целями, нужно добавить в команду параметр --no-multirelay
:
impacket-ntlmrelayx -tf targt.txt -smb2support --no-multirelay
А также важно не забыть добавить необходимые флаги для каждого из протоколов, которые присутствуют в списке целей. Применительно ко всем остальным клиентам эта информация тоже актуальна.
Для взаимодействия с сетевыми папками целевой машины от имени пересылаемой учетной записи можем использовать интерактивный режим:
impacket-ntlmrelyx -t smb://<IP> -i
После этого у нас поднимается оболочка на локальном интерфейсе, к которой можно присоединиться следующей командой:
nc 127.0.0.1 11000
После подключения нам доступен обычный smbclient из Impacket с точно таким же синтаксисом.
Способ получения интерактивного режима может быть полезен, когда мы не знаем, есть у нас привилегированные права на целевой машине или нет. Если прав нет и мы пользуемся стандартным режимом — ничего не произойдет. Если права есть, мы хотя бы получим доступ ко всей файловой системе и, может быть, сумеем найти что‑то интересное. Но в целом есть еще более универсальный способ.
Может сложиться ситуация, когда мы не имеем прав локального администратора, но можем закрепиться на целевой машине от имени пересылаемой учетной записи с помощью флага -socks
:
impacket-ntlmrelyx -t smb://<IP> -socks
В этом режиме можно реализовать примерно следующую схему.
После успешной Relay-атаки мы получаем SMB-сессию и можем использовать ее многократно с помощью proxychains4. Для этого редактируем конфигурационный файл /
. В конец добавляем строчку:
socks4 127.0.0.1 1080
Для использования уже созданного соединения после настройки конфига proxychains подойдет следующий синтаксис:
proxychains4 impacket-smbclient 'domain/username@<target IP>' -no-pass
Стоит обратить внимание, что проходить аутентификацию таким образом можно только на машине, куда был совершен Relay. Запускаем ntlmrelayx с флагом socks
, в качестве целей указываем машины без SMB Signing.
Редактируем конфиг proxychains. Мы можем запускать smbclient без пароля через proxychains.
Такой способ может позволить закрепиться на целевой машине даже не привилегированному пользователю, что используется в определенных ситуациях. Но если сессия окажется привилегированной, можно запустить secretsdump и получить NT-хеши.
Таким образом мы можем запускать весь софт из Impacket, а также основанные на нем скрипты. С помощью этого способа можно делать действительно удивительные вещи, но об этом чуть позже, а пока плавно переходим к следующему протоколу.
LDAP (389/TCP, 636/TCP)
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»