Skip to content

Commit 4821851

Browse files
David MaloneyDavid Maloney
authored andcommitted
telnet and ssh next
1 parent 12902b0 commit 4821851

File tree

5 files changed

+52
-167
lines changed

5 files changed

+52
-167
lines changed

lib/metasploit/framework/login_scanner/ssh.rb

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,12 @@ def attempt_login(credential)
9393
end
9494
end
9595

96-
::Metasploit::Framework::LoginScanner::Result.new(result_options)
96+
result = ::Metasploit::Framework::LoginScanner::Result.new(result_options)
97+
result.host = host
98+
result.port = port
99+
result.protocol = 'tcp'
100+
result.service_name = 'ssh'
101+
result
97102
end
98103

99104
private

lib/metasploit/framework/login_scanner/telnet.rb

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,11 @@ class Telnet
4848
# (see {Base#attempt_login})
4949
def attempt_login(credential)
5050
result_options = {
51-
credential: credential
51+
credential: credential,
52+
host: host,
53+
port: port,
54+
protocol: 'tcp',
55+
service_name: 'telnet'
5256
}
5357

5458
if connect_reset_safe == :refused

modules/auxiliary/scanner/ssh/ssh_login.rb

Lines changed: 11 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -92,33 +92,6 @@ def session_setup(result, ssh_socket)
9292
s
9393
end
9494

95-
def do_report(ip,port,result)
96-
service_data = {
97-
address: ip,
98-
port: port,
99-
service_name: 'ssh',
100-
protocol: 'tcp',
101-
workspace_id: myworkspace_id
102-
}
103-
104-
credential_data = {
105-
module_fullname: self.fullname,
106-
origin_type: :service,
107-
private_data: result.credential.private,
108-
private_type: :password,
109-
username: result.credential.public,
110-
}.merge(service_data)
111-
112-
credential_core = create_credential(credential_data)
113-
114-
login_data = {
115-
core: credential_core,
116-
last_attempted_at: DateTime.now,
117-
status: result.status
118-
}.merge(service_data)
119-
120-
create_credential_login(login_data)
121-
end
12295

12396
def run_host(ip)
12497
@ip = ip
@@ -143,50 +116,30 @@ def run_host(ip)
143116
)
144117

145118
scanner.scan! do |result|
119+
credential_data = result.to_h
120+
credential_data.merge!(
121+
module_fullname: self.fullname,
122+
workspace_id: myworkspace_id
123+
)
146124
case result.status
147125
when Metasploit::Model::Login::Status::SUCCESSFUL
148126
print_brute :level => :good, :ip => ip, :msg => "Success: '#{result.credential}' '#{result.proof.to_s.gsub(/[\r\n\e\b\a]/, ' ')}'"
149-
do_report(ip,rport,result)
127+
credential_core = create_credential(credential_data)
128+
credential_data[:core] = credential_core
129+
create_credential_login(credential_data)
150130
session_setup(result, scanner.ssh_socket)
151131
:next_user
152132
when Metasploit::Model::Login::Status::UNABLE_TO_CONNECT
153133
print_brute :level => :verror, :ip => ip, :msg => "Could not connect"
154134
scanner.ssh_socket.close if scanner.ssh_socket && !scanner.ssh_socket.closed?
155-
invalidate_login(
156-
address: ip,
157-
port: rport,
158-
protocol: 'tcp',
159-
public: result.credential.public,
160-
private: result.credential.private,
161-
realm_key: result.credential.realm_key,
162-
realm_value: result.credential.realm,
163-
status: result.status
164-
)
135+
invalidate_login(credential_data)
165136
:abort
166137
when Metasploit::Model::Login::Status::INCORRECT
167138
print_brute :level => :verror, :ip => ip, :msg => "Failed: '#{result.credential}'"
168-
invalidate_login(
169-
address: ip,
170-
port: rport,
171-
protocol: 'tcp',
172-
public: result.credential.public,
173-
private: result.credential.private,
174-
realm_key: result.credential.realm_key,
175-
realm_value: result.credential.realm,
176-
status: result.status
177-
)
139+
invalidate_login(credential_data)
178140
scanner.ssh_socket.close if scanner.ssh_socket && !scanner.ssh_socket.closed?
179141
else
180-
invalidate_login(
181-
address: ip,
182-
port: rport,
183-
protocol: 'tcp',
184-
public: result.credential.public,
185-
private: result.credential.private,
186-
realm_key: result.credential.realm_key,
187-
realm_value: result.credential.realm,
188-
status: result.status
189-
)
142+
invalidate_login(credential_data)
190143
scanner.ssh_socket.close if scanner.ssh_socket && !scanner.ssh_socket.closed?
191144
end
192145
end

modules/auxiliary/scanner/ssh/ssh_login_pubkey.rb

Lines changed: 22 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -180,34 +180,6 @@ def session_setup(result, ssh_socket)
180180
s
181181
end
182182

183-
def do_report(ip, port, result)
184-
service_data = {
185-
address: ip,
186-
port: port,
187-
service_name: 'ssh',
188-
protocol: 'tcp',
189-
workspace_id: myworkspace_id
190-
}
191-
192-
credentail_data = {
193-
module_fullname: self.fullname,
194-
origin_type: :service,
195-
private_data: result.credential.private,
196-
private_type: :ssh_key,
197-
username: result.credential.public,
198-
}.merge(service_data)
199-
200-
credential_core = create_credential(credentail_data)
201-
202-
login_data = {
203-
core: credential_core,
204-
last_attempted_at: DateTime.now,
205-
status: result.status,
206-
}.merge(service_data)
207-
208-
create_credential_login(login_data)
209-
end
210-
211183
def run_host(ip)
212184
print_status("#{ip}:#{rport} SSH - Testing Cleartext Keys")
213185

@@ -234,54 +206,32 @@ def run_host(ip)
234206
)
235207

236208
scanner.scan! do |result|
237-
209+
credential_data = result.to_h
210+
credential_data.merge!(
211+
module_fullname: self.fullname,
212+
workspace_id: myworkspace_id
213+
)
238214
case result.status
239-
when Metasploit::Model::Login::Status::SUCCESSFUL
240-
print_brute :level => :good, :ip => ip, :msg => "Success: '#{result.credential.public}' '#{result.proof.to_s.gsub(/[\r\n\e\b\a]/, ' ')}'"
241-
do_report(ip,rport,result)
242-
session_setup(result, scanner.ssh_socket)
243-
:next_user
244-
when Metasploit::Model::Login::Status::UNABLE_TO_CONNECT
245-
print_brute :level => :verror, :ip => ip, :msg => "Could not connect"
246-
invalidate_login(
247-
address: ip,
248-
port: rport,
249-
protocol: 'tcp',
250-
public: result.credential.public,
251-
private: result.credential.private,
252-
realm_key: result.credential.realm_key,
253-
realm_value: result.credential.realm,
254-
status: result.status
255-
)
256-
scanner.ssh_socket.close if scanner.ssh_socket && !scanner.ssh_socket.closed?
257-
:abort
258-
when Metasploit::Model::Login::Status::INCORRECT
259-
print_brute :level => :verror, :ip => ip, :msg => "Failed: '#{result.credential}'"
260-
invalidate_login(
261-
address: ip,
262-
port: rport,
263-
protocol: 'tcp',
264-
public: result.credential.public,
265-
private: result.credential.private,
266-
realm_key: result.credential.realm_key,
267-
realm_value: result.credential.realm,
268-
status: result.status
269-
)
270-
scanner.ssh_socket.close if scanner.ssh_socket && !scanner.ssh_socket.closed?
215+
when Metasploit::Model::Login::Status::SUCCESSFUL
216+
print_brute :level => :good, :ip => ip, :msg => "Success: '#{result.credential}' '#{result.proof.to_s.gsub(/[\r\n\e\b\a]/, ' ')}'"
217+
credential_core = create_credential(credential_data)
218+
credential_data[:core] = credential_core
219+
create_credential_login(credential_data)
220+
session_setup(result, scanner.ssh_socket)
221+
:next_user
222+
when Metasploit::Model::Login::Status::UNABLE_TO_CONNECT
223+
print_brute :level => :verror, :ip => ip, :msg => "Could not connect"
224+
scanner.ssh_socket.close if scanner.ssh_socket && !scanner.ssh_socket.closed?
225+
invalidate_login(credential_data)
226+
:abort
227+
when Metasploit::Model::Login::Status::INCORRECT
228+
print_brute :level => :verror, :ip => ip, :msg => "Failed: '#{result.credential}'"
229+
invalidate_login(credential_data)
230+
scanner.ssh_socket.close if scanner.ssh_socket && !scanner.ssh_socket.closed?
271231
else
272-
invalidate_login(
273-
address: ip,
274-
port: rport,
275-
protocol: 'tcp',
276-
public: result.credential.public,
277-
private: result.credential.private,
278-
realm_key: result.credential.realm_key,
279-
realm_value: result.credential.realm,
280-
status: result.status
281-
)
232+
invalidate_login(credential_data)
282233
scanner.ssh_socket.close if scanner.ssh_socket && !scanner.ssh_socket.closed?
283234
end
284-
285235
end
286236

287237
end

modules/auxiliary/scanner/telnet/telnet_login.rb

Lines changed: 8 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -68,47 +68,20 @@ def run_host(ip)
6868
telnet_timeout: datastore['TelnetTimeout']
6969
)
7070

71-
service_data = {
72-
address: ip,
73-
port: rport,
74-
service_name: 'telnet',
75-
protocol: 'tcp',
76-
workspace_id: myworkspace_id
77-
}
78-
7971
scanner.scan! do |result|
72+
credential_data = result.to_h
73+
credential_data.merge!(
74+
module_fullname: self.fullname,
75+
workspace_id: myworkspace_id
76+
)
8077
if result.success?
81-
credential_data = {
82-
module_fullname: self.fullname,
83-
origin_type: :service,
84-
private_data: result.credential.private,
85-
private_type: :password,
86-
username: result.credential.public
87-
}
88-
credential_data.merge!(service_data)
89-
9078
credential_core = create_credential(credential_data)
91-
92-
login_data = {
93-
core: credential_core,
94-
last_attempted_at: DateTime.now,
95-
status: Metasploit::Model::Login::Status::SUCCESSFUL
96-
}
97-
login_data.merge!(service_data)
98-
99-
create_credential_login(login_data)
79+
credential_data[:core] = credential_core
80+
create_credential_login(credential_data)
10081
print_good "#{ip}:#{rport} - LOGIN SUCCESSFUL: #{result.credential}"
10182
start_telnet_session(ip,rport,result.credential.public,result.credential.private,scanner)
10283
else
103-
invalidate_login(
104-
address: ip,
105-
port: rport,
106-
protocol: 'tcp',
107-
public: result.credential.public,
108-
private: result.credential.private,
109-
realm_key: nil,
110-
realm_value: nil,
111-
status: result.status)
84+
invalidate_login(credential_data)
11285
print_status "#{ip}:#{rport} - LOGIN FAILED: #{result.credential} (#{result.status}: #{result.proof})"
11386
end
11487
end

0 commit comments

Comments
 (0)