Содержание статьи
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 не получится.
![SMB Signing: True SMB Signing: True](https://static.xakep.ru/images/58eb47890f568b273aae5ebbee59ef0a/30746/2-0.png)
А в этом примере на машине требование отключено, на нее Relay делать можно.
![SMB Signing: False SMB Signing: False](https://static.xakep.ru/images/58eb47890f568b273aae5ebbee59ef0a/30747/2-1.png)
Для автоматизации можно использовать следующую команду:
crackmapexec smb --gen-relay-list targets.txt <nets>
![Создание списка целей для Relay на SMB Создание списка целей для Relay на SMB](https://static.xakep.ru/images/58eb47890f568b273aae5ebbee59ef0a/30748/2-2.png)
Рассмотрим варианты выполнения Relay на SMB. Самый простой вариант — выполнить Relay на машину с SMB, когда пересылаемая нами учетная запись имеет права локального администратора на целевом хосте. При выполнении такой пересылки сдампятся хеши SAM, и мы получим NT-хеш локального администратора и закрепимся на машине.
impacket-ntlmrelyx -t smb://<IP>
![Успешный Relay на SMB Успешный Relay на SMB](https://static.xakep.ru/images/58eb47890f568b273aae5ebbee59ef0a/30749/2-3.png)
Но если прав нет, мы получим ошибку, и на этом атака закончится.
![Неудачный Relay на SMB Неудачный Relay на SMB](https://static.xakep.ru/images/58eb47890f568b273aae5ebbee59ef0a/30750/2-4.png)
В ситуации, когда у нас используется 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 в интерактивном режиме Relay на SMB в интерактивном режиме](https://static.xakep.ru/images/58eb47890f568b273aae5ebbee59ef0a/30751/2-5.png)
После этого у нас поднимается оболочка на локальном интерфейсе, к которой можно присоединиться следующей командой:
nc 127.0.0.1 11000
После подключения нам доступен обычный smbclient из Impacket с точно таким же синтаксисом.
![Оболочка smbclient в результате Relay на SMB Оболочка smbclient в результате Relay на SMB](https://static.xakep.ru/images/58eb47890f568b273aae5ebbee59ef0a/30752/2-6.png)
Способ получения интерактивного режима может быть полезен, когда мы не знаем, есть у нас привилегированные права на целевой машине или нет. Если прав нет и мы пользуемся стандартным режимом — ничего не произойдет. Если права есть, мы хотя бы получим доступ ко всей файловой системе и, может быть, сумеем найти что‑то интересное. Но в целом есть еще более универсальный способ.
Может сложиться ситуация, когда мы не имеем прав локального администратора, но можем закрепиться на целевой машине от имени пересылаемой учетной записи с помощью флага -socks
:
impacket-ntlmrelyx -t smb://<IP> -socks
В этом режиме можно реализовать примерно следующую схему.
![Схема Relay на SMB в режиме socks Схема Relay на SMB в режиме socks](https://static.xakep.ru/images/58eb47890f568b273aae5ebbee59ef0a/30753/2-7.png)
После успешной Relay-атаки мы получаем SMB-сессию и можем использовать ее многократно с помощью proxychains4. Для этого редактируем конфигурационный файл /
. В конец добавляем строчку:
socks4 127.0.0.1 1080
Для использования уже созданного соединения после настройки конфига proxychains подойдет следующий синтаксис:
proxychains4 impacket-smbclient 'domain/username@<target IP>' -no-pass
Стоит обратить внимание, что проходить аутентификацию таким образом можно только на машине, куда был совершен Relay. Запускаем ntlmrelayx с флагом socks
, в качестве целей указываем машины без SMB Signing.
![Relay на SMB в режиме socks Relay на SMB в режиме socks](https://static.xakep.ru/images/58eb47890f568b273aae5ebbee59ef0a/30754/2-8.png)
Редактируем конфиг proxychains. Мы можем запускать smbclient без пароля через proxychains.
![smbclient в контексте socks smbclient в контексте socks](https://static.xakep.ru/images/58eb47890f568b273aae5ebbee59ef0a/30755/2-9.png)
Такой способ может позволить закрепиться на целевой машине даже не привилегированному пользователю, что используется в определенных ситуациях. Но если сессия окажется привилегированной, можно запустить secretsdump и получить NT-хеши.
![secretsdump в контексте sock secretsdump в контексте sock](https://static.xakep.ru/images/58eb47890f568b273aae5ebbee59ef0a/30756/2-10.png)
Таким образом мы можем запускать весь софт из Impacket, а также основанные на нем скрипты. С помощью этого способа можно делать действительно удивительные вещи, но об этом чуть позже, а пока плавно переходим к следующему протоколу.
LDAP (389/TCP, 636/TCP)
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»