CodeKitHub
Ferramentas de codificação

Gerador de hash NTLM

Última atualização:

Um hash NTLM é calculado codificando a entrada como UTF-16LE (2 bytes por caractere, little-endian) e passando-a pelo algoritmo de resumo MD4 — essa operação de uma única passagem e sem salt é todo o esquema de hashing NTLM que o Microsoft Windows usa desde o NT 4.0 para armazenar os verificadores de senha. Esta ferramenta executa exatamente esse cálculo localmente no seu navegador, inteiramente em JavaScript, de modo que nada do que você digita é enviado a um servidor. Ela existe para trabalho de segurança legítimo — verificar exportações de hash do Active Directory, conferir os formatos de saída do hashcat ou do Mimikatz, ou resolver desafios de CTF e laboratórios de pentest — e não para atacar contas que não são suas ou que você não está autorizado a testar.

Hash NTLM

O que é esta ferramenta?

NTLM (NT LAN Manager) é o protocolo legado de autenticação desafio-resposta da Microsoft, ainda usado hoje em logons de contas locais do Windows e como alternativa em muitos ambientes de Active Directory. Seu verificador de senha — comumente chamado de "hash NTLM" — é definido na própria especificação do protocolo MS-NLMP da Microsoft como `MD4(UTF-16-LE(password))`: a senha é primeiro codificada em UTF-16 little-endian (cada caractere passa a ocupar 2 bytes, ao contrário do UTF-8), e essa sequência de bytes é então submetida uma única vez ao algoritmo MD4 da RFC 1320.

A etapa em UTF-16LE é o detalhe que mais gera erro na reimplementação do NTLM: calcular o hash dos bytes UTF-8 de uma string em vez dos seus bytes UTF-16LE produz um resumo completamente diferente e incorreto, mesmo que o texto visível pareça idêntico. Esta ferramenta codifica corretamente, então sua saída corresponde exatamente ao que o próprio Windows armazena e ao que ferramentas como o hashcat (modo 1000) e o Mimikatz esperam.

Como o NTLM é anterior ao design moderno de hashing de senhas, ele não tem nenhuma das proteções criadas depois especificamente para dificultar a quebra: nenhum salt por usuário, nenhum fator de custo configurável, nenhuma iteração deliberada. É uma única passagem de MD4, o que torna o cálculo extremamente rápido — algo conveniente para compatibilidade com sistemas legados, mas desastroso na hora de resistir a ataques de força bruta e de dicionário.

Por que usar?

  • Você acabou de extrair um lote de hashes do NTDS.dit de um cliente durante um pentest autorizado e quer conferir rapidamente se o seu próprio script de parsing gerou o formato de hash correto antes de jogar o dump completo no hashcat.
  • Está construindo uma ferramenta própria de auditoria de credenciais e acabou de escrever sua implementação de MD4(UTF-16LE) a partir da especificação MS-NLMP — cole um vetor de teste conhecido como "password" aqui para confirmar que a saída do seu código bate com o valor correto 8846F7EAEE8FB117AD06BDD830B7586C antes de confiar nele com dados reais.
  • Está resolvendo um desafio de CTF ou um exercício de laboratório caseiro sobre autenticação do Windows e precisa calcular rapidamente como deveria ser o hash NTLM de uma senha específica, sem precisar subir uma VM Windows só para checar um valor.
  • Está lecionando um curso de segurança sobre falhas de autenticação legada e quer mostrar aos alunos, ao vivo, por que a falta de salt no NTLM faz com que a mesma senha sempre produza o hash idêntico — não importa a qual conta ou domínio ela pertença.
  • 100% local: sua entrada nunca sai do navegador, então é seguro usar mesmo com material de credenciais sensível em uma avaliação autorizada.

Como usar

  1. Digite a senha ou string que deseja gerar hash na caixa de entrada.
  2. Clique em "Gerar hash NTLM".
  3. Leia o hash NTLM de 32 caracteres hexadecimais (a saída em maiúsculas vem ativada por padrão, do mesmo jeito que o Windows e a maioria das ferramentas de quebra de senha exibem — desmarque a caixa para minúsculas).
  4. Clique em "Copiar" para copiar o hash para a área de transferência.

Exemplo

Entrada

password

Resultado

8846F7EAEE8FB117AD06BDD830B7586C

Este é um vetor de teste bem conhecido e verificável de forma independente: o hash NTLM da string literal "password" é sempre 8846F7EAEE8FB117AD06BDD830B7586C. Você pode conferir a saída desta ferramenta com qualquer outra implementação NTLM correta.

NTLM comparado ao hashing moderno de senhas

A tabela abaixo destaca por que o NTLM é considerado obsoleto para proteger sistemas novos, mesmo permanecendo presente na infraestrutura legada do Windows e do Active Directory.

PropriedadeNTLMbcrypt / scrypt / Argon2
Primitiva subjacenteUma única passagem de MD4Hash lento criado propositalmente, com custo ajustável
SaltNenhum — senhas idênticas sempre geram o mesmo hashSalt aleatório único por senha
Iteração / stretchingNenhumaFator de custo configurável, que pode ser aumentado com o tempo
Resistência a força brutaMuito fraca — bilhões de tentativas por segundo em GPUs atuaisPropositalmente custoso a cada tentativa
Onde ainda é encontradoAutenticação legada do Windows, fallback do Active DirectoryAplicações novas, melhor prática atual

Ferramentas relacionadas

Se você precisa de um hash criptográfico de propósito geral em vez da construção MD4(UTF-16LE) específica do NTLM, estas ferramentas podem servir melhor.

Gerador de hash multialgoritmo · Gerador de MD5 · Gerador de senhas

Fluxos comuns de verificação de NTLM

Esta ferramenta é mais útil como uma checagem rápida de sanidade dentro de um fluxo de trabalho autorizado maior — confirmando um valor antes de confiar nele num pipeline maior, em vez de substituir esse pipeline por completo.

CenárioO que você está checandoPor que isso importa
Validação de script próprioSua implementação de MS-NLMP contra um vetor de teste conhecidoDetecta o erro UTF-8 vs. UTF-16LE antes que corrompa silenciosamente um dataset inteiro
Checagem pontual de hash extraídoUma entrada extraída de SAM/NTDS.dit contra um texto puro esperadoConfirma que sua ferramenta de extração interpretou o formato corretamente
Checagem de formato hashcat/MimikatzSe a estrutura de saída corresponde ao esperado pelo modo 1000Evita rodadas de quebra desperdiçadas contra uma lista de hash malformada
Exercícios de treinamento e CTFUm hash calculado manualmente contra a saída da ferramentaConstrói intuição sobre como o MS-NLMP realmente funciona, passo a passo

Perguntas frequentes

O que exatamente é um hash NTLM?

É o verificador de senha que o Windows calcula e armazena para a autenticação NT LAN Manager, definido na especificação MS-NLMP da Microsoft como MD4(UTF-16LE(password)) — uma única passagem de MD4 sobre a codificação em bytes UTF-16 little-endian da senha. Sempre tem 128 bits, exibidos como 32 caracteres hexadecimais.

Por que especificamente UTF-16LE, e não UTF-8 ou ASCII?

O Windows armazena texto internamente em UTF-16LE desde que o NT foi projetado, então as senhas também são codificadas dessa forma antes do hashing. Cada caractere passa a ocupar 2 bytes (em ordem little-endian), inclusive caracteres ASCII simples como "a", que se tornam 0x61 0x00 em vez de apenas 0x61. Calcular o hash dos bytes UTF-8 da mesma string produz um resultado totalmente diferente e errado — esse é o erro mais comum em implementações de NTLM feitas do zero.

É seguro usar NTLM hoje em dia?

Não, e a própria Microsoft recomenda migrar para o Kerberos sempre que possível. O NTLM não usa salt, então senhas idênticas sempre geram hashes idênticos em qualquer usuário e sistema, o que permite buscas em rainbow tables pré-calculadas. Também não tem iteração nem fator de custo — é uma única passagem de MD4 sem salt —, então GPUs modernas conseguem testar bilhões de combinações por segundo contra um hash capturado. Ele sobrevive basicamente por compatibilidade com sistemas e aplicativos Windows mais antigos.

Em que o NTLM difere do hashing moderno de senhas, como bcrypt, scrypt ou Argon2?

Os algoritmos modernos de hashing de senha são propositalmente lentos e usam salt: bcrypt, scrypt e Argon2 adicionam, cada um, um salt aleatório único por senha e um fator de custo ajustável que pode ser aumentado com o tempo à medida que o hardware fica mais rápido, justamente para tornar o brute-force caro mesmo em larga escala. O NTLM não faz nenhuma das duas coisas — foi projetado numa época em que o brute-force offline ainda não era uma ameaça prática, e isso fica evidente. É exatamente por isso que o NTLM nunca deveria ser usado para proteger algo criado hoje; os casos de uso reais desta ferramenta são compatibilidade com infraestrutura Windows já existente e testes de segurança autorizados, não a construção de sistemas novos.

Quais são os usos legítimos de um gerador de hash NTLM?

Verificar hashes extraídos de um banco de dados SAM ou de um NTDS.dit durante um teste de invasão autorizado ou uma auditoria de credenciais; conferir se suas próprias ferramentas ou scripts implementam o MS-NLMP corretamente; gerar hashes de teste para o hashcat (modo 1000) ou verificações de compatibilidade com o formato do Mimikatz em um laboratório sob seu controle; e resolver exercícios de CTF ou treinamento que envolvam explicitamente NTLM. Usar esta ferramenta para atacar contas ou sistemas que não são seus, ou para os quais você não tem autorização por escrito, não é um uso legítimo.

Minha senha ou entrada é enviada a um servidor?

Não. O cálculo do MD4 é executado inteiramente em JavaScript no seu navegador — não existe nenhuma API nativa do navegador para MD4, por isso ela é implementada diretamente no código do lado do cliente desta página — e nada do que você digita é transmitido para lugar nenhum.

Esta ferramenta também lida com o hash LM, ou só com NTLM?

Só NTLM. O hash LM mais antigo usa um esquema completamente diferente e mais fraco (divide a senha em duas metades de 7 caracteres e faz hash de cada uma com DES), e a Microsoft desativou o armazenamento de hash LM por padrão desde o Windows Vista. Se você precisar trabalhar especificamente com hashes LM legados, vai precisar de uma ferramenta separada feita para esse algoritmo.

Por que a mesma entrada sempre produz exatamente o mesmo hash, sem nenhuma aleatoriedade?

Isso é esperado e reflete exatamente o comportamento real do NTLM — o NTLM não tem salt, então MD4(UTF-16LE(entrada)) é uma função puramente determinística. A mesma entrada sempre gera a mesma saída, que é justamente a fraqueza que torna o NTLM vulnerável a ataques de rainbow table pré-calculadas.

Posso usar isso para gerar hash de outra coisa além de uma senha, tipo um nome de usuário ou um valor de desafio?

Tecnicamente sim — a ferramenta apenas calcula MD4(UTF-16LE(entrada)) sobre qualquer texto que você digitar, então funciona para qualquer string. Mas se você está trabalhando com o handshake completo de desafio-resposta do NTLMv2 (que envolve o hash NTLM mais um desafio do servidor, um nonce do cliente e HMAC-MD5), vai precisar de passos adicionais além desta calculadora de hash único.

Como posso verificar se a saída desta ferramenta está realmente correta?

Use o exemplo incluído: o hash NTLM da string literal "password" é um vetor de teste bem conhecido e publicado de forma independente — 8846F7EAEE8FB117AD06BDD830B7586C. Digite-o e confirme que obtém exatamente esse resultado, depois cruze com outra implementação confiável, como os próprios vetores de teste do hashcat, se quiser mais confiança.

Ferramentas relacionadas