modules/auxiliary/sniffer: Resolve RuboCop violations

This commit is contained in:
bcoles
2025-05-15 20:38:04 +10:00
parent 59a8798dd5
commit da261da015
+50 -44
View File
@@ -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