From 43a797b36a3758bd10d147be40bb64fa73b653cf Mon Sep 17 00:00:00 2001 From: Brendan Coles Date: Fri, 25 Mar 2016 20:58:17 +0000 Subject: [PATCH] Re-order BeEF::Filters.is_valid_ip arguments with optional last --- core/filters/base.rb | 59 +++++++++++++++++++---------------------- extensions/dns/model.rb | 8 +++--- 2 files changed, 32 insertions(+), 35 deletions(-) diff --git a/core/filters/base.rb b/core/filters/base.rb index 2230c3a63..ff26bd47a 100644 --- a/core/filters/base.rb +++ b/core/filters/base.rb @@ -99,45 +99,42 @@ module Filters only?("a-zA-Z0-9", str) end - # @overload self.is_valid_ip?(version, ip) + # @overload self.is_valid_ip?(ip, version) # Checks if the given string is a valid IP address - # @param [Symbol] version IP version (either :ipv4 or :ipv6) # @param [String] ip string to be tested + # @param [Symbol] version IP version (either :ipv4 or :ipv6) # @return [Boolean] true if the string is a valid IP address, otherwise false # # @overload self.is_valid_ip?(ip) # Checks if the given string is either a valid IPv4 or IPv6 address # @param [String] ip string to be tested # @return [Boolean] true if the string is a valid IPv4 or IPV6 address, otherwise false - def self.is_valid_ip?(version = :both, ip) - valid = false - - if is_non_empty_string?(ip) - valid = case version.inspect.downcase - when /^:ipv4$/ - ip =~ /^((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3} - (25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])$/x - when /^:ipv6$/ - ip =~ /^(([0-9a-f]{1,4}:){7,7}[0-9a-f]{1,4}| - ([0-9a-f]{1,4}:){1,7}:| - ([0-9a-f]{1,4}:){1,6}:[0-9a-f]{1,4}| - ([0-9a-f]{1,4}:){1,5}(:[0-9a-f]{1,4}){1,2}| - ([0-9a-f]{1,4}:){1,4}(:[0-9a-f]{1,4}){1,3}| - ([0-9a-f]{1,4}:){1,3}(:[0-9a-f]{1,4}){1,4}| - ([0-9a-f]{1,4}:){1,2}(:[0-9a-f]{1,4}){1,5}| - [0-9a-f]{1,4}:((:[0-9a-f]{1,4}){1,6})| - :((:[0-9a-f]{1,4}){1,7}|:)| - fe80:(:[0-9a-f]{0,4}){0,4}%[0-9a-z]{1,}| - ::(ffff(:0{1,4}){0,1}:){0,1} - ((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3} - (25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])| - ([0-9a-f]{1,4}:){1,4}: - ((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3} - (25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/ix - when /^:both$/ - is_valid_ip?(:ipv4, ip) || is_valid_ip?(:ipv6, ip) - end ? true : false - end + def self.is_valid_ip?(ip, version = :both) + return false unless is_non_empty_string?(ip) + valid = case version.inspect.downcase + when /^:ipv4$/ + ip =~ /^((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3} + (25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])$/x + when /^:ipv6$/ + ip =~ /^(([0-9a-f]{1,4}:){7,7}[0-9a-f]{1,4}| + ([0-9a-f]{1,4}:){1,7}:| + ([0-9a-f]{1,4}:){1,6}:[0-9a-f]{1,4}| + ([0-9a-f]{1,4}:){1,5}(:[0-9a-f]{1,4}){1,2}| + ([0-9a-f]{1,4}:){1,4}(:[0-9a-f]{1,4}){1,3}| + ([0-9a-f]{1,4}:){1,3}(:[0-9a-f]{1,4}){1,4}| + ([0-9a-f]{1,4}:){1,2}(:[0-9a-f]{1,4}){1,5}| + [0-9a-f]{1,4}:((:[0-9a-f]{1,4}){1,6})| + :((:[0-9a-f]{1,4}){1,7}|:)| + fe80:(:[0-9a-f]{0,4}){0,4}%[0-9a-z]{1,}| + ::(ffff(:0{1,4}){0,1}:){0,1} + ((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3} + (25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])| + ([0-9a-f]{1,4}:){1,4}: + ((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3} + (25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/ix + when /^:both$/ + is_valid_ip?(ip, :ipv4) || is_valid_ip?(ip, :ipv6) + end ? true : false valid end diff --git a/extensions/dns/model.rb b/extensions/dns/model.rb index d4f86ed77..da78c46a2 100644 --- a/extensions/dns/model.rb +++ b/extensions/dns/model.rb @@ -51,7 +51,7 @@ module BeEF sym_regex = /^:?(NoError|FormErr|ServFail|NXDomain|NotImp|Refused|NotAuth)$/i src = if resource == Resolv::DNS::Resource::IN::A - if response.is_a?(String) && BeEF::Filters.is_valid_ip?(:ipv4, response) + if response.is_a?(String) && BeEF::Filters.is_valid_ip?(response, :ipv4) sprintf "t.respond!('%s')", response elsif (response.is_a?(Symbol) && response.to_s =~ sym_regex) || response =~ sym_regex sprintf "t.fail!(:%s)", response.to_sym @@ -60,7 +60,7 @@ module BeEF str2 = '' response.each do |r| - raise InvalidDnsResponseError, 'A' unless BeEF::Filters.is_valid_ip?(:ipv4, r) + raise InvalidDnsResponseError, 'A' unless BeEF::Filters.is_valid_ip?(r, :ipv4) str2 << sprintf(str1, r) end @@ -69,7 +69,7 @@ module BeEF raise InvalidDnsResponseError, 'A' end elsif resource == Resolv::DNS::Resource::IN::AAAA - if response.is_a?(String) && BeEF::Filters.is_valid_ip?(:ipv6, response) + if response.is_a?(String) && BeEF::Filters.is_valid_ip?(response, :ipv6) sprintf "t.respond!('%s')", response elsif (response.is_a?(Symbol) && response.to_s =~ sym_regex) || response =~ sym_regex sprintf "t.fail!(:%s)", response.to_sym @@ -78,7 +78,7 @@ module BeEF str2 = '' response.each do |r| - raise InvalidDnsResponseError, 'AAAA' unless BeEF::Filters.is_valid_ip?(:ipv6, r) + raise InvalidDnsResponseError, 'AAAA' unless BeEF::Filters.is_valid_ip?(r, :ipv6) str2 << sprintf(str1, r) end