Skip to content

Commit 704e00b

Browse files
committed
Add some more logging
1 parent 4296dba commit 704e00b

File tree

5 files changed

+23
-26
lines changed

5 files changed

+23
-26
lines changed

lib/msf/core/exploit/remote/smb/relay/ntlm/server.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,13 +47,13 @@ def run(&block)
4747
begin
4848
_port, ip_address = ::Socket::unpack_sockaddr_in(server_client.getpeername)
4949
logger.print_status("New request from #{ip_address}")
50-
logger.info("starting thread for connection")
50+
logger.info("Starting thread for connection from #{ip_address}")
5151
server_client.run
5252
rescue => e
5353
logger.print_error "#{e.message}"
5454
elog(e)
5555
end
56-
logger.info("ending thread for connection")
56+
logger.info("Ending thread for connection from #{ip_address}")
5757
end)
5858

5959
break unless block.nil? || block.call(server_client)

lib/msf/core/exploit/remote/smb/relay/ntlm/server_client.rb

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ def do_tree_connect_smb2(request, session)
3030
end
3131

3232

33-
logger.print_status("Relaying to next target #{display_target(session.metadata[:relay_target])}")
33+
logger.print_status("Relaying to next target #{session.metadata[:relay_target]}")
3434
relayed_connection = create_relay_client(
3535
session.metadata[:relay_target],
3636
@relay_timeout
@@ -138,6 +138,7 @@ def relay_ntlmssp(session, incoming_security_buffer = nil)
138138
# Choose the next machine to relay to, and send the incoming security buffer to the relay target
139139
if ntlm_message.is_a?(::Net::NTLM::Message::Type1)
140140
relayed_connection = session.metadata[:relayed_connection]
141+
logger.info("Relaying NTLM type 1 message to #{relayed_connection.target.ip}")
141142
relay_result = relayed_connection.relay_ntlmssp_type1(incoming_security_buffer)
142143
return nil unless relay_result.nt_status == WindowsError::NTStatus::STATUS_MORE_PROCESSING_REQUIRED
143144

@@ -155,14 +156,14 @@ def relay_ntlmssp(session, incoming_security_buffer = nil)
155156
# NTLM challenge response
156157
elsif ntlm_message.is_a?(::Net::NTLM::Message::Type3)
157158
relayed_connection = session.metadata[:relayed_connection]
158-
159+
logger.info("Relaying #{ntlm_message.ntlm_version == :ntlmv2 ? 'NTLMv2' : 'NTLMv1'} type 3 message to #{relayed_connection.target} as #{session.metadata[:identity]}")
159160
relay_result = relayed_connection.relay_ntlmssp_type3(incoming_security_buffer)
160161

161162
is_success = relay_result.nt_status == WindowsError::NTStatus::STATUS_SUCCESS
162163
@relay_targets.on_relay_end(relayed_connection.target, identity: session.metadata[:identity], is_success: is_success)
163164

164165
if is_success
165-
logger.print_good("Identity: #{session.metadata[:identity]} - Successfully authenticated against relay target #{display_target(relayed_connection.target)}")
166+
logger.print_good("Identity: #{session.metadata[:identity]} - Successfully authenticated against relay target #{relayed_connection.target}")
166167
session.metadata[:incoming_challenge_response] = ntlm_message
167168

168169
@listener.on_ntlm_type3(
@@ -177,13 +178,13 @@ def relay_ntlmssp(session, incoming_security_buffer = nil)
177178
relayed_connection.disconnect!
178179

179180
if relay_result.nt_status == WindowsError::NTStatus::STATUS_LOGON_FAILURE
180-
logger.print_warning("Identity: #{session.metadata[:identity]} - Relay failed due to client authentication details not matching any account on target server #{display_target(relayed_connection.target)}")
181+
logger.print_warning("Identity: #{session.metadata[:identity]} - Relay failed due to client authentication details not matching any account on target server #{relayed_connection.target}")
181182
else
182183
error_code = WindowsError::NTStatus.find_by_retval(relay_result.nt_status.value).first
183184
if error_code.nil?
184-
logger.print_warning("Identity: #{session.metadata[:identity]} - Relay against target #{display_target(relayed_connection.target)} failed with unexpected error: #{relay_result.nt_status.value}")
185+
logger.print_warning("Identity: #{session.metadata[:identity]} - Relay against target #{relayed_connection.target} failed with unexpected error: #{relay_result.nt_status.value}")
185186
else
186-
logger.print_warning("Identity: #{session.metadata[:identity]} - Relay against target #{display_target(relayed_connection.target)} failed with unexpected error: #{error_code.name}: #{error_code.description}")
187+
logger.print_warning("Identity: #{session.metadata[:identity]} - Relay against target #{relayed_connection.target} failed with unexpected error: #{error_code.name}: #{error_code.description}")
187188
end
188189
end
189190

@@ -211,21 +212,15 @@ def create_relay_client(target, timeout)
211212

212213
client
213214
rescue ::Rex::ConnectionTimeout => e
214-
msg = "Timeout error retrieving server challenge from target #{display_target(target)}. Most likely caused by unresponsive target"
215+
msg = "Timeout error retrieving server challenge from target #{target}. Most likely caused by unresponsive target"
215216
elog(msg, error: e)
216217
logger.print_error msg
217218
nil
218219
rescue ::Exception => e
219-
msg = "Unable to create relay to #{display_target(target)}"
220+
msg = "Unable to create relay to #{target}"
220221
elog(msg, error: e)
221222
logger.print_error msg
222223
nil
223224
end
224-
225-
protected
226-
227-
def display_target(target)
228-
"#{target.protocol}://#{target.ip}:#{target.port}"
229-
end
230225
end
231226
end

lib/msf/core/exploit/remote/smb/relay/ntlm/target/http/client.rb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,10 @@ def self.create(provider, target, logger, timeout)
3333
)
3434
end
3535

36+
def disconnect!
37+
@client.close
38+
end
39+
3640
# @param [String] client_type1_msg
3741
# @rtype [Msf::Exploit::Remote::SMB::Relay::NTLM::Target::RelayResult, nil]
3842
def relay_ntlmssp_type1(client_type1_msg)
@@ -76,9 +80,5 @@ def relay_ntlmssp_type3(client_type3_msg)
7680
protected
7781

7882
attr_reader :logger
79-
80-
def display_target(target)
81-
"#{target.protocol}://#{target.ip}:#{target.port}" + (target.path.blank? ? '/' : target.path)
82-
end
8383
end
8484
end

lib/msf/core/exploit/remote/smb/relay/ntlm/target/smb/client.rb

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ def relay_ntlmssp_type1(client_type1_msg)
107107
)
108108
end
109109
rescue ::Exception => e
110-
msg = "Unable to retrieve server challenge at #{display_target(target)}"
110+
msg = "Unable to retrieve server challenge from #{target}"
111111
elog(msg, error: e)
112112
logger.print_error msg
113113
nil
@@ -146,7 +146,7 @@ def relay_ntlmssp_type3(client_type3_msg)
146146
)
147147
end
148148
rescue ::Exception => e
149-
msg = "Unable to authenticate to target #{display_target(target)} via relay"
149+
msg = "Unable to authenticate to target #{target} via relay"
150150
elog(msg, error: e)
151151
logger.error msg
152152
nil
@@ -161,9 +161,5 @@ def normalize_type3_encoding(type3_msg)
161161
protected
162162

163163
attr_reader :logger
164-
165-
def display_target(target)
166-
"#{target.protocol}://#{target.ip}:#{target.port}"
167-
end
168164
end
169165
end

lib/msf/core/exploit/remote/smb/relay/target_list.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,12 @@ def to_h
108108
{ ip: ip, port: port, protocol: protocol, path: path, relay_state: @relay_state }
109109
end
110110

111+
def to_s
112+
s = "#{protocol}://#{}"
113+
s << ('/' + path.delete_prefix('/')) unless path.blank?
114+
s
115+
end
116+
111117
private
112118

113119
def relay_data_for(username)

0 commit comments

Comments
 (0)