mirror of
https://github.com/bettercap/bettercap.git
synced 2025-03-12 04:36:03 -07:00
165 lines
3.5 KiB
Go
165 lines
3.5 KiB
Go
package packets
|
|
|
|
import (
|
|
"reflect"
|
|
"testing"
|
|
)
|
|
|
|
func TestNTLMConstants(t *testing.T) {
|
|
var units = []struct {
|
|
got interface{}
|
|
exp interface{}
|
|
}{
|
|
{NTLM_SIG_OFFSET, 0},
|
|
{NTLM_TYPE_OFFSET, 8},
|
|
{NTLM_TYPE1_FLAGS_OFFSET, 12},
|
|
{NTLM_TYPE1_DOMAIN_OFFSET, 16},
|
|
{NTLM_TYPE1_WORKSTN_OFFSET, 24},
|
|
{NTLM_TYPE1_DATA_OFFSET, 32},
|
|
{NTLM_TYPE1_MINSIZE, 16},
|
|
{NTLM_TYPE2_TARGET_OFFSET, 12},
|
|
{NTLM_TYPE2_FLAGS_OFFSET, 20},
|
|
{NTLM_TYPE2_CHALLENGE_OFFSET, 24},
|
|
{NTLM_TYPE2_CONTEXT_OFFSET, 32},
|
|
{NTLM_TYPE2_TARGETINFO_OFFSET, 40},
|
|
{NTLM_TYPE2_DATA_OFFSET, 48},
|
|
{NTLM_TYPE2_MINSIZE, 32},
|
|
{NTLM_TYPE3_LMRESP_OFFSET, 12},
|
|
{NTLM_TYPE3_NTRESP_OFFSET, 20},
|
|
{NTLM_TYPE3_DOMAIN_OFFSET, 28},
|
|
{NTLM_TYPE3_USER_OFFSET, 36},
|
|
{NTLM_TYPE3_WORKSTN_OFFSET, 44},
|
|
{NTLM_TYPE3_SESSIONKEY_OFFSET, 52},
|
|
{NTLM_TYPE3_FLAGS_OFFSET, 60},
|
|
{NTLM_TYPE3_DATA_OFFSET, 64},
|
|
{NTLM_TYPE3_MINSIZE, 52},
|
|
{NTLM_BUFFER_LEN_OFFSET, 0},
|
|
{NTLM_BUFFER_MAXLEN_OFFSET, 2},
|
|
{NTLM_BUFFER_OFFSET_OFFSET, 4},
|
|
{NTLM_BUFFER_SIZE, 8},
|
|
{NtlmV1, 1},
|
|
{NtlmV2, 2},
|
|
}
|
|
for _, u := range units {
|
|
if !reflect.DeepEqual(u.exp, u.got) {
|
|
t.Fatalf("expected '%v', got '%v'", u.exp, u.got)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestNTLMChallengeResponse(t *testing.T) {
|
|
r := NTLMChallengeResponse{}
|
|
var units = []struct {
|
|
got interface{}
|
|
exp interface{}
|
|
}{
|
|
{r.Challenge, ""},
|
|
{r.Response, ""},
|
|
}
|
|
for _, u := range units {
|
|
if !reflect.DeepEqual(u.exp, u.got) {
|
|
t.Fatalf("expected '%v', got '%v'", u.exp, u.got)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestNTLMChallengeResponseParsed(t *testing.T) {
|
|
r := NTLMChallengeResponseParsed{}
|
|
var units = []struct {
|
|
got interface{}
|
|
exp interface{}
|
|
}{
|
|
{r.Type, 0},
|
|
{r.ServerChallenge, ""},
|
|
{r.User, ""},
|
|
{r.Domain, ""},
|
|
{r.LmHash, ""},
|
|
{r.NtHashOne, ""},
|
|
{r.NtHashTwo, ""},
|
|
}
|
|
for _, u := range units {
|
|
if !reflect.DeepEqual(u.exp, u.got) {
|
|
t.Fatalf("expected '%v', got '%v'", u.exp, u.got)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestNTLMResponseHeader(t *testing.T) {
|
|
r := NTLMResponseHeader{}
|
|
var units = []struct {
|
|
got interface{}
|
|
exp interface{}
|
|
}{
|
|
{r.Sig, ""},
|
|
{r.Type, uint32(0)},
|
|
{r.LmLen, uint16(0)},
|
|
{r.LmMax, uint16(0)},
|
|
{r.LmOffset, uint16(0)},
|
|
{r.NtLen, uint16(0)},
|
|
{r.NtMax, uint16(0)},
|
|
{r.NtOffset, uint16(0)},
|
|
{r.DomainLen, uint16(0)},
|
|
{r.DomainMax, uint16(0)},
|
|
{r.DomainOffset, uint16(0)},
|
|
{r.UserLen, uint16(0)},
|
|
{r.UserMax, uint16(0)},
|
|
{r.UserOffset, uint16(0)},
|
|
{r.HostLen, uint16(0)},
|
|
{r.HostMax, uint16(0)},
|
|
{r.HostOffset, uint16(0)},
|
|
}
|
|
for _, u := range units {
|
|
if !reflect.DeepEqual(u.exp, u.got) {
|
|
t.Fatalf("expected '%v', got '%v'", u.exp, u.got)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestNTLMState(t *testing.T) {
|
|
r := map[uint32]string{}
|
|
p := []NTLMChallengeResponse{}
|
|
s := NTLMState{
|
|
Responses: r,
|
|
Pairs: p,
|
|
}
|
|
var units = []struct {
|
|
got interface{}
|
|
exp interface{}
|
|
}{
|
|
{s.Responses, r},
|
|
{s.Pairs, p},
|
|
}
|
|
for _, u := range units {
|
|
if !reflect.DeepEqual(u.exp, u.got) {
|
|
t.Fatalf("expected '%v', got '%v'", u.exp, u.got)
|
|
}
|
|
}
|
|
}
|
|
|
|
func BuildExampleNTLMState() NTLMState {
|
|
return NTLMState{
|
|
Responses: map[uint32]string{},
|
|
Pairs: []NTLMChallengeResponse{},
|
|
}
|
|
}
|
|
|
|
func TestNTLMStateAddServerResponse(t *testing.T) {
|
|
s := BuildExampleNTLMState()
|
|
|
|
s.AddServerResponse(uint32(0), "picat")
|
|
|
|
var units = []struct {
|
|
got interface{}
|
|
exp interface{}
|
|
}{
|
|
{s.Responses[uint32(0)], "picat"},
|
|
}
|
|
for _, u := range units {
|
|
if !reflect.DeepEqual(u.exp, u.got) {
|
|
t.Fatalf("expected '%v', got '%v'", u.exp, u.got)
|
|
}
|
|
}
|
|
}
|
|
|
|
// TODO: add tests for the rest of NTLM :P
|