Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
С атаками NTLM Relay специалисты по пентестам знакомы давно. В большинстве случаев предпосылки к успешной Relay-атаке — это не уязвимость, а особенность настройки инфраструктуры, поэтому атака часто используется в боевой обстановке на реальных проектах. Сегодня мы разберем, как выполняется такая атака, когда NTLM-аутентификация уже получена.
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 аутентификацию можно пересылать с любого другого протокола. Главное условие успешности Relay-атаки — это отсутствие требования подписи SMB-сообщений на машине, куда мы выполняем Relay. Чтобы проверить это, можно воспользоваться следующей командой:
crackmapexec smb -u '' -p '' --shares <target IP or nets or file>
На рисунке требование подписи включено, на этой машине выполнить атаку на SMB Relay не получится.
SMB Signing: True
А в этом примере на машине требование отключено, на нее Relay делать можно.
SMB Signing: False
Для автоматизации можно использовать следующую команду:
crackmapexec smb --gen-relay-list targets.txt <nets>
Создание списка целей для Relay на SMB
Рассмотрим варианты выполнения Relay на SMB. Самый простой вариант — выполнить Relay на машину с SMB, когда пересылаемая нами учетная запись имеет права локального администратора на целевом хосте. При выполнении такой пересылки сдампятся хеши SAM, и мы получим NT-хеш локального администратора и закрепимся на машине.
impacket-ntlmrelyx -t smb://<IP>
Успешный Relay на SMB
Но если прав нет, мы получим ошибку, и на этом атака закончится.
Неудачный Relay на SMB
В ситуации, когда у нас используется 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
Relay на SMB в интерактивном режиме
После этого у нас поднимается оболочка на локальном интерфейсе, к которой можно присоединиться следующей командой:
nc 127.0.0.1 11000
После подключения нам доступен обычный smbclient из Impacket с точно таким же синтаксисом.
Оболочка smbclient в результате Relay на SMB
Способ получения интерактивного режима может быть полезен, когда мы не знаем, есть у нас привилегированные права на целевой машине или нет. Если прав нет и мы пользуемся стандартным режимом — ничего не произойдет. Если права есть, мы хотя бы получим доступ ко всей файловой системе и, может быть, сумеем найти что‑то интересное. Но в целом есть еще более универсальный способ.
Может сложиться ситуация, когда мы не имеем прав локального администратора, но можем закрепиться на целевой машине от имени пересылаемой учетной записи с помощью флага -socks
:
impacket-ntlmrelyx -t smb://<IP> -socks
В этом режиме можно реализовать примерно следующую схему.
Схема Relay на SMB в режиме socks
После успешной Relay-атаки мы получаем SMB-сессию и можем использовать ее многократно с помощью proxychains4. Для этого редактируем конфигурационный файл /etc/proxychains4.conf
. В конец добавляем строчку:
socks4 127.0.0.1 1080
Для использования уже созданного соединения после настройки конфига proxychains подойдет следующий синтаксис:
proxychains4 impacket-smbclient 'domain/username@<target IP>' -no-pass
Стоит обратить внимание, что проходить аутентификацию таким образом можно только на машине, куда был совершен Relay. Запускаем ntlmrelayx с флагом socks
, в качестве целей указываем машины без SMB Signing.
Relay на SMB в режиме socks
Редактируем конфиг proxychains. Мы можем запускать smbclient без пароля через proxychains.
smbclient в контексте socks
Такой способ может позволить закрепиться на целевой машине даже не привилегированному пользователю, что используется в определенных ситуациях. Но если сессия окажется привилегированной, можно запустить secretsdump и получить NT-хеши.
secretsdump в контексте sock
Таким образом мы можем запускать весь софт из Impacket, а также основанные на нем скрипты. С помощью этого способа можно делать действительно удивительные вещи, но об этом чуть позже, а пока плавно переходим к следующему протоколу.
Источник: xakep.ru