make sure to save server challenge bytes
This commit is contained in:
		
							parent
							
								
									d5082d0f01
								
							
						
					
					
						commit
						949b63ef3e
					
				| @ -67,7 +67,9 @@ func ParseChallengeMessage(body []byte) (*Challenge, error) { | |||||||
| 	var err error | 	var err error | ||||||
| 
 | 
 | ||||||
| 	challenge.TargetName, err = ReadStringPayload(12, body) | 	challenge.TargetName, err = ReadStringPayload(12, body) | ||||||
| 	if err != nil { return nil, err } | 	if err != nil { | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
| 
 | 
 | ||||||
| 	challenge.NegotiateFlags = binary.LittleEndian.Uint32(body[20:24]) | 	challenge.NegotiateFlags = binary.LittleEndian.Uint32(body[20:24]) | ||||||
| 
 | 
 | ||||||
| @ -76,7 +78,9 @@ func ParseChallengeMessage(body []byte) (*Challenge, error) { | |||||||
| 	challenge.Reserved = body[32:40] | 	challenge.Reserved = body[32:40] | ||||||
| 
 | 
 | ||||||
| 	challenge.TargetInfoPayloadStruct, err = ReadBytePayload(40, body) | 	challenge.TargetInfoPayloadStruct, err = ReadBytePayload(40, body) | ||||||
| 	if err != nil { return nil, err } | 	if err != nil { | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
| 
 | 
 | ||||||
| 	challenge.TargetInfo = ReadAvPairs(challenge.TargetInfoPayloadStruct.Payload) | 	challenge.TargetInfo = ReadAvPairs(challenge.TargetInfoPayloadStruct.Payload) | ||||||
| 
 | 
 | ||||||
| @ -84,7 +88,9 @@ func ParseChallengeMessage(body []byte) (*Challenge, error) { | |||||||
| 
 | 
 | ||||||
| 	if NTLMSSP_NEGOTIATE_VERSION.IsSet(challenge.NegotiateFlags) { | 	if NTLMSSP_NEGOTIATE_VERSION.IsSet(challenge.NegotiateFlags) { | ||||||
| 		challenge.Version, err = ReadVersionStruct(body[offset : offset+8]) | 		challenge.Version, err = ReadVersionStruct(body[offset : offset+8]) | ||||||
| 	  if err != nil { return nil, err } | 		if err != nil { | ||||||
|  | 			return nil, err | ||||||
|  | 		} | ||||||
| 		offset = offset + 8 | 		offset = offset + 8 | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| @ -116,7 +122,7 @@ func (c *Challenge) Bytes() []byte { | |||||||
| 	buffer.Write(c.TargetInfoPayloadStruct.Bytes()) | 	buffer.Write(c.TargetInfoPayloadStruct.Bytes()) | ||||||
| 	payloadOffset += uint32(c.TargetInfoPayloadStruct.Len) | 	payloadOffset += uint32(c.TargetInfoPayloadStruct.Len) | ||||||
| 
 | 
 | ||||||
|   if(c.Version != nil) { | 	if c.Version != nil { | ||||||
| 		buffer.Write(c.Version.Bytes()) | 		buffer.Write(c.Version.Bytes()) | ||||||
| 	} else { | 	} else { | ||||||
| 		buffer.Write(make([]byte, 8)) | 		buffer.Write(make([]byte, 8)) | ||||||
|  | |||||||
| @ -62,7 +62,7 @@ func (n *V2Session) Seal(message []byte) ([]byte, error) { | |||||||
| func (n *V2Session) Sign(message []byte) ([]byte, error) { | func (n *V2Session) Sign(message []byte) ([]byte, error) { | ||||||
| 	return nil, nil | 	return nil, nil | ||||||
| } | } | ||||||
| func (n *V2Session) Mac(message []byte,sequenceNumber int) ([]byte, error) { | func (n *V2Session) Mac(message []byte, sequenceNumber int) ([]byte, error) { | ||||||
| 	// TODO: Need to keep track of the sequence number for connection oriented NTLM | 	// TODO: Need to keep track of the sequence number for connection oriented NTLM | ||||||
| 	return nil, nil | 	return nil, nil | ||||||
| } | } | ||||||
| @ -84,12 +84,12 @@ func (n *V2ServerSession) GenerateChallengeMessage() (cm *messages.Challenge, er | |||||||
| 	cm = new(messages.Challenge) | 	cm = new(messages.Challenge) | ||||||
| 	cm.Signature = []byte("NTLMSSP\x00") | 	cm.Signature = []byte("NTLMSSP\x00") | ||||||
| 	cm.MessageType = uint32(2) | 	cm.MessageType = uint32(2) | ||||||
| 	cm.TargetName,_ = messages.CreateBytePayload(make([]byte, 0)) | 	cm.TargetName, _ = messages.CreateBytePayload(make([]byte, 0)) | ||||||
| 
 | 
 | ||||||
| 	flags := uint32(0) | 	flags := uint32(0) | ||||||
| 	flags = messages.NTLMSSP_NEGOTIATE_KEY_EXCH.Set(flags) | 	flags = messages.NTLMSSP_NEGOTIATE_KEY_EXCH.Set(flags) | ||||||
| 	// NOTE: Unsetting this in order for the signatures to work | 	// NOTE: Unsetting this in order for the signatures to work | ||||||
|   // flags = messages.NTLMSSP_NEGOTIATE_VERSION.Set(flags) | 	flags = messages.NTLMSSP_NEGOTIATE_VERSION.Set(flags) | ||||||
| 	flags = messages.NTLMSSP_NEGOTIATE_EXTENDED_SESSIONSECURITY.Set(flags) | 	flags = messages.NTLMSSP_NEGOTIATE_EXTENDED_SESSIONSECURITY.Set(flags) | ||||||
| 	flags = messages.NTLMSSP_NEGOTIATE_TARGET_INFO.Set(flags) | 	flags = messages.NTLMSSP_NEGOTIATE_TARGET_INFO.Set(flags) | ||||||
| 	flags = messages.NTLMSSP_NEGOTIATE_IDENTIFY.Set(flags) | 	flags = messages.NTLMSSP_NEGOTIATE_IDENTIFY.Set(flags) | ||||||
| @ -101,7 +101,8 @@ func (n *V2ServerSession) GenerateChallengeMessage() (cm *messages.Challenge, er | |||||||
| 	flags = messages.NTLMSSP_NEGOTIATE_UNICODE.Set(flags) | 	flags = messages.NTLMSSP_NEGOTIATE_UNICODE.Set(flags) | ||||||
| 	cm.NegotiateFlags = flags | 	cm.NegotiateFlags = flags | ||||||
| 
 | 
 | ||||||
| 	cm.ServerChallenge = randomBytes(8) | 	n.serverChallenge = randomBytes(8) | ||||||
|  | 	cm.ServerChallenge = n.serverChallenge | ||||||
| 	cm.Reserved = make([]byte, 8) | 	cm.Reserved = make([]byte, 8) | ||||||
| 
 | 
 | ||||||
| 	// Create the AvPairs we need | 	// Create the AvPairs we need | ||||||
| @ -113,9 +114,9 @@ func (n *V2ServerSession) GenerateChallengeMessage() (cm *messages.Challenge, er | |||||||
| 	pairs.AddAvPair(messages.MsvAvDnsTreeName, messages.StringToUtf16("Reuters.net")) | 	pairs.AddAvPair(messages.MsvAvDnsTreeName, messages.StringToUtf16("Reuters.net")) | ||||||
| 	pairs.AddAvPair(messages.MsvAvEOL, make([]byte, 0)) | 	pairs.AddAvPair(messages.MsvAvEOL, make([]byte, 0)) | ||||||
| 	cm.TargetInfo = pairs | 	cm.TargetInfo = pairs | ||||||
|   cm.TargetInfoPayloadStruct,_ = messages.CreateBytePayload(pairs.Bytes()) | 	cm.TargetInfoPayloadStruct, _ = messages.CreateBytePayload(pairs.Bytes()) | ||||||
| 
 | 
 | ||||||
| 	cm.Version = &messages.VersionStruct{ProductMajorVersion: uint8(5), ProductMinorVersion: uint8(1), ProductBuild: uint16(2600), NTLMRevisionCurrent: uint8(10)} | 	cm.Version = &messages.VersionStruct{ProductMajorVersion: uint8(6), ProductMinorVersion: uint8(0), ProductBuild: uint16(2600), NTLMRevisionCurrent: uint8(10)} | ||||||
| 	return cm, nil | 	return cm, nil | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user