Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
Инструменты/GitHubGitHub/zyn3rgy/ldaprelayscan
РазведкаСканеры уязвимостейАудит конфигурацииСбор информацииСетевая безопасностьТестирование на ПроникновениеАутентификацияRed Teaming
GitHubzyn3rgy/ldaprelayscan

LdapRelayScan

Проверка защиты LDAP в отношении ретрансляции NTLM-аутентификации

Репозиторий
531831 год назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

LDAP Relay Scan

Инструмент для проверки контроллеров домена на наличие серверных защит LDAP, связанных с ретрансляцией NTLM-аутентификации. Если вас интересуют подробности перечисления на основе ошибок, см. ниже. Подробнее о том, что можно сделать при обнаружении отсутствия защит LDAP, см. в разделе «Ссылки».

Краткое описание

Существует несколько серверных защит, которые действуют при попытке ретрансляции NTLM-аутентификации в LDAP на контроллерах домена. Защиты LDAP, которые пытается перечислить этот инструмент, включают:

  • LDAPS - привязка канала
  • LDAP - требования к подписи сервера

Применение привязки канала для LDAP по SSL/TLS можно определить с неаутентифицированной точки зрения. Это связано с тем, что ошибка, связанная с невозможностью клиента LDAP правильно выполнить привязку канала, возникает до проверки учетных данных в процессе bind LDAP.

Однако, чтобы определить, применяется ли серверная защита стандартного LDAP (требования целостности подписи сервера), сначала необходимо проверить учетные данные клиента во время bind LDAP. Потенциальная ошибка, указывающая на применение этой защиты, обнаруживается с аутентифицированной точки зрения.

TL;DR - LDAPS можно проверить без аутентификации, но проверка LDAP требует аутентификации.

Установка

Рекомендуется использовать Docker или виртуальное окружение Python при запуске этого проекта.

Docker

  1. Убедитесь, что на вашей машине установлен docker
  2. Клонируйте репозиторий и перейдите в каталог
    • git clone https://github.com/zyn3rgy/LdapRelayScan.git && cd LdapRelayScan
  3. Соберите Docker-контейнер
    • docker build -f docker/Dockerfile -t ldaprelayscan .
  4. [необязательно] Убедитесь, что скрипт работает правильно
    • docker run ldaprelayscan -h

Виртуальное окружение Python

  1. Убедитесь, что на вашей машине установлен python virtualenv
  2. Клонируйте репозиторий и перейдите в каталог
    • git clone https://github.com/zyn3rgy/LdapRelayScan.git && cd LdapRelayScan
  3. Создайте виртуальное окружение Python для проекта
    • virtualenv env
  4. Активируйте виртуальное окружение Python
    • source venv/bin/activate
  5. Установите зависимости точных версий из requirements
    • python3 -m pip install -r requirements_exact.txt
  6. [необязательно] Убедитесь, что скрипт работает правильно
    • python3 LdapRelayScan.py -h

Использование

ПРИМЕЧАНИЕ: DNS должен правильно разрешаться. Если вы используете SOCKS или работаете на хосте, не входящем в домен, убедитесь, что это работает.

Инструмент имеет два метода: LDAPS (по умолчанию) и BOTH. Для LDAPS требуется только IP-адрес контроллера домена, поскольку эту проверку можно выполнить без аутентификации. Метод BOTH требует имя пользователя и пароль или NT-хэш. Домен Active Directory не требуется — он будет определен через анонимный bind LDAP.

root@kitploit:~
arguments:
  -h, --help        show this help message and exit
  -method method    LDAPS or BOTH - LDAPS checks for channel binding, BOTH checks for LDAP signing and LDAP channel binding [authentication required]
  -dc-ip DC_IP      DNS Nameserver on network. Any DC's IPv4 address should work.
  -u username       Domain username value.
  -timeout timeout  The timeout for MSLDAP client connection.
  -p password       Domain username value.
  -nthash nthash    NT hash of password

Примеры

Примеры использования: базовые / виртуальное окружение

root@kitploit:~
python3 LdapRelayScan.py -method LDAPS -dc-ip 10.0.0.20
python3 LdapRelayScan.py -method BOTH -dc-ip 10.0.0.20 -u domainuser1 
python3 LdapRelayScan.py -method BOTH -dc-ip 10.0.0.20 -u domainuser1 -p badpassword2
python3 LdapRelayScan.py -method BOTH -dc-ip 10.0.0.20 -u domainuser1 -nthash e6ee750a1feb2c7ee50d46819a6e4d25

Примеры использования Docker

ПРИМЕЧАНИЕ: Возможность использования SOCKS передается через переменную окружения PROXY_CONFIG. Если требуется SOCKS, также необходимо использовать флаг --network=host, чтобы правильно маршрутизировать трафик. См. примеры ниже.

root@kitploit:~
docker run ldaprelayscan -h
docker run ldaprelayscan -dc-ip 10.0.0.20
docker run ldaprelayscan -dc-ip 10.0.0.20 -method BOTH -u domainuser1 -p secretpass
docker run -e PROXY_CONFIG='socks5 127.0.0.1 9050' --network=host ldaprelayscan -dc-ip 10.0.0.20 -method BOTH -u domainuser1 -p secretpass

Особенности перечисления на основе ошибок

[LDAPS] Требования к токену привязки канала

На контроллере домена, получившем обновления после CVE-2017-8563, появилась возможность принудительного применения привязки канала для LDAPS. Соответствующая политика называется Domain Controller: LDAP server channel binding token requirements и может иметь значения Never, When supported или Always. По умолчанию она не требуется (на момент написания этого текста).

Расшифровка и мониторинг трафика LDAP по SSL/TLS на контроллере домена позволили выявить различие в ошибках при попытках bind в зависимости от того, применяется ли привязка канала. При попытке bind к LDAP по SSL/TLS с неверными учетными данными вы получите ожидаемый resultCode 49, а в тексте сообщения об ошибке будет data 52e. Однако если привязка канала включена, а клиент LDAP не вычисляет и не включает токен привязки канала (CBT), resultCode останется 49, но сообщение об ошибке будет содержать data 80090346, что означает SEC_E_BAD_BINDINGS или что привязки канала SSPI, предоставленные клиентом, неверны.

ПРИМЕЧАНИЕ: Упоминания ошибки data 8009034 при bind LDAP по SSL/TLS [1] [2] [3] [4] [5]

«Never» против «When supported» против «Always»

Эта конкретная ошибка позволяет легко учесть случай, когда политика Domain Controller: LDAP server channel binding token requirements установлена в Always. Достаточно выполнить NTLM-based bind LDAPS с использованием клиента, не поддерживающего привязку канала, и поискать data 80090346 в ответной ошибке. Но что если политика установлена не в Always, а, скажем, в When supported? Ответ: выполните bind к LDAPS с NTLM-аутентификацией и намеренно неверно вычислите информацию привязки канала.

Сначала нам нужен LDAP-клиент, поддерживающий привязку канала. Для реализации PoC будет использоваться реализация SkelSec в msldap. Привязка канала появляется как значение AV_PAIR во время процесса NTLM challenge/response, а именно в Type 3 или AUTHENTICATE_MESSAGE. Вот еще один взгляд на расшифрованный трафик LDAPS на контроллере домена, показывающий, как выглядит попытка bind от клиента с поддержкой привязки канала:

Намеренный неверный расчет этого значения, когда рассматриваемая политика установлена в When supported, приведет к той же ошибке data 80090346. Это дает нам возможность различать все возможные значения этой политики в ее текущем виде без аутентификации. То, как это значение намеренно искажается, важно, поскольку простая ручная замена значения во время challenge/response аннулирует MIC.

[LDAP] Требования к подписи сервера

На контроллере домена политика Domain Controller: LDAP server signing requirements может быть установлена в None, Require signing или быть неопределенной. Если политика не определена, по умолчанию подпись не требуется (на момент написания). Ошибка, указывающая на обязательность этой защиты, возникает, когда sicily NTLM или simple bind-запрос отвечает resultCode 8, означающим strongerAuthRequired. Это происходит только в том случае, если учетные данные при bind LDAP были проверены.

Ссылки

Несколько бесценных ресурсов для контекстуализации этого материала и понимания того, как он вписывается в типовые сценарии атак.

  • @HackAndDo - NTLM relay
  • @_nwodtuhs - NTLM relay mindmap
  • @_dirkjan - PrivExchange, ADCS ESC8 write up, NTLM relay for RBCD write up и другие
  • @domchell - реализация Farmer и объяснение
  • @elad_shamir - подробные объяснения злоупотребления RBCD в различных сценариях, а также shadow credentials
  • @tifkin_ и @topotam77 - методы принуждения к NTLM-аутентификации
  • @skelsec - msldap с поддержкой привязки канала
Скачать инструмент