Land #11103, CreateSession option for aux modules
commit
da0202aa90
|
@ -17,6 +17,7 @@ module CommandShellOptions
|
|||
|
||||
register_advanced_options(
|
||||
[
|
||||
OptBool.new('CreateSession', [false, 'Create a new session for every successful login', true]),
|
||||
OptString.new('InitialAutoRunScript', "An initial script to run on session creation (before AutoRunScript)"),
|
||||
OptString.new('AutoRunScript', "A script to run automatically on session creation."),
|
||||
OptString.new('CommandShellCleanupCommand', "A command to run before the session is closed")
|
||||
|
|
|
@ -182,6 +182,6 @@ class MetasploitModule < Msf::Auxiliary
|
|||
# Don't tie the life of this socket to the exploit
|
||||
self.sockets.delete(stderr_sock)
|
||||
|
||||
start_session(self, "rexec #{user}:#{pass} (#{host}:#{port})", merge_me)
|
||||
start_session(self, "rexec #{user}:#{pass} (#{host}:#{port})", merge_me) if datastore['CreateSession']
|
||||
end
|
||||
end
|
||||
|
|
|
@ -326,7 +326,7 @@ class MetasploitModule < Msf::Auxiliary
|
|||
end
|
||||
|
||||
report_auth_info(auth_info)
|
||||
start_session(self, info, merge_me)
|
||||
start_session(self, info, merge_me) if datastore['CreateSession']
|
||||
|
||||
end
|
||||
end
|
||||
|
|
|
@ -267,6 +267,6 @@ class MetasploitModule < Msf::Auxiliary
|
|||
# Don't tie the life of this socket to the exploit
|
||||
self.sockets.delete(stderr_sock)
|
||||
|
||||
start_session(self, "RSH #{user} from #{luser} (#{host}:#{port})", merge_me)
|
||||
start_session(self, "RSH #{user} from #{luser} (#{host}:#{port})", merge_me) if datastore['CreateSession']
|
||||
end
|
||||
end
|
||||
|
|
|
@ -87,13 +87,23 @@ class MetasploitModule < Msf::Auxiliary
|
|||
|
||||
shell = Net::SSH::CommandStream.new(ssh)
|
||||
|
||||
return unless shell
|
||||
# XXX: Wait for CommandStream to log a channel request failure
|
||||
sleep 0.1
|
||||
|
||||
if (e = shell.error)
|
||||
print_error("#{ip}:#{rport} - #{e.class}: #{e.message}")
|
||||
return
|
||||
end
|
||||
|
||||
info = "#{self.name} (#{version})"
|
||||
|
||||
ds_merge = {
|
||||
'USERNAME' => 'admin'
|
||||
}
|
||||
|
||||
start_session(self, "Eaton Xpert Meter SSH Backdoor (#{version})", ds_merge, false, shell.lsock)
|
||||
if datastore['CreateSession']
|
||||
start_session(self, info, ds_merge, false, shell.lsock)
|
||||
end
|
||||
|
||||
# XXX: Ruby segfaults if we don't remove the SSH socket
|
||||
remove_socket(ssh.transport.socket)
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
##
|
||||
|
||||
class MetasploitModule < Msf::Auxiliary
|
||||
|
||||
include Msf::Exploit::Remote::SSH
|
||||
include Msf::Auxiliary::Scanner
|
||||
include Msf::Auxiliary::CommandShell
|
||||
|
@ -81,15 +82,23 @@ class MetasploitModule < Msf::Auxiliary
|
|||
|
||||
shell = Net::SSH::CommandStream.new(ssh)
|
||||
|
||||
return unless shell
|
||||
# XXX: Wait for CommandStream to log a channel request failure
|
||||
sleep 0.1
|
||||
|
||||
info = "Fortinet SSH Backdoor (#{version})"
|
||||
if (e = shell.error)
|
||||
print_error("#{ip}:#{rport} - #{e.class}: #{e.message}")
|
||||
return
|
||||
end
|
||||
|
||||
info = "#{self.name} (#{version})"
|
||||
|
||||
ds_merge = {
|
||||
'USERNAME' => 'Fortimanager_Access'
|
||||
}
|
||||
|
||||
if datastore['CreateSession']
|
||||
start_session(self, info, ds_merge, false, shell.lsock)
|
||||
end
|
||||
|
||||
# XXX: Ruby segfaults if we don't remove the SSH socket
|
||||
remove_socket(ssh.transport.socket)
|
||||
|
@ -98,4 +107,5 @@ class MetasploitModule < Msf::Auxiliary
|
|||
def rport
|
||||
datastore['RPORT']
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
@ -8,10 +8,9 @@ require 'metasploit/framework/login_scanner/ssh'
|
|||
require 'metasploit/framework/credential_collection'
|
||||
|
||||
class MetasploitModule < Msf::Auxiliary
|
||||
include Msf::Auxiliary::Report
|
||||
include Msf::Auxiliary::CommandShell
|
||||
include Msf::Auxiliary::AuthBrute
|
||||
include Msf::Auxiliary::Scanner
|
||||
include Msf::Auxiliary::AuthBrute
|
||||
include Msf::Auxiliary::Report
|
||||
|
||||
DEFAULT_USERNAME = 'karaf'
|
||||
DEFAULT_PASSWORD = 'karaf'
|
||||
|
|
|
@ -137,7 +137,9 @@ class MetasploitModule < Msf::Auxiliary
|
|||
|
||||
case action.name
|
||||
when 'Shell'
|
||||
if datastore['CreateSession']
|
||||
start_session(self, "#{self.name} (#{version})", {}, false, shell.lsock)
|
||||
end
|
||||
when 'Execute'
|
||||
output = shell.channel && (shell.channel[:data] || '').chomp
|
||||
|
||||
|
|
|
@ -128,7 +128,7 @@ class MetasploitModule < Msf::Auxiliary
|
|||
credential_core = create_credential(credential_data)
|
||||
credential_data[:core] = credential_core
|
||||
create_credential_login(credential_data)
|
||||
session_setup(result, scanner)
|
||||
session_setup(result, scanner) if datastore['CreateSession']
|
||||
:next_user
|
||||
when Metasploit::Model::Login::Status::UNABLE_TO_CONNECT
|
||||
vprint_brute :level => :verror, :ip => ip, :msg => "Could not connect: #{result.proof}"
|
||||
|
|
|
@ -152,7 +152,7 @@ class MetasploitModule < Msf::Auxiliary
|
|||
create_credential_login(credential_data)
|
||||
tmp_key = result.credential.private
|
||||
ssh_key = SSHKey.new tmp_key
|
||||
session_setup(result, scanner, ssh_key.fingerprint)
|
||||
session_setup(result, scanner, ssh_key.fingerprint) if datastore['CreateSession']
|
||||
:next_user
|
||||
when Metasploit::Model::Login::Status::UNABLE_TO_CONNECT
|
||||
if datastore['VERBOSE']
|
||||
|
|
|
@ -152,6 +152,6 @@ class MetasploitModule < Msf::Auxiliary
|
|||
'PASSWORD' => pass
|
||||
}
|
||||
|
||||
start_session(self, "TELNET #{user}:#{pass} (#{host}:#{port})", merge_me, true, scanner.sock)
|
||||
start_session(self, "TELNET #{user}:#{pass} (#{host}:#{port})", merge_me, true, scanner.sock) if datastore['CreateSession']
|
||||
end
|
||||
end
|
||||
|
|
|
@ -90,7 +90,7 @@ class MetasploitModule < Msf::Auxiliary
|
|||
credential_data[:core] = credential_core
|
||||
create_credential_login(credential_data)
|
||||
print_good "#{ip}:#{rport} - Login Successful: #{result.credential}"
|
||||
start_telnet_session(ip,rport,result.credential.public,result.credential.private,scanner)
|
||||
start_telnet_session(ip,rport,result.credential.public,result.credential.private,scanner) if datastore['CreateSession']
|
||||
else
|
||||
invalidate_login(credential_data)
|
||||
vprint_error "#{ip}:#{rport} - LOGIN FAILED: #{result.credential} (#{result.status}: #{result.proof})"
|
||||
|
|
|
@ -9,7 +9,6 @@ require 'net/ssh/command_stream'
|
|||
class MetasploitModule < Msf::Exploit::Remote
|
||||
Rank = ExcellentRanking
|
||||
|
||||
include Msf::Auxiliary::CommandShell
|
||||
include Msf::Exploit::Remote::SSH
|
||||
|
||||
def initialize(info={})
|
||||
|
|
|
@ -7,7 +7,6 @@ class MetasploitModule < Msf::Exploit::Remote
|
|||
Rank = ManualRanking # It's backdooring the remote device
|
||||
|
||||
include Msf::Exploit::Remote::HttpClient
|
||||
include Msf::Auxiliary::CommandShell
|
||||
include Msf::Exploit::FileDropper
|
||||
|
||||
RESPONSE_PATTERN = "\<FORM\ NAME\=\"form\"\ METHOD\=\"POST\"\ ACTION\=\"\/cgi\/time\/time.cgi\"\ ENCTYPE\=\"multipart\/form-data"
|
||||
|
|
|
@ -9,7 +9,6 @@ require 'net/ssh/command_stream'
|
|||
class MetasploitModule < Msf::Exploit::Remote
|
||||
Rank = ExcellentRanking
|
||||
|
||||
include Msf::Auxiliary::CommandShell
|
||||
include Msf::Exploit::Remote::SSH
|
||||
|
||||
def initialize(info={})
|
||||
|
|
|
@ -9,7 +9,6 @@ require 'net/ssh/command_stream'
|
|||
class MetasploitModule < Msf::Exploit::Remote
|
||||
Rank = ExcellentRanking
|
||||
|
||||
include Msf::Auxiliary::CommandShell
|
||||
include Msf::Exploit::Remote::SSH
|
||||
|
||||
def initialize(info={})
|
||||
|
|
|
@ -9,9 +9,8 @@ require 'net/ssh/command_stream'
|
|||
class MetasploitModule < Msf::Exploit::Remote
|
||||
Rank = ExcellentRanking
|
||||
|
||||
include Msf::Auxiliary::Report
|
||||
include Msf::Auxiliary::CommandShell
|
||||
include Msf::Exploit::Remote::SSH
|
||||
include Msf::Auxiliary::Report
|
||||
|
||||
def initialize(info = {})
|
||||
super(update_info(info, {
|
||||
|
|
Loading…
Reference in New Issue