Documentation
¶
Index ¶
- Constants
- func ComputeNTLMv2Response(h hash.Hash, clientChallenge, serverChallenge, timestamp, serverName []byte) (NTChallengeResponse, LMChallengeResponse, SessionBaseKey []byte)
- func LMOWFv2(password, user, userDomain string) []byte
- func NTOWFv1(pass string) []byte
- func NTOWFv2(password, user, userDomain string) []byte
- func NTOWFv2Hash(hash, user, userDomain string) []byte
- type AvPair
- type AvPairSlice
- type Challenge
- type Header
- type NTLMv2Authentication
- type Negotiate
Constants ¶
View Source
const ( NTLMNegotiate = 0x00000001 NTLMChallenge = 0x00000002 NTLMAuthenticate = 0x00000003 )
ntlm协议头类型
View Source
const ( FlgNegUnicode uint32 = 1 << iota FlgNegOEM FlgNegRequestTarget FlgNegReserved10 FlgNegSign FlgNegSeal FlgNegDatagram FlgNegLmKey FlgNegReserved9 FlgNegNTLM FlgNegReserved8 FlgNegAnonymous FlgNegOEMDomainSupplied FlgNegOEMWorkstationSupplied FlgNegReserved7 FlgNegAlwaysSign FlgNegTargetTypeDomain FlgNegTargetTypeServer FlgNegReserved6 FlgNegExtendedSessionSecurity FlgNegIdentify FlgNegReserved5 FlgNegRequestNonNtSessionKey FlgNegTargetInfo FlgNegReserved4 FlgNegVersion FlgNegReserved3 FlgNegReserved2 FlgNegReserved1 FlgNeg128 FlgNegKeyExch FlgNeg56 )
View Source
const ( MsvAvEOL uint16 = iota MsvAvNbComputerName MsvAvNbDomainName MsvAvDnsComputerName MsvAvDnsDomainName MsvAvDnsTreeName MsvAvFlags MsvAvTimestamp MsvAvSingleHost MsvAvTargetName MsvChannelBindings )
View Source
const NTLMSSPMECHTYPEOID = "1.3.6.1.4.1.311.2.2.10"
ntlm对象标识符
View Source
const NTLMSecSignature = "NTLMSSP\x00"
ssp安全签名
Variables ¶
This section is empty.
Functions ¶
func ComputeNTLMv2Response ¶
func ComputeNTLMv2Response(h hash.Hash, clientChallenge, serverChallenge, timestamp, serverName []byte) (NTChallengeResponse, LMChallengeResponse, SessionBaseKey []byte)
计算ntlmv2响应 Set temp to ConcatenationOf(Responserversion, HiResponserversion,
Z(6), Time, ClientChallenge, Z(4), ServerName, Z(4))
Set NTProofStr to HMAC_MD5(ResponseKeyNT,
ConcatenationOf(CHALLENGE_MESSAGE.ServerChallenge,temp))
Set NtChallengeResponse to ConcatenationOf(NTProofStr, temp) Set LmChallengeResponse to ConcatenationOf(HMAC_MD5(ResponseKeyLM,
ConcatenationOf(CHALLENGE_MESSAGE.ServerChallenge, ClientChallenge)), ClientChallenge )
Types ¶
type AvPairSlice ¶
type AvPairSlice []AvPair
func (*AvPairSlice) MarshalBinary ¶
func (s *AvPairSlice) MarshalBinary(meta *encoder.Metadata) ([]byte, error)
func (*AvPairSlice) UnmarshalBinary ¶
func (s *AvPairSlice) UnmarshalBinary(buf []byte, meta *encoder.Metadata) error
type Challenge ¶
type Challenge struct { Header TargetNameLen uint16 `smb:"len:TargetName"` TargetNameMaxLen uint16 `smb:"len:TargetName"` TargetNameBufferOffset uint32 `smb:"offset:TargetName"` NegotiateFlags uint32 ServerChallenge uint64 Reserved uint64 TargetInfoLen uint16 `smb:"len:TargetInfo"` TargetInfoMaxLen uint16 `smb:"len:TargetInfo"` TargetInfoBufferOffset uint32 `smb:"offset:TargetInfo"` Version uint64 TargetName []byte TargetInfo *AvPairSlice }
type NTLMv2Authentication ¶
type NTLMv2Authentication struct { Header LmChallengeResponseLen uint16 `smb:"len:LmChallengeResponse"` LmChallengeResponseMaxLen uint16 `smb:"len:LmChallengeResponse"` LmChallengeResponseBufferOffset uint32 `smb:"offset:LmChallengeResponse"` NtChallengeResponseLen uint16 `smb:"len:NtChallengeResponse"` NtChallengeResponseMaxLen uint16 `smb:"len:NtChallengeResponse"` NtChallengResponseBufferOffset uint32 `smb:"offset:NtChallengeResponse"` DomainNameLen uint16 `smb:"len:DomainName"` DomainNameMaxLen uint16 `smb:"len:DomainName"` DomainNameBufferOffset uint32 `smb:"offset:DomainName"` UserNameLen uint16 `smb:"len:UserName"` UserNameMaxLen uint16 `smb:"len:UserName"` UserNameBufferOffset uint32 `smb:"offset:UserName"` WorkstationLen uint16 `smb:"len:Workstation"` WorkstationMaxLen uint16 `smb:"len:Workstation"` WorkstationBufferOffset uint32 `smb:"offset:Workstation"` EncryptedRandomSessionKeyLen uint16 `smb:"len:EncryptedRandomSessionKey"` EncryptedRandomSessionKeyMaxLen uint16 `smb:"len:EncryptedRandomSessionKey"` EncryptedRandomSessionKeyBufferOffset uint32 `smb:"offset:EncryptedRandomSessionKey"` NegotiateFlags uint32 DomainName []byte `smb:"unicode"` UserName []byte `smb:"unicode"` Workstation []byte `smb:"unicode"` EncryptedRandomSessionKey []byte //16字节,会话加密密钥,可以为空 LmChallengeResponse []byte //24字节,lm协商响应 NtChallengeResponse []byte //24字节,nt协商响应 MIC []byte `smb:"fixed:16"` //16字节,会话完整性校验 }
https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-nlmp/5e550938-91d4-459f-b67d-75d70009e3f3 ntlm v2认证结构
func NewAuthenticateHash ¶
func NewAuthenticateHash(domain, user, workstation, hash string, c Challenge) NTLMv2Authentication
func NewAuthenticatePass ¶
func NewAuthenticatePass(domain, user, workstation, password string, c Challenge) NTLMv2Authentication
type Negotiate ¶
type Negotiate struct { Header NegotiateFlags uint32 DomainNameLen uint16 `smb:"len:DomainName"` DomainNameMaxLen uint16 `smb:"len:DomainName"` DomainNameBufferOffset uint32 `smb:"offset:DomainName"` WorkstationLen uint16 `smb:"len:Workstation"` WorkstationMaxLen uint16 `smb:"len:Workstation"` WorkstationBufferOffset uint32 `smb:"offset:Workstation"` DomainName []byte Workstation []byte }
Click to show internal directories.
Click to hide internal directories.