Skip to content

Commit 7d8b78c

Browse files
committed
Merge session_setup refactoring
2 parents 544f886 + eb7ac02 commit 7d8b78c

File tree

5 files changed

+43
-20
lines changed

5 files changed

+43
-20
lines changed

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -145,17 +145,17 @@ def smb_cmd_dispatch(cmd, c, buff)
145145
when CONST::SMB_COM_SESSION_SETUP_ANDX
146146
word_count = pkt['Payload']['SMB'].v['WordCount']
147147
if word_count == 0x0D # Share Security Mode sessions
148-
smb_cmd_session_setup(c, buff)
148+
smb_cmd_session_setup_andx(c, buff)
149149
else
150150
print_status("SMB Share - #{smb[:ip]} Unknown SMB_COM_SESSION_SETUP_ANDX request type , ignoring... ")
151151
smb_error(cmd, c, CONST::SMB_STATUS_SUCCESS)
152152
end
153153
when CONST::SMB_COM_TRANSACTION2
154-
smb_cmd_trans(c, buff)
154+
smb_cmd_trans2(c, buff)
155155
when CONST::SMB_COM_NT_CREATE_ANDX
156-
smb_cmd_create(c, buff)
156+
smb_cmd_nt_create_andx(c, buff)
157157
when CONST::SMB_COM_READ_ANDX
158-
smb_cmd_read(c, buff)
158+
smb_cmd_read_andx(c, buff)
159159
when CONST::SMB_COM_CLOSE
160160
smb_cmd_close(c, buff)
161161
else

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ module NtCreateAndx
88
#
99
# Responds to a client NT_CREATE_ANDX request
1010
#
11-
def smb_cmd_create(c, buff)
11+
def smb_cmd_nt_create_andx(c, buff)
1212
smb = @state[c]
1313
pkt = CONST::SMB_CREATE_PKT.make_struct
1414
pkt.from_s(buff)

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ module ReadAndx
1111
# by reading the offset and length requested by the client
1212
# and sending the appropriate chunk of the payload
1313
#
14-
def smb_cmd_read(c, buff)
14+
def smb_cmd_read_andx(c, buff)
1515
pkt = CONST::SMB_READ_PKT.make_struct
1616
pkt.from_s(buff)
1717

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

Lines changed: 36 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ module SessionSetupAndx
88
#
99
# Sets up an SMB session in response to a SESSION_SETUP_ANDX request
1010
#
11-
def smb_cmd_session_setup(c, buff)
11+
def smb_cmd_session_setup_andx(c, buff)
1212
tree_connect_response = CONST::SMB_TREE_CONN_ANDX_RES_PKT.make_struct
1313
tree_connect_response.v['WordCount'] = 7
1414
tree_connect_response.v['AndXCommand'] = CONST::SMB_COM_NO_ANDX_COMMAND
@@ -19,26 +19,49 @@ def smb_cmd_session_setup(c, buff)
1919
tree_connect_response.v['GuestAccessRights'] = 0
2020
tree_connect_response.v['Payload'] = "A:\x00#{Rex::Text.to_unicode('NTFS')}\x00\x00"
2121

22+
data = Rex::Text.to_unicode('Unix', 'utf-16be') + "\x00\x00" + # Native OS # Samba signature
23+
Rex::Text.to_unicode('Samba 3.4.7', 'utf-16be') + "\x00\x00" + # Native LAN Manager # Samba signature
24+
Rex::Text.to_unicode('WORKGROUP', 'utf-16be') + "\x00\x00\x00" # Primary DOMAIN # Samba signature
25+
26+
send_session_setup_andx_res(c, {
27+
action: CONST::SMB_SETUP_GUEST,
28+
data: data,
29+
andx: CONST::SMB_COM_TREE_CONNECT_ANDX,
30+
andx_offset: 96,
31+
andx_command: tree_connect_response
32+
})
33+
end
34+
35+
def send_session_setup_andx_res(c, opts = {})
36+
action = opts[:action] || 0
37+
andx_offset = opts[:andx_offset] || 0
38+
reserved = opts[:reserved] || 0
39+
andx = opts[:andx] || CONST::SMB_COM_NO_ANDX_COMMAND
40+
data = opts[:data] || ''
41+
andx_command = opts[:andx_command] || nil
42+
43+
2244
pkt = CONST::SMB_SETUP_RES_PKT.make_struct
2345
smb_set_defaults(c, pkt)
2446

2547
pkt['Payload']['SMB'].v['Command'] = CONST::SMB_COM_SESSION_SETUP_ANDX
2648
pkt['Payload']['SMB'].v['Flags1'] = FLAGS
2749
pkt['Payload']['SMB'].v['Flags2'] = FLAGS2
2850
pkt['Payload']['SMB'].v['WordCount'] = 3
29-
pkt['Payload'].v['AndX'] = CONST::SMB_COM_TREE_CONNECT_ANDX
30-
pkt['Payload'].v['Reserved1'] = 00
31-
pkt['Payload'].v['AndXOffset'] = 96
32-
pkt['Payload'].v['Action'] = CONST::SMB_SETUP_GUEST
33-
pkt['Payload'].v['Payload'] =
34-
Rex::Text.to_unicode('Unix', 'utf-16be') + "\x00\x00" + # Native OS # Samba signature
35-
Rex::Text.to_unicode('Samba 3.4.7', 'utf-16be') + "\x00\x00" + # Native LAN Manager # Samba signature
36-
Rex::Text.to_unicode('WORKGROUP', 'utf-16be') + "\x00\x00\x00" # Primary DOMAIN # Samba signature
51+
pkt['Payload'].v['AndX'] = andx
52+
pkt['Payload'].v['Reserved1'] = reserved
53+
pkt['Payload'].v['AndXOffset'] = andx_offset
54+
pkt['Payload'].v['Action'] = action
55+
pkt['Payload'].v['Payload'] = data
3756

38-
full_pkt = pkt.to_s + tree_connect_response.to_s
39-
original_length = full_pkt[2, 2].unpack('n')[0]
40-
original_length = original_length + tree_connect_response.to_s.length
41-
full_pkt[2, 2] = [original_length].pack('n')
57+
if andx_command
58+
full_pkt = pkt.to_s + andx_command.to_s
59+
original_length = full_pkt[2, 2].unpack('n')[0]
60+
original_length = original_length + andx_command.to_s.length
61+
full_pkt[2, 2] = [original_length].pack('n')
62+
else
63+
full_pkt = pkt.to_s
64+
end
4265

4366
c.put(full_pkt)
4467
end

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ module Trans2
1616
# QUERY_FILE_INFO (Basic, Standard and Internal)
1717
# QUERY_PATH_INFO (Basic and Standard)
1818
#
19-
def smb_cmd_trans(c, buff)
19+
def smb_cmd_trans2(c, buff)
2020
pkt = CONST::SMB_TRANS2_PKT.make_struct
2121
pkt.from_s(buff)
2222

0 commit comments

Comments
 (0)