@@ -15,6 +15,32 @@ def smb_cmd_negotiate(c, buff)
15
15
dialects = pkt [ 'Payload' ] . v [ 'Payload' ] . gsub ( /\x00 / , '' ) . split ( /\x02 / ) . grep ( /^\w +/ )
16
16
dialect = dialects . index ( "NT LM 0.12" ) || dialects . length -1
17
17
18
+ send_negotitate_res ( c , {
19
+ dialect : dialect ,
20
+ security_mode : CONST ::NEG_SECURITY_PASSWORD ,
21
+ max_mpx : 50 ,
22
+ max_vcs : 1 ,
23
+ max_buff : 4356 ,
24
+ max_raw : 65536 ,
25
+ server_time_zone : 0 ,
26
+ capabilities : CAPABILITIES ,
27
+ key_length : 8 ,
28
+ key : Rex ::Text . rand_text_hex ( 8 )
29
+ } )
30
+ end
31
+
32
+ def send_negotitate_res ( c , opts = { } )
33
+ dialect = opts [ :dialect ] || 0
34
+ security_mode = opts [ :security_mode ] || 0
35
+ max_mpx = opts [ :max_mpx ] || 0
36
+ max_vcs = opts [ :max_vcs ] || 0
37
+ max_buff = opts [ :max_buff ] || 0
38
+ max_raw = opts [ :max_raw ] || 0
39
+ server_time_zone = opts [ :server_time_zone ] || 0
40
+ capabilities = opts [ :capabilities ] || 0
41
+ key_length = opts [ :key_length ] || 0
42
+ key = opts [ :key ] || ''
43
+
18
44
pkt = CONST ::SMB_NEG_RES_NT_PKT . make_struct
19
45
smb_set_defaults ( c , pkt )
20
46
@@ -23,18 +49,18 @@ def smb_cmd_negotiate(c, buff)
23
49
pkt [ 'Payload' ] [ 'SMB' ] . v [ 'Flags2' ] = FLAGS2
24
50
pkt [ 'Payload' ] [ 'SMB' ] . v [ 'WordCount' ] = 17
25
51
pkt [ 'Payload' ] . v [ 'Dialect' ] = dialect
26
- pkt [ 'Payload' ] . v [ 'SecurityMode' ] = CONST :: NEG_SECURITY_PASSWORD
27
- pkt [ 'Payload' ] . v [ 'MaxMPX' ] = 50
28
- pkt [ 'Payload' ] . v [ 'MaxVCS' ] = 1
29
- pkt [ 'Payload' ] . v [ 'MaxBuff' ] = 4356
30
- pkt [ 'Payload' ] . v [ 'MaxRaw' ] = 65536
52
+ pkt [ 'Payload' ] . v [ 'SecurityMode' ] = security_mode
53
+ pkt [ 'Payload' ] . v [ 'MaxMPX' ] = max_mpx
54
+ pkt [ 'Payload' ] . v [ 'MaxVCS' ] = max_vcs
55
+ pkt [ 'Payload' ] . v [ 'MaxBuff' ] = max_buff
56
+ pkt [ 'Payload' ] . v [ 'MaxRaw' ] = max_raw
31
57
pkt [ 'Payload' ] . v [ 'SystemTimeLow' ] = lo
32
58
pkt [ 'Payload' ] . v [ 'SystemTimeHigh' ] = hi
33
- pkt [ 'Payload' ] . v [ 'ServerTimeZone' ] = 0x0
59
+ pkt [ 'Payload' ] . v [ 'ServerTimeZone' ] = server_time_zone
34
60
pkt [ 'Payload' ] . v [ 'SessionKey' ] = 0
35
- pkt [ 'Payload' ] . v [ 'Capabilities' ] = CAPABILITIES
36
- pkt [ 'Payload' ] . v [ 'KeyLength' ] = 8
37
- pkt [ 'Payload' ] . v [ 'Payload' ] = Rex :: Text . rand_text_hex ( 8 )
61
+ pkt [ 'Payload' ] . v [ 'Capabilities' ] = capabilities
62
+ pkt [ 'Payload' ] . v [ 'KeyLength' ] = key_length
63
+ pkt [ 'Payload' ] . v [ 'Payload' ] = key
38
64
39
65
c . put ( pkt . to_s )
40
66
end
0 commit comments