Add addtional timing options
parent
7f2add2ce3
commit
5fba54db99
|
@ -17,6 +17,35 @@ module Metasploit
|
||||||
PRIVATE_TYPES = [ :password ]
|
PRIVATE_TYPES = [ :password ]
|
||||||
REALM_KEY = nil
|
REALM_KEY = nil
|
||||||
|
|
||||||
|
# @!attribute retries
|
||||||
|
# @return [Fixnum] The number of retries
|
||||||
|
attr_accessor :retries
|
||||||
|
|
||||||
|
validates :retries,
|
||||||
|
presence: true,
|
||||||
|
numericality: {
|
||||||
|
only_integer: true,
|
||||||
|
greater_than_or_equal_to: 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# @!attribute version
|
||||||
|
# @return [String] The SNMP version to scan
|
||||||
|
attr_accessor :version
|
||||||
|
|
||||||
|
validates :version,
|
||||||
|
presence: true,
|
||||||
|
inclusion: { in: ['1', '2c', 'all'] }
|
||||||
|
|
||||||
|
# This method returns an array of versions to scan
|
||||||
|
# @return [Array] An array of versions
|
||||||
|
def versions
|
||||||
|
case version
|
||||||
|
when '1'; [:SNMPv1]
|
||||||
|
when '2c'; [:SNMPv2c]
|
||||||
|
when 'all'; [:SNMPv1,:SNMPv2c]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
# This method attempts a single login with a single credential against the target
|
# This method attempts a single login with a single credential against the target
|
||||||
# @param credential [Credential] The credential object to attmpt to login with
|
# @param credential [Credential] The credential object to attmpt to login with
|
||||||
# @return [Metasploit::Framework::LoginScanner::Result] The LoginScanner Result object
|
# @return [Metasploit::Framework::LoginScanner::Result] The LoginScanner Result object
|
||||||
|
@ -29,14 +58,14 @@ module Metasploit
|
||||||
service_name: 'snmp'
|
service_name: 'snmp'
|
||||||
}
|
}
|
||||||
|
|
||||||
[:SNMPv1, :SNMPv2c].each do |version|
|
versions.each do |version|
|
||||||
snmp_client = ::SNMP::Manager.new(
|
snmp_client = ::SNMP::Manager.new(
|
||||||
:Host => host,
|
:Host => host,
|
||||||
:Port => port,
|
:Port => port,
|
||||||
:Community => credential.public,
|
:Community => credential.public,
|
||||||
:Version => version,
|
:Version => version,
|
||||||
:Timeout => connection_timeout,
|
:Timeout => connection_timeout,
|
||||||
:Retries => 2,
|
:Retries => retries,
|
||||||
:Transport => ::SNMP::RexUDPTransport,
|
:Transport => ::SNMP::RexUDPTransport,
|
||||||
:Socket => ::Rex::Socket::Udp.create('Context' => { 'Msf' => framework, 'MsfExploit' => framework_module })
|
:Socket => ::Rex::Socket::Udp.create('Context' => { 'Msf' => framework, 'MsfExploit' => framework_module })
|
||||||
)
|
)
|
||||||
|
|
|
@ -30,7 +30,10 @@ class Metasploit3 < Msf::Auxiliary
|
||||||
[
|
[
|
||||||
Opt::RPORT(161),
|
Opt::RPORT(161),
|
||||||
Opt::CHOST,
|
Opt::CHOST,
|
||||||
|
OptInt.new('CONNECTION_TIMEOUT', [true, 'The timeout value for each probe', 1]),
|
||||||
|
OptInt.new('RETRIES', [true, 'The number of retries per community string', 0]),
|
||||||
OptInt.new('BATCHSIZE', [true, 'The number of hosts to probe in each set', 256]),
|
OptInt.new('BATCHSIZE', [true, 'The number of hosts to probe in each set', 256]),
|
||||||
|
OptEnum.new('VERSION', [true, 'The SNMP version to scan', 'all', ['1','2c','all']]),
|
||||||
OptString.new('PASSWORD', [ false, 'The password to test' ]),
|
OptString.new('PASSWORD', [ false, 'The password to test' ]),
|
||||||
OptPath.new('PASS_FILE', [ false, "File containing communities, one per line",
|
OptPath.new('PASS_FILE', [ false, "File containing communities, one per line",
|
||||||
File.join(Msf::Config.data_directory, "wordlists", "snmp_default_pass.txt")
|
File.join(Msf::Config.data_directory, "wordlists", "snmp_default_pass.txt")
|
||||||
|
@ -61,9 +64,11 @@ class Metasploit3 < Msf::Auxiliary
|
||||||
cred_details: collection,
|
cred_details: collection,
|
||||||
stop_on_success: datastore['STOP_ON_SUCCESS'],
|
stop_on_success: datastore['STOP_ON_SUCCESS'],
|
||||||
bruteforce_speed: datastore['BRUTEFORCE_SPEED'],
|
bruteforce_speed: datastore['BRUTEFORCE_SPEED'],
|
||||||
connection_timeout: 2,
|
connection_timeout: datastore['CONNECTION_TIMEOUT'],
|
||||||
|
retries: datastore['RETRIES'],
|
||||||
|
version: datastore['VERSION'],
|
||||||
framework: framework,
|
framework: framework,
|
||||||
framework_module: self,
|
framework_module: self
|
||||||
)
|
)
|
||||||
|
|
||||||
scanner.scan! do |result|
|
scanner.scan! do |result|
|
||||||
|
|
Loading…
Reference in New Issue