Skip to content

Commit 5418cda

Browse files
committed
Refactor negotiate handling
1 parent 5ed1f8d commit 5418cda

File tree

1 file changed

+35
-9
lines changed

1 file changed

+35
-9
lines changed

lib/msf/core/exploit/smb/server/share/command/negotiate.rb

Lines changed: 35 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,32 @@ def smb_cmd_negotiate(c, buff)
1515
dialects = pkt['Payload'].v['Payload'].gsub(/\x00/, '').split(/\x02/).grep(/^\w+/)
1616
dialect = dialects.index("NT LM 0.12") || dialects.length-1
1717

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+
1844
pkt = CONST::SMB_NEG_RES_NT_PKT.make_struct
1945
smb_set_defaults(c, pkt)
2046

@@ -23,18 +49,18 @@ def smb_cmd_negotiate(c, buff)
2349
pkt['Payload']['SMB'].v['Flags2'] = FLAGS2
2450
pkt['Payload']['SMB'].v['WordCount'] = 17
2551
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
3157
pkt['Payload'].v['SystemTimeLow'] = lo
3258
pkt['Payload'].v['SystemTimeHigh'] = hi
33-
pkt['Payload'].v['ServerTimeZone'] = 0x0
59+
pkt['Payload'].v['ServerTimeZone'] = server_time_zone
3460
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
3864

3965
c.put(pkt.to_s)
4066
end

0 commit comments

Comments
 (0)