Add addtional timing options

bug/bundler_fix
Meatballs 2015-02-06 17:48:49 +00:00
parent 7f2add2ce3
commit 5fba54db99
2 changed files with 38 additions and 4 deletions

View File

@ -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 })
) )

View File

@ -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|