modules/auxiliary/sniffer: Resolve RuboCop violations
This commit is contained in:
@@ -17,38 +17,43 @@ class MetasploitModule < Msf::Auxiliary
|
||||
|
||||
def initialize
|
||||
super(
|
||||
'Name' => 'pSnuffle Packet Sniffer',
|
||||
'Description' => 'This module sniffs passwords like dsniff did in the past',
|
||||
'Author' => 'Max Moser <mmo[at]remote-exploit.org>',
|
||||
'License' => MSF_LICENSE,
|
||||
'Actions' =>
|
||||
[
|
||||
[ 'Sniffer', 'Description' => 'Run sniffer' ],
|
||||
[ 'List', 'Description' => 'List protocols' ]
|
||||
],
|
||||
'Name' => 'pSnuffle Packet Sniffer',
|
||||
'Description' => 'This module sniffs passwords like dsniff did in the past.',
|
||||
'Author' => 'Max Moser <mmo[at]remote-exploit.org>',
|
||||
'License' => MSF_LICENSE,
|
||||
'Actions' => [
|
||||
[ 'Sniffer', { 'Description' => 'Run sniffer' } ],
|
||||
[ 'List', { 'Description' => 'List protocols' } ]
|
||||
],
|
||||
'PassiveActions' => [ 'Sniffer' ],
|
||||
'DefaultAction' => 'Sniffer'
|
||||
'DefaultAction' => 'Sniffer',
|
||||
'Notes' => {
|
||||
'Stability' => [CRASH_SAFE],
|
||||
'SideEffects' => [],
|
||||
'Reliability' => []
|
||||
}
|
||||
)
|
||||
|
||||
register_options [
|
||||
OptString.new('PROTOCOLS', [true, 'A comma-delimited list of protocols to sniff or "all".', 'all']),
|
||||
]
|
||||
|
||||
register_advanced_options [
|
||||
OptPath.new('ProtocolBase', [true, 'The base directory containing the protocol decoders',
|
||||
OptPath.new('ProtocolBase', [
|
||||
true, 'The base directory containing the protocol decoders',
|
||||
File.join(Msf::Config.data_directory, 'exploits', 'psnuffle')
|
||||
]),
|
||||
]
|
||||
deregister_options('RHOSTS')
|
||||
end
|
||||
|
||||
|
||||
def load_protocols
|
||||
base = datastore['ProtocolBase']
|
||||
unless File.directory? base
|
||||
raise RuntimeError, 'The ProtocolBase parameter is set to an invalid directory'
|
||||
raise 'The ProtocolBase parameter is set to an invalid directory'
|
||||
end
|
||||
|
||||
allowed = datastore['PROTOCOLS'].split(',').map{|x| x.strip.downcase}
|
||||
allowed = datastore['PROTOCOLS'].split(',').map { |x| x.strip.downcase }
|
||||
@protos = {}
|
||||
decoders = Dir.new(base).entries.grep(/\.rb$/).sort
|
||||
decoders.each do |n|
|
||||
@@ -57,7 +62,7 @@ class MetasploitModule < Msf::Auxiliary
|
||||
begin
|
||||
m.module_eval(File.read(f, File.size(f)))
|
||||
m.constants.grep(/^Sniffer(.*)/) do
|
||||
proto = $1
|
||||
proto = ::Regexp.last_match(1)
|
||||
next unless allowed.include?(proto.downcase) || datastore['PROTOCOLS'] == 'all'
|
||||
|
||||
klass = m.const_get("Sniffer#{proto}")
|
||||
@@ -65,7 +70,7 @@ class MetasploitModule < Msf::Auxiliary
|
||||
|
||||
print_status("Loaded protocol #{proto} from #{f}...")
|
||||
end
|
||||
rescue => e
|
||||
rescue StandardError => e
|
||||
print_error("Decoder #{n} failed to load: #{e.class} #{e} #{e.backtrace}")
|
||||
end
|
||||
end
|
||||
@@ -88,6 +93,7 @@ class MetasploitModule < Msf::Auxiliary
|
||||
p = PacketFu::Packet.parse(pkt)
|
||||
next unless p.is_tcp?
|
||||
next if p.payload.empty?
|
||||
|
||||
@protos.each_key do |k|
|
||||
@protos[k].parse(p)
|
||||
end
|
||||
@@ -107,13 +113,13 @@ class BaseProtocolParser
|
||||
|
||||
def initialize(framework, mod)
|
||||
self.framework = framework
|
||||
self.module = mod
|
||||
self.sessions = {}
|
||||
self.dport = 0
|
||||
self.module = mod
|
||||
self.sessions = {}
|
||||
self.dport = 0
|
||||
register_sigs
|
||||
end
|
||||
|
||||
def parse(pkt)
|
||||
def parse(_pkt)
|
||||
nil
|
||||
end
|
||||
|
||||
@@ -166,12 +172,12 @@ class BaseProtocolParser
|
||||
self.module.create_credential_login(login_data)
|
||||
end
|
||||
|
||||
def report_note(*s)
|
||||
self.module.report_note(*s)
|
||||
def report_note(*opts)
|
||||
self.module.report_note(*opts)
|
||||
end
|
||||
|
||||
def report_service(*s)
|
||||
self.module.report_service(*s)
|
||||
def report_service(*opts)
|
||||
self.module.report_service(*opts)
|
||||
end
|
||||
|
||||
def find_session(sessionid)
|
||||
@@ -184,39 +190,39 @@ class BaseProtocolParser
|
||||
purge_keys << ses
|
||||
end
|
||||
end
|
||||
purge_keys.each {|ses| sessions.delete(ses) }
|
||||
purge_keys.each { |ses| sessions.delete(ses) }
|
||||
|
||||
# Does this session already exist?
|
||||
if (sessions[sessionid])
|
||||
if sessions[sessionid]
|
||||
# Refresh the timestamp
|
||||
sessions[sessionid][:mtime] = Time.now
|
||||
else
|
||||
elsif (sessionid =~ /^([^:]+):([^-]+)-([^:]+):(\d+)$/s)
|
||||
# Create a new session entry along with the host/port from the id
|
||||
if (sessionid =~ /^([^:]+):([^-]+)-([^:]+):(\d+)$/s)
|
||||
sessions[sessionid] = {
|
||||
:client_host => $1,
|
||||
:client_port => $2,
|
||||
:host => $3,
|
||||
:port => $4,
|
||||
:session => sessionid,
|
||||
:ctime => Time.now,
|
||||
:mtime => Time.now
|
||||
}
|
||||
end
|
||||
sessions[sessionid] = {
|
||||
client_host: ::Regexp.last_match(1),
|
||||
client_port: ::Regexp.last_match(2),
|
||||
host: ::Regexp.last_match(3),
|
||||
port: ::Regexp.last_match(4),
|
||||
session: sessionid,
|
||||
ctime: Time.now,
|
||||
mtime: Time.now
|
||||
}
|
||||
end
|
||||
|
||||
sessions[sessionid]
|
||||
end
|
||||
|
||||
def get_session_src(pkt)
|
||||
return "%s:%d-%s:%d" % [pkt.ip_daddr,pkt.tcp_dport,pkt.ip_saddr,pkt.tcp_sport] if pkt.is_tcp?
|
||||
return "%s:%d-%s:%d" % [pkt.ip_daddr,pkt.udp_dport,pkt.ip_saddr,pkt.udp_sport] if pkt.is_udp?
|
||||
return "%s:%d-%s:%d" % [pkt.ip_daddr,0,pkt.ip_saddr,0]
|
||||
return "#{pkt.ip_daddr}:#{pkt.tcp_dport}-#{pkt.ip_saddr}-#{pkt.tcp_sport}" if pkt.is_tcp?
|
||||
return "#{pkt.ip_daddr}:#{pkt.udp_dport}-#{pkt.ip_saddr}-#{pkt.udp_sport}" if pkt.is_udp?
|
||||
|
||||
"#{pkt.ip_daddr}:0-#{pkt.ip_saddr}:0"
|
||||
end
|
||||
|
||||
def get_session_dst(pkt)
|
||||
return "%s:%d-%s:%d" % [pkt.ip_saddr,pkt.tcp_sport,pkt.ip_daddr,pkt.tcp_dport] if pkt.is_tcp?
|
||||
return "%s:%d-%s:%d" % [pkt.ip_saddr,pkt.udp_sport,pkt.ip_daddr,pkt.udp_dport] if pkt.is_udp?
|
||||
return "%s:%d-%s:%d" % [pkt.ip_saddr,0,pkt.ip_daddr,0]
|
||||
return "#{pkt.ip_saddr}:#{pkt.tcp_sport}-#{pkt.ip_daddr}:#{pkt.tcp_dport}" if pkt.is_tcp?
|
||||
return "#{pkt.ip_saddr}:#{pkt.udp_sport}-#{pkt.ip_daddr}:#{pkt.udp_dport}" if pkt.is_udp?
|
||||
|
||||
"#{pkt.ip_saddr}:0-#{pkt.ip_daddr}:0"
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user