use the username and domain from the authenticate message instead of using the values passed in via SetUserInfo
This commit is contained in:
parent
35794c1930
commit
452979e4c9
@ -2,8 +2,8 @@
|
|||||||
package ntlm
|
package ntlm
|
||||||
|
|
||||||
import (
|
import (
|
||||||
rc4P "crypto/rc4"
|
|
||||||
"bytes"
|
"bytes"
|
||||||
|
rc4P "crypto/rc4"
|
||||||
"encoding/binary"
|
"encoding/binary"
|
||||||
"errors"
|
"errors"
|
||||||
"ntlm/messages"
|
"ntlm/messages"
|
||||||
@ -30,6 +30,8 @@ func (n *V2Session) SetMode(mode Mode) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (n *V2Session) fetchResponseKeys() (err error) {
|
func (n *V2Session) fetchResponseKeys() (err error) {
|
||||||
|
// Usually at this point we'd go out to Active Directory and get these keys
|
||||||
|
// Here we are assuming we have the information locally
|
||||||
n.responseKeyLM = lmowfv2(n.user, n.password, n.userDomain)
|
n.responseKeyLM = lmowfv2(n.user, n.password, n.userDomain)
|
||||||
n.responseKeyNT = ntowfv2(n.user, n.password, n.userDomain)
|
n.responseKeyNT = ntowfv2(n.user, n.password, n.userDomain)
|
||||||
return
|
return
|
||||||
@ -170,6 +172,10 @@ func (n *V2ServerSession) ProcessAuthenticateMessage(am *messages.Authenticate)
|
|||||||
n.negotiateFlags = am.NegotiateFlags
|
n.negotiateFlags = am.NegotiateFlags
|
||||||
n.clientChallenge = am.ClientChallenge()
|
n.clientChallenge = am.ClientChallenge()
|
||||||
n.encryptedRandomSessionKey = am.EncryptedRandomSessionKey.Payload
|
n.encryptedRandomSessionKey = am.EncryptedRandomSessionKey.Payload
|
||||||
|
// Ignore the values used in SetUserInfo and use these instead from the authenticate message
|
||||||
|
// They should always be correct (I hope)
|
||||||
|
n.user = am.UserName.String()
|
||||||
|
n.userDomain = am.DomainName.String()
|
||||||
|
|
||||||
err = n.fetchResponseKeys()
|
err = n.fetchResponseKeys()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -184,17 +190,17 @@ func (n *V2ServerSession) ProcessAuthenticateMessage(am *messages.Authenticate)
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
err = n.computeKeyExchangeKey()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
if !bytes.Equal(am.NtChallengeResponseFields.Payload, n.ntChallengeResponse) {
|
if !bytes.Equal(am.NtChallengeResponseFields.Payload, n.ntChallengeResponse) {
|
||||||
if !bytes.Equal(am.LmChallengeResponse.Payload, n.lmChallengeResponse) {
|
if !bytes.Equal(am.LmChallengeResponse.Payload, n.lmChallengeResponse) {
|
||||||
return errors.New("Could not authenticate")
|
return errors.New("Could not authenticate")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
err = n.computeKeyExchangeKey()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
n.mic = am.Mic
|
n.mic = am.Mic
|
||||||
am.Mic = zeroBytes(16)
|
am.Mic = zeroBytes(16)
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user