diff --git a/authenticate_message.go b/authenticate_message.go index e9a6d67..0a9195b 100644 --- a/authenticate_message.go +++ b/authenticate_message.go @@ -3,6 +3,7 @@ package ntlmssp import ( "bytes" "crypto/rand" + "encoding/base64" "encoding/binary" "errors" "time" @@ -86,6 +87,10 @@ func ProcessChallenge(challengeMessageData []byte, user, password string) ([]byt return nil, errors.New("Anonymous authentication not supported") } + // debugging + PrintDebug("Received NTLM Type 2 Challenge: %s", base64.StdEncoding.EncodeToString(challengeMessageData)) + DecodeNTLMMessage(challengeMessageData) + var cm challengeMessage if err := cm.UnmarshalBinary(challengeMessageData); err != nil { PrintDebug("Failed to unmarshal challenge data") @@ -119,7 +124,7 @@ func ProcessChallenge(challengeMessageData []byte, user, password string) ([]byt rand.Reader.Read(clientChallenge) ntlmV2Hash := getNtlmV2Hash(password, user, cm.TargetName) - PrintDebug("NTLM V2 hash '%s'", ntlmV2Hash) + PrintDebug("NTLM V2 hash '%s'", base64.StdEncoding.EncodeToString(ntlmV2Hash)) am.NtChallengeResponse = computeNtlmV2Response(ntlmV2Hash, cm.ServerChallenge[:], clientChallenge, timestamp, cm.TargetInfoRaw) diff --git a/negotiator.go b/negotiator.go index f1353b6..2e2e991 100644 --- a/negotiator.go +++ b/negotiator.go @@ -123,8 +123,8 @@ func (l Negotiator) RoundTrip(req *http.Request) (res *http.Response, err error) } // debugging - PrintDebug("Received NTLM Type 2 Challenge: %s", base64.StdEncoding.EncodeToString(challengeMessage)) - DecodeNTLMMessage(challengeMessage) + //PrintDebug("Received NTLM Type 2 Challenge: %s", base64.StdEncoding.EncodeToString(challengeMessage)) + //DecodeNTLMMessage(challengeMessage) if !(resauth.IsNegotiate() || resauth.IsNTLM()) || len(challengeMessage) == 0 { // Negotiation failed, let client deal with response diff --git a/nlmp.go b/nlmp.go index 1e65abe..08910fb 100644 --- a/nlmp.go +++ b/nlmp.go @@ -10,8 +10,9 @@ package ntlmssp import ( "crypto/hmac" "crypto/md5" - "golang.org/x/crypto/md4" "strings" + + "golang.org/x/crypto/md4" ) func getNtlmV2Hash(password, username, target string) []byte { @@ -28,13 +29,20 @@ func computeNtlmV2Response(ntlmV2Hash, serverChallenge, clientChallenge, timestamp, targetInfo []byte) []byte { temp := []byte{1, 1, 0, 0, 0, 0, 0, 0} + PrintDebug("NTLMv2 response", temp) temp = append(temp, timestamp...) + PrintDebug("NTLMv2 response", temp) temp = append(temp, clientChallenge...) + PrintDebug("NTLMv2 response", temp) temp = append(temp, 0, 0, 0, 0) + PrintDebug("NTLMv2 response", temp) temp = append(temp, targetInfo...) + PrintDebug("NTLMv2 response", temp) temp = append(temp, 0, 0, 0, 0) + PrintDebug("NTLMv2 response", temp) NTProofStr := hmacMd5(ntlmV2Hash, serverChallenge, temp) + PrintDebug("Proof string", NTProofStr) return append(NTProofStr, temp...) }