Class: WPScan::Finders::DynamicFinder::Finder

Inherits:
CMSScanner::Finders::Finder
  • Object
show all
Defined in:
lib/wpscan/finders/dynamic_finder/finder.rb

Overview

To be used as a base when creating a dynamic finder

Direct Known Subclasses

Version::Finder

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.child_class_constant(*args) ⇒ Object

Parameters:

  • args (Array)


9
10
11
12
13
14
15
16
17
# File 'lib/wpscan/finders/dynamic_finder/finder.rb', line 9

def self.child_class_constant(*args)
  args.each do |arg|
    if arg.is_a?(Hash)
      child_class_constants.merge!(arg)
    else
      child_class_constants[arg] = nil
    end
  end
end

.child_class_constantsHash

Needed to have inheritance of the @child_class_constants If inheritance is not needed, then the #child_class_constant can be used in the classe definition, ie

child_class_constant :FILES, PATTERN: /aaa/i

Returns:

  • (Hash)


23
24
25
# File 'lib/wpscan/finders/dynamic_finder/finder.rb', line 23

def self.child_class_constants
  @child_class_constants ||= { PATH: nil }
end

.create_child_class(mod, klass, config) ⇒ Object

Parameters:

  • mod (Constant)
  • klass (Constant)
  • config (Hash)


30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/wpscan/finders/dynamic_finder/finder.rb', line 30

def self.create_child_class(mod, klass, config)
  # Can't use the #child_class_constants directly in the Class.new(self) do; end below
  class_constants = child_class_constants

  mod.const_set(
    klass, Class.new(self) do
      class_constants.each do |key, value|
        const_set(key, config[key.downcase.to_s] || value)
      end
    end
  )
end

Instance Method Details

#aggressive(opts = {}) ⇒ Mixed

Returns See #find.

Parameters:

  • opts (Hash) (defaults to: {})

Returns:

  • (Mixed)

    See #find



68
69
70
71
72
# File 'lib/wpscan/finders/dynamic_finder/finder.rb', line 68

def aggressive(opts = {})
  return unless self.class::PATH

  find(Browser.get(target.url(self.class::PATH)), opts)
end

#find(_response, _opts = {}) ⇒ Mixed: nil, ...

This method has to be overriden in child classes

Parameters:

Returns:

  • (Mixed: nil, Object, Array)

Raises:

  • (NoMethodError)


48
49
50
# File 'lib/wpscan/finders/dynamic_finder/finder.rb', line 48

def find(_response, _opts = {})
  raise NoMethodError
end

#passive(opts = {}) ⇒ Mixed

Returns See #find.

Parameters:

  • opts (Hash) (defaults to: {})

Returns:

  • (Mixed)

    See #find



54
55
56
57
58
59
60
61
62
63
64
# File 'lib/wpscan/finders/dynamic_finder/finder.rb', line 54

def passive(opts = {})
  return if self.class::PATH

  homepage_result = find(target.homepage_res, opts)

  if homepage_result
    return homepage_result unless homepage_result.is_a?(Array) && homepage_result.empty?
  end

  find(target.error_404_res, opts)
end