Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
LdapRelayScan — Verifica as proteções LDAP referentes ao relay da autenticação NTLM. | Kitploit
Ferramentas/GitHubGitHub/zyn3rgy/ldaprelayscan
ReconhecimentoScanners de VulnerabilidadesAuditoria de ConfiguraçãoColeta de InformaçõesSegurança de RedeTestes de PenetraçãoAutenticaçãoRed Teaming
GitHubzyn3rgy/ldaprelayscan

LdapRelayScan

Verifica as proteções LDAP referentes ao relay da autenticação NTLM.

Ver Repositório
53183há 1 anoRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

LDAP Relay Scan

Uma ferramenta para verificar Controladores de Domínio quanto às proteções do servidor LDAP relacionadas ao relay de autenticação NTLM. Se você tiver interesse nos detalhes da enumeração baseada em erros, veja abaixo. Para detalhes sobre o que pode ser feito quando você identifica a falta de proteções LDAP, consulte a seção de referências.

Resumo

Existem algumas proteções no lado do servidor ao tentar fazer relay de autenticação NTLM para LDAP em Controladores de Domínio. As proteções LDAP que esta ferramenta tenta enumerar incluem:

  • LDAPS - channel binding
  • LDAP - requisitos de assinatura do servidor

A imposição do channel binding para LDAP sobre SSL/TLS pode ser determinada a partir de uma perspectiva não autenticada. Isso ocorre porque o erro associado a um cliente LDAP sem a capacidade de realizar o channel binding corretamente ocorrerá antes que as credenciais sejam validadas durante o processo de bind LDAP.

No entanto, para determinar se a proteção no lado do servidor do LDAP padrão é imposta (requisitos de integridade de assinatura do servidor), as credenciais do cliente devem primeiro ser validadas durante o bind LDAP. O possível erro que identifica a imposição dessa proteção é identificado a partir de uma perspectiva autenticada.

TL;DR - LDAPS pode ser verificado sem autenticação, mas verificar LDAP exige autenticação.

Instalação

É recomendado usar Docker ou um ambiente virtual Python ao executar este projeto.

Docker

  1. Garanta que o docker esteja instalado na sua máquina
  2. Clone o repositório e mude de diretório
    • git clone https://github.com/zyn3rgy/LdapRelayScan.git && cd LdapRelayScan
  3. Construa o contêiner Docker
    • docker build -f docker/Dockerfile -t ldaprelayscan .
  4. [opcionalmente] Garanta que o script execute corretamente
    • docker run ldaprelayscan -h

Ambiente Virtual Python

  1. Garanta que o python virtualenv esteja instalado na sua máquina
  2. Clone o repositório e mude de diretório
    • git clone https://github.com/zyn3rgy/LdapRelayScan.git && cd LdapRelayScan
  3. Crie um ambiente virtual Python para o projeto
    • virtualenv env
  4. Ative o ambiente virtual Python
    • source venv/bin/activate
  5. Instale as dependências exatas de versão dos requisitos
    • python3 -m pip install -r requirements_exact.txt
  6. [opcionalmente] Garanta que o script execute corretamente
    • python3 LdapRelayScan.py -h

Uso

NOTA: O DNS precisa resolver corretamente. Se você estiver roteando por SOCKS ou executando em um host não ingressado no domínio, garanta que isso esteja funcionando.

A ferramenta tem dois métodos: LDAPS (o padrão) e BOTH. LDAPS requer apenas o endereço IP do controlador de domínio, porque essa verificação pode ser realizada sem autenticação. O método BOTH exigirá um nome de usuário e senha ou hash NT. O domínio do Active Directory não é necessário; ele será determinado por meio de bind LDAP anônimo.

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

Exemplos

Exemplos de Uso Básico / Ambiente Virtual

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

Exemplos de Uso com Docker

NOTA: A capacidade de usar SOCKS é passada por meio da variável de ambiente PROXY_CONFIG. Se o SOCKS for necessário, a flag --network=host também precisará ser usada para rotear o tráfego corretamente. Veja os exemplos abaixo.

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

Detalhes da Enumeração Baseada em Erros

[LDAPS] Requisitos de Token de Channel Binding

Em um Controlador de Domínio corrigido desde o CVE-2017-8563, a capacidade de impor o channel binding de LDAPS existe. A política específica é chamada Domain Controller: LDAP server channel binding token requirements e pode ser definida como Never, When supported ou Always. Isso também não é obrigatório por padrão (no momento em que este texto foi escrito).

A descriptografia e o monitoramento do tráfego LDAP sobre SSL/TLS em um Controlador de Domínio permitiram identificar uma diferença nos erros durante tentativas de bind quando o channel binding é imposto versus quando não é. Ao tentar um bind em LDAP sobre SSL/TLS usando credenciais inválidas, você receberá o esperado resultCode 49 e, no conteúdo da mensagem de erro, verá data 52e. No entanto, quando o channel binding é imposto e o cliente LDAP não calcula e inclui o Channel Binding Token (CBT), o resultCode ainda será 49, mas o conteúdo da mensagem de erro conterá data 80090346, significando SEC_E_BAD_BINDINGS ou que os channel bindings da Security Support Provider Interface (SSPI) fornecidos pelo cliente estavam incorretos.

NOTA: Menções do erro data 8009034 durante o bind LDAP sobre SSL/TLS [1] [2] [3] [4] [5]

"Never" vs "When supported" vs "Always"

Esse erro específico torna bastante simples lidar com o caso em que a política Domain Controller: LDAP server channel binding token requirements está definida como Always. Basta tentar um bind LDAPS baseado em NTLM usando um cliente que não suporte channel binding e procurar o data 80090346 no erro em resposta. Mas e quando a política não está definida como Always, e quando está definida como When supported? A resposta é: faça bind ao LDAPS com autenticação baseada em NTLM e calcule propositalmente de forma incorreta as informações de channel binding.

Primeiro, precisamos de um cliente LDAP que suporte channel binding. A implementação de SkelSec disso no msldap será usada para implementar uma PoC. O channel binding aparece como um valor AV_PAIR durante o processo de desafio/resposta NTLM, especificamente no Tipo 3 ou AUTHENTICATE_MESSAGE. Aqui está mais uma visão de algum tráfego LDAPS descriptografado em um Controlador de Domínio para ver como é uma tentativa de bind de um cliente que suporta channel binding:

Calcular intencionalmente esse valor de forma incorreta, quando a política em questão está definida como When supported, produzirá o mesmo erro data 80090346. Isso nos dá a capacidade de diferenciar todas as configurações possíveis dessa política, como ela existe atualmente, a partir de uma perspectiva não autenticada. A forma como esse valor é propositalmente calculado incorretamente é importante, pois apenas substituir manualmente o valor durante o desafio/resposta invalidará o MIC.

[LDAP] Requisitos de Assinatura do Servidor

Em um Controlador de Domínio, a política chamada Domain Controller: LDAP server signing requirements é definida como None, Require signing ou simplesmente não é definida. Quando não definida, o padrão é não exigir assinatura (no momento em que este texto foi escrito). O erro que identifica essa proteção como obrigatória ocorre quando uma tentativa de bind sicily NTLM ou simple responde com um resultCode 8, significando strongerAuthRequired. Isso só ocorrerá se as credenciais durante o bind LDAP forem validadas.

Referências

Alguns recursos inestimáveis para contextualizar este material e como ele se encaixa em cenários de ataque comuns.

  • @HackAndDo - NTLM relay
  • @_nwodtuhs - mapa mental de NTLM relay
  • @_dirkjan - PrivExchange, o write-up do ADCS ESC8, o write-up sobre NTLM relay para RBCD e mais
  • @domchell - implementação do Farmer e explicação
  • @elad_shamir - explicações detalhadas sobre abuso de RBCD em múltiplos cenários e shadow credentials
  • @tifkin_ e @topotam77 - métodos de coerção de autenticação NTLM
  • @skelsec - msldap com suporte para channel binding
Baixar ferramenta