rename Authenticate/Challenge/Negotiate to *Message
This commit is contained in:
parent
af256c1a87
commit
6783d408ba
@ -10,7 +10,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Authenticate struct {
|
type AuthenticateMessage struct {
|
||||||
// sig - 8 bytes
|
// sig - 8 bytes
|
||||||
Signature []byte
|
Signature []byte
|
||||||
// message type - 4 bytes
|
// message type - 4 bytes
|
||||||
@ -53,8 +53,8 @@ type Authenticate struct {
|
|||||||
Payload []byte
|
Payload []byte
|
||||||
}
|
}
|
||||||
|
|
||||||
func ParseAuthenticateMessage(body []byte, ntlmVersion int) (*Authenticate, error) {
|
func ParseAuthenticateMessage(body []byte, ntlmVersion int) (*AuthenticateMessage, error) {
|
||||||
am := new(Authenticate)
|
am := new(AuthenticateMessage)
|
||||||
|
|
||||||
am.Signature = body[0:8]
|
am.Signature = body[0:8]
|
||||||
if !bytes.Equal(am.Signature, []byte("NTLMSSP\x00")) {
|
if !bytes.Equal(am.Signature, []byte("NTLMSSP\x00")) {
|
||||||
@ -155,7 +155,7 @@ func ParseAuthenticateMessage(body []byte, ntlmVersion int) (*Authenticate, erro
|
|||||||
return am, nil
|
return am, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *Authenticate) ClientChallenge() (response []byte) {
|
func (a *AuthenticateMessage) ClientChallenge() (response []byte) {
|
||||||
if a.NtlmV2Response != nil {
|
if a.NtlmV2Response != nil {
|
||||||
response = a.NtlmV2Response.NtlmV2ClientChallenge.ChallengeFromClient
|
response = a.NtlmV2Response.NtlmV2ClientChallenge.ChallengeFromClient
|
||||||
} else if a.NtlmV1Response != nil && NTLMSSP_NEGOTIATE_EXTENDED_SESSIONSECURITY.IsSet(a.NegotiateFlags) {
|
} else if a.NtlmV1Response != nil && NTLMSSP_NEGOTIATE_EXTENDED_SESSIONSECURITY.IsSet(a.NegotiateFlags) {
|
||||||
@ -165,7 +165,7 @@ func (a *Authenticate) ClientChallenge() (response []byte) {
|
|||||||
return response
|
return response
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *Authenticate) getLowestPayloadOffset() int {
|
func (a *AuthenticateMessage) getLowestPayloadOffset() int {
|
||||||
payloadStructs := [...]*PayloadStruct{a.LmChallengeResponse, a.NtChallengeResponseFields, a.DomainName, a.UserName, a.Workstation, a.EncryptedRandomSessionKey}
|
payloadStructs := [...]*PayloadStruct{a.LmChallengeResponse, a.NtChallengeResponseFields, a.DomainName, a.UserName, a.Workstation, a.EncryptedRandomSessionKey}
|
||||||
|
|
||||||
// Find the lowest offset value
|
// Find the lowest offset value
|
||||||
@ -180,7 +180,7 @@ func (a *Authenticate) getLowestPayloadOffset() int {
|
|||||||
return lowest
|
return lowest
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *Authenticate) Bytes() []byte {
|
func (a *AuthenticateMessage) Bytes() []byte {
|
||||||
payloadLen := int(a.LmChallengeResponse.Len + a.NtChallengeResponseFields.Len + a.DomainName.Len + a.UserName.Len + a.Workstation.Len + a.EncryptedRandomSessionKey.Len)
|
payloadLen := int(a.LmChallengeResponse.Len + a.NtChallengeResponseFields.Len + a.DomainName.Len + a.UserName.Len + a.Workstation.Len + a.EncryptedRandomSessionKey.Len)
|
||||||
messageLen := 8 + 4 + 6*8 + 4 + 8 + 16
|
messageLen := 8 + 4 + 6*8 + 4 + 8 + 16
|
||||||
payloadOffset := uint32(messageLen)
|
payloadOffset := uint32(messageLen)
|
||||||
@ -241,7 +241,7 @@ func (a *Authenticate) Bytes() []byte {
|
|||||||
return buffer.Bytes()
|
return buffer.Bytes()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *Authenticate) String() string {
|
func (a *AuthenticateMessage) String() string {
|
||||||
var buffer bytes.Buffer
|
var buffer bytes.Buffer
|
||||||
|
|
||||||
buffer.WriteString("Authenticate NTLM Message\n")
|
buffer.WriteString("Authenticate NTLM Message\n")
|
||||||
|
@ -10,7 +10,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Challenge struct {
|
type ChallengeMessage struct {
|
||||||
// sig - 8 bytes
|
// sig - 8 bytes
|
||||||
Signature []byte
|
Signature []byte
|
||||||
// message type - 4 bytes
|
// message type - 4 bytes
|
||||||
@ -53,8 +53,8 @@ type Challenge struct {
|
|||||||
Payload []byte
|
Payload []byte
|
||||||
}
|
}
|
||||||
|
|
||||||
func ParseChallengeMessage(body []byte) (*Challenge, error) {
|
func ParseChallengeMessage(body []byte) (*ChallengeMessage, error) {
|
||||||
challenge := new(Challenge)
|
challenge := new(ChallengeMessage)
|
||||||
|
|
||||||
challenge.Signature = body[0:8]
|
challenge.Signature = body[0:8]
|
||||||
if !bytes.Equal(challenge.Signature, []byte("NTLMSSP\x00")) {
|
if !bytes.Equal(challenge.Signature, []byte("NTLMSSP\x00")) {
|
||||||
@ -101,7 +101,7 @@ func ParseChallengeMessage(body []byte) (*Challenge, error) {
|
|||||||
return challenge, nil
|
return challenge, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Challenge) Bytes() []byte {
|
func (c *ChallengeMessage) Bytes() []byte {
|
||||||
payloadLen := int(c.TargetName.Len + c.TargetInfoPayloadStruct.Len)
|
payloadLen := int(c.TargetName.Len + c.TargetInfoPayloadStruct.Len)
|
||||||
messageLen := 8 + 4 + 8 + 4 + 8 + 8 + 8 + 8
|
messageLen := 8 + 4 + 8 + 4 + 8 + 8 + 8 + 8
|
||||||
payloadOffset := uint32(messageLen)
|
payloadOffset := uint32(messageLen)
|
||||||
@ -137,7 +137,7 @@ func (c *Challenge) Bytes() []byte {
|
|||||||
return buffer.Bytes()
|
return buffer.Bytes()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Challenge) getLowestPayloadOffset() int {
|
func (c *ChallengeMessage) getLowestPayloadOffset() int {
|
||||||
payloadStructs := [...]*PayloadStruct{c.TargetName, c.TargetInfoPayloadStruct}
|
payloadStructs := [...]*PayloadStruct{c.TargetName, c.TargetInfoPayloadStruct}
|
||||||
|
|
||||||
// Find the lowest offset value
|
// Find the lowest offset value
|
||||||
@ -152,7 +152,7 @@ func (c *Challenge) getLowestPayloadOffset() int {
|
|||||||
return lowest
|
return lowest
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Challenge) String() string {
|
func (c *ChallengeMessage) String() string {
|
||||||
var buffer bytes.Buffer
|
var buffer bytes.Buffer
|
||||||
|
|
||||||
buffer.WriteString("Challenge NTLM Message")
|
buffer.WriteString("Challenge NTLM Message")
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
package ntlm
|
package ntlm
|
||||||
|
|
||||||
type Negotiate struct {
|
type NegotiateMessage struct {
|
||||||
// All bytes of the message
|
// All bytes of the message
|
||||||
Bytes []byte
|
Bytes []byte
|
||||||
|
|
||||||
|
18
ntlm/ntlm.go
18
ntlm/ntlm.go
@ -43,9 +43,9 @@ type ClientSession interface {
|
|||||||
SetUserInfo(username string, password string, domain string)
|
SetUserInfo(username string, password string, domain string)
|
||||||
SetMode(mode Mode)
|
SetMode(mode Mode)
|
||||||
|
|
||||||
GenerateNegotiateMessage() (*Negotiate, error)
|
GenerateNegotiateMessage() (*NegotiateMessage, error)
|
||||||
ProcessChallengeMessage(*Challenge) error
|
ProcessChallengeMessage(*ChallengeMessage) error
|
||||||
GenerateAuthenticateMessage() (*Authenticate, error)
|
GenerateAuthenticateMessage() (*AuthenticateMessage, error)
|
||||||
|
|
||||||
Seal(message []byte) ([]byte, error)
|
Seal(message []byte) ([]byte, error)
|
||||||
Sign(message []byte) ([]byte, error)
|
Sign(message []byte) ([]byte, error)
|
||||||
@ -77,9 +77,9 @@ type ServerSession interface {
|
|||||||
SetMode(mode Mode)
|
SetMode(mode Mode)
|
||||||
SetServerChallenge(challege []byte)
|
SetServerChallenge(challege []byte)
|
||||||
|
|
||||||
ProcessNegotiateMessage(*Negotiate) error
|
ProcessNegotiateMessage(*NegotiateMessage) error
|
||||||
GenerateChallengeMessage() (*Challenge, error)
|
GenerateChallengeMessage() (*ChallengeMessage, error)
|
||||||
ProcessAuthenticateMessage(*Authenticate) error
|
ProcessAuthenticateMessage(*AuthenticateMessage) error
|
||||||
|
|
||||||
GetSessionData() *SessionData
|
GetSessionData() *SessionData
|
||||||
|
|
||||||
@ -100,9 +100,9 @@ type SessionData struct {
|
|||||||
|
|
||||||
NegotiateFlags uint32
|
NegotiateFlags uint32
|
||||||
|
|
||||||
negotiateMessage *Negotiate
|
negotiateMessage *NegotiateMessage
|
||||||
challengeMessage *Challenge
|
challengeMessage *ChallengeMessage
|
||||||
authenticateMessage *Authenticate
|
authenticateMessage *AuthenticateMessage
|
||||||
|
|
||||||
serverChallenge []byte
|
serverChallenge []byte
|
||||||
clientChallenge []byte
|
clientChallenge []byte
|
||||||
|
@ -154,12 +154,12 @@ type V1ServerSession struct {
|
|||||||
V1Session
|
V1Session
|
||||||
}
|
}
|
||||||
|
|
||||||
func (n *V1ServerSession) ProcessNegotiateMessage(nm *Negotiate) (err error) {
|
func (n *V1ServerSession) ProcessNegotiateMessage(nm *NegotiateMessage) (err error) {
|
||||||
n.negotiateMessage = nm
|
n.negotiateMessage = nm
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (n *V1ServerSession) GenerateChallengeMessage() (cm *Challenge, err error) {
|
func (n *V1ServerSession) GenerateChallengeMessage() (cm *ChallengeMessage, err error) {
|
||||||
// TODO: Generate this challenge message
|
// TODO: Generate this challenge message
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -172,7 +172,7 @@ func (n *V1ServerSession) GetSessionData() *SessionData {
|
|||||||
return &n.SessionData
|
return &n.SessionData
|
||||||
}
|
}
|
||||||
|
|
||||||
func (n *V1ServerSession) ProcessAuthenticateMessage(am *Authenticate) (err error) {
|
func (n *V1ServerSession) ProcessAuthenticateMessage(am *AuthenticateMessage) (err error) {
|
||||||
n.authenticateMessage = am
|
n.authenticateMessage = am
|
||||||
n.NegotiateFlags = am.NegotiateFlags
|
n.NegotiateFlags = am.NegotiateFlags
|
||||||
n.clientChallenge = am.ClientChallenge()
|
n.clientChallenge = am.ClientChallenge()
|
||||||
@ -262,11 +262,11 @@ type V1ClientSession struct {
|
|||||||
V1Session
|
V1Session
|
||||||
}
|
}
|
||||||
|
|
||||||
func (n *V1ClientSession) GenerateNegotiateMessage() (nm *Negotiate, err error) {
|
func (n *V1ClientSession) GenerateNegotiateMessage() (nm *NegotiateMessage, err error) {
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (n *V1ClientSession) ProcessChallengeMessage(cm *Challenge) (err error) {
|
func (n *V1ClientSession) ProcessChallengeMessage(cm *ChallengeMessage) (err error) {
|
||||||
n.challengeMessage = cm
|
n.challengeMessage = cm
|
||||||
n.serverChallenge = cm.ServerChallenge
|
n.serverChallenge = cm.ServerChallenge
|
||||||
n.clientChallenge = randomBytes(8)
|
n.clientChallenge = randomBytes(8)
|
||||||
@ -331,8 +331,8 @@ func (n *V1ClientSession) ProcessChallengeMessage(cm *Challenge) (err error) {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (n *V1ClientSession) GenerateAuthenticateMessage() (am *Authenticate, err error) {
|
func (n *V1ClientSession) GenerateAuthenticateMessage() (am *AuthenticateMessage, err error) {
|
||||||
am = new(Authenticate)
|
am = new(AuthenticateMessage)
|
||||||
am.Signature = []byte("NTLMSSP\x00")
|
am.Signature = []byte("NTLMSSP\x00")
|
||||||
am.MessageType = uint32(3)
|
am.MessageType = uint32(3)
|
||||||
am.LmChallengeResponse, _ = CreateBytePayload(n.lmChallengeResponse)
|
am.LmChallengeResponse, _ = CreateBytePayload(n.lmChallengeResponse)
|
||||||
|
@ -149,13 +149,13 @@ func (n *V2ServerSession) SetServerChallenge(challenge []byte) {
|
|||||||
n.serverChallenge = challenge
|
n.serverChallenge = challenge
|
||||||
}
|
}
|
||||||
|
|
||||||
func (n *V2ServerSession) ProcessNegotiateMessage(nm *Negotiate) (err error) {
|
func (n *V2ServerSession) ProcessNegotiateMessage(nm *NegotiateMessage) (err error) {
|
||||||
n.negotiateMessage = nm
|
n.negotiateMessage = nm
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (n *V2ServerSession) GenerateChallengeMessage() (cm *Challenge, err error) {
|
func (n *V2ServerSession) GenerateChallengeMessage() (cm *ChallengeMessage, err error) {
|
||||||
cm = new(Challenge)
|
cm = new(ChallengeMessage)
|
||||||
cm.Signature = []byte("NTLMSSP\x00")
|
cm.Signature = []byte("NTLMSSP\x00")
|
||||||
cm.MessageType = uint32(2)
|
cm.MessageType = uint32(2)
|
||||||
cm.TargetName, _ = CreateBytePayload(make([]byte, 0))
|
cm.TargetName, _ = CreateBytePayload(make([]byte, 0))
|
||||||
@ -195,7 +195,7 @@ func (n *V2ServerSession) GenerateChallengeMessage() (cm *Challenge, err error)
|
|||||||
return cm, nil
|
return cm, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (n *V2ServerSession) ProcessAuthenticateMessage(am *Authenticate) (err error) {
|
func (n *V2ServerSession) ProcessAuthenticateMessage(am *AuthenticateMessage) (err error) {
|
||||||
n.authenticateMessage = am
|
n.authenticateMessage = am
|
||||||
n.NegotiateFlags = am.NegotiateFlags
|
n.NegotiateFlags = am.NegotiateFlags
|
||||||
n.clientChallenge = am.ClientChallenge()
|
n.clientChallenge = am.ClientChallenge()
|
||||||
@ -279,11 +279,11 @@ type V2ClientSession struct {
|
|||||||
V2Session
|
V2Session
|
||||||
}
|
}
|
||||||
|
|
||||||
func (n *V2ClientSession) GenerateNegotiateMessage() (nm *Negotiate, err error) {
|
func (n *V2ClientSession) GenerateNegotiateMessage() (nm *NegotiateMessage, err error) {
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (n *V2ClientSession) ProcessChallengeMessage(cm *Challenge) (err error) {
|
func (n *V2ClientSession) ProcessChallengeMessage(cm *ChallengeMessage) (err error) {
|
||||||
n.challengeMessage = cm
|
n.challengeMessage = cm
|
||||||
n.serverChallenge = cm.ServerChallenge
|
n.serverChallenge = cm.ServerChallenge
|
||||||
n.clientChallenge = randomBytes(8)
|
n.clientChallenge = randomBytes(8)
|
||||||
@ -343,8 +343,8 @@ func (n *V2ClientSession) ProcessChallengeMessage(cm *Challenge) (err error) {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (n *V2ClientSession) GenerateAuthenticateMessage() (am *Authenticate, err error) {
|
func (n *V2ClientSession) GenerateAuthenticateMessage() (am *AuthenticateMessage, err error) {
|
||||||
am = new(Authenticate)
|
am = new(AuthenticateMessage)
|
||||||
am.Signature = []byte("NTLMSSP\x00")
|
am.Signature = []byte("NTLMSSP\x00")
|
||||||
am.MessageType = uint32(3)
|
am.MessageType = uint32(3)
|
||||||
am.LmChallengeResponse, _ = CreateBytePayload(n.lmChallengeResponse)
|
am.LmChallengeResponse, _ = CreateBytePayload(n.lmChallengeResponse)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user