NetNTLMv1/v2 are legacy authentication protocols for Active Directory environments, where nowadays Kerberos is preferred instead. NTLM hashes are used but not sent over the network. Instead, hashes are used for challenge-response authentication. When a user authenticates into a server, the server serves as a jumping pad for the authentication request since only the DC knows the user hash. The server forwards the client’s response to the DC and DC replies with whether or not the client is authenticated. Alternatively, the process can be done locally if the server knows the hash (using SAM).

sequenceDiagram
    participant A as Client
    participant B as App Server
    participant C as DC
    A->>B: Username
    B->>A: Nonce
    A->>B: Nonce encrypted with hash
    B->>C: Username, Nonce, Response
    C->>B: Approve/deny authentication
    B->>A: Approve/deny authentication

Note that crack.sh also offers to crack hashes for a small fee.

The following explanations are taken from this Medium article.

NetNTLMv1

NetNTLMv1 is a legacy and insecure version of NetNTLM.

Example client response:

u4-netntlm::kNS:338d08f8e26de93300000000000000000000000000000000:9526fb8c23a90751cdd619b6cea564742e1e4bf33006ba41:cb8086049ec4736c

Client response composition:

C = 8-byte server challenge, random
K1 | K2 | K3 = LM/NT-hash | 5-bytes-0
response = DES(K1,C) | DES(K2,C) | DES(K3,C)

To crack NetNTLMv1 with john and hashcat:

john --format=netntlm hash.txt
hashcat -m 5500 -a 3 hash.txt

NetNTLMv2

NetNTLMv2 is a newer challenge-response authentication method based on HMAC-MD5 instead of DES.

Example client response:

admin::N46iSNekpT:08ca45b7d7ea58ee:88dcbe4446168966a153a0064958dac6:5c7830315c7830310000000000000b45c67103d07d7b95acd12ffa11230e0000000052920b85f78d013c31cdb3b92f5d765c783030

Client response composition:

SC = 8-byte server challenge, random
CC = 8-byte client challenge, random
CC* = (X, time, CC2, domain name)
v2-Hash = HMAC-MD5(NT-Hash, user name, domain name)
LMv2 = HMAC-MD5(v2-Hash, SC, CC)
NTv2 = HMAC-MD5(v2-Hash, SC, CC*)
response = LMv2 | CC | NTv2 | CC*

To crack NetNTLMv2 with john and hashcat:

john --format=netntlmv2 hash.txt
hashcat -m 5600 -a 3 hash.txt