wpscan 3.0.4 → 3.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: aec6c21b96dc11fe0d1de37121edb9d4cce6580e
4
- data.tar.gz: 9dfc21c798b02915e4e06815d6bc0808b0567f5a
3
+ metadata.gz: d9fd4bc758b868aa36848d44911b54335efdaefc
4
+ data.tar.gz: e02f0a0f89271384cd00a1d9ab760205c5bd1837
5
5
  SHA512:
6
- metadata.gz: 7dea9f1e9a2afc8240533a355690381b33f360aa658b3fd1135b94b25ccca86bfd60585dee81110147592737c060e13f4935112d5194b19b6af06d64e8870b20
7
- data.tar.gz: f79944aec35413d122216f01100e1d13e1ed3f575935bd4a4dac2331b2dc94a1fcb9dbbb4f230674ed815a5d358753c22e1cb4f5cb59eef3fe366c9ee8ba88df
6
+ metadata.gz: 955e80f693240687635f34d3b7081a302c452511e6d4191624edae196b7395f08759206b9aefc56f95449eccd5bdb9b91e6e48b613d9a27c681e1370759ed6bd
7
+ data.tar.gz: 9944fa88fba74980f74df6225dd47a2cf2d419eb02da52cf844f296ab729b58a3c7d747d623614bd950832a680352d5fbd9de0c3d0eb0e8dddae3bf46c17a57f
@@ -56,7 +56,6 @@ module WPScan
56
56
  # @param [ Array<String> ] passwords
57
57
  #
58
58
  # @yield [ User ] when a valid combination is found
59
- # rubocop:disable all
60
59
  def brute_force(users, passwords)
61
60
  hydra = Browser.instance.hydra
62
61
 
@@ -86,7 +85,6 @@ module WPScan
86
85
  hydra.run
87
86
  end
88
87
  end
89
- # rubocop:enable all
90
88
 
91
89
  def progress_bar(size, username)
92
90
  ProgressBar.create(
@@ -6,7 +6,7 @@ module WPScan
6
6
  # Enumeration Controller
7
7
  class Enumeration < CMSScanner::Controller::Base
8
8
  def before_scan
9
- # Create the Dynamic Finders
9
+ # Create the Dynamic PluginVersion Finders
10
10
  DB::DynamicPluginFinders.db_data.each do |name, config|
11
11
  %w[Comments].each do |klass|
12
12
  next unless config[klass] && config[klass]['version']
@@ -48,7 +48,17 @@ module WPScan
48
48
  'Use the supplied mode to enumerate Plugins, instead of the global (--detection-mode) mode.'],
49
49
  choices: %w[mixed passive aggressive], normalize: :to_sym
50
50
  ),
51
- OptBoolean.new(['--plugins-version-all', 'Check all the plugins version locations'])
51
+ OptBoolean.new(
52
+ ['--plugins-version-all',
53
+ 'Check all the plugins version locations according to the choosen mode (--detection-mode, ' \
54
+ '--plugins-detection and --plugins-version-detection)']
55
+ ),
56
+ OptChoice.new(
57
+ ['--plugins-version-detection MODE',
58
+ 'Use the supplied mode to check plugins versions instead of the --detection-mode ' \
59
+ 'or --plugins-detection modes.'],
60
+ choices: %w[mixed passive aggressive], normalize: :to_sym
61
+ )
52
62
  ]
53
63
  end
54
64
 
@@ -61,7 +71,17 @@ module WPScan
61
71
  'Use the supplied mode to enumerate Themes, instead of the global (--detection-mode) mode.'],
62
72
  choices: %w[mixed passive aggressive], normalize: :to_sym
63
73
  ),
64
- OptBoolean.new(['--themes-version-all', 'Check all the themes version locations'])
74
+ OptBoolean.new(
75
+ ['--themes-version-all',
76
+ 'Check all the themes version locations according to the choosen mode (--detection-mode, ' \
77
+ '--themes-detection and --themes-version-detection)']
78
+ ),
79
+ OptChoice.new(
80
+ ['--themes-version-detection MODE',
81
+ 'Use the supplied mode to check themes versions instead of the --detection-mode ' \
82
+ 'or --themes-detection modes.'],
83
+ choices: %w[mixed passive aggressive], normalize: :to_sym
84
+ )
65
85
  ]
66
86
  end
67
87
 
@@ -23,10 +23,16 @@ module WPScan
23
23
  #
24
24
  # @return [ Hash ]
25
25
  def default_opts(type)
26
+ mode = parsed_options[:"#{type}_detection"] || parsed_options[:detection_mode]
27
+
26
28
  {
27
- mode: parsed_options[:"#{type}_detection"] || parsed_options[:detection_mode],
29
+ mode: mode,
28
30
  exclude_content: parsed_options[:exclude_content_based],
29
- show_progression: user_interaction?
31
+ show_progression: user_interaction?,
32
+ version_detection: {
33
+ mode: parsed_options[:"#{type}_version_detection"] || mode,
34
+ confidence_threshold: parsed_options[:"#{type}_version_all"] ? 0 : 100
35
+ }
30
36
  }
31
37
  end
32
38
 
@@ -40,7 +46,6 @@ module WPScan
40
46
  def enum_plugins
41
47
  opts = default_opts('plugins').merge(
42
48
  list: plugins_list_from_opts(parsed_options),
43
- version_all: parsed_options[:plugins_version_all],
44
49
  sort: true
45
50
  )
46
51
 
@@ -79,7 +84,6 @@ module WPScan
79
84
  def enum_themes
80
85
  opts = default_opts('themes').merge(
81
86
  list: themes_list_from_opts(parsed_options),
82
- version_all: parsed_options[:themes_version_all],
83
87
  sort: true
84
88
  )
85
89
 
@@ -116,7 +120,7 @@ module WPScan
116
120
  end
117
121
 
118
122
  def enum_config_backups
119
- opts = default_opts('config_baclups').merge(list: parsed_options[:config_backups_list])
123
+ opts = default_opts('config_backups').merge(list: parsed_options[:config_backups_list])
120
124
 
121
125
  output('@info', msg: 'Enumerating Config Backups') if user_interaction?
122
126
  output('config_backups', config_backups: target.config_backups(opts))
@@ -9,6 +9,7 @@ require_relative 'interesting_findings/upload_sql_dump'
9
9
  require_relative 'interesting_findings/full_path_disclosure'
10
10
  require_relative 'interesting_findings/duplicator_installer_log'
11
11
  require_relative 'interesting_findings/upload_directory_listing'
12
+ require_relative 'interesting_findings/emergency_pwd_reset_script'
12
13
 
13
14
  module WPScan
14
15
  module Finders
@@ -22,7 +23,7 @@ module WPScan
22
23
  %w[
23
24
  Readme DebugLog FullPathDisclosure BackupDB DuplicatorInstallerLog
24
25
  Multisite MuPlugins Registration UploadDirectoryListing TmmDbMigrate
25
- UploadSQLDump
26
+ UploadSQLDump EmergencyPwdResetScript
26
27
  ].each do |f|
27
28
  finders << InterestingFindings.const_get(f).new(target)
28
29
  end
@@ -0,0 +1,25 @@
1
+ module WPScan
2
+ module Finders
3
+ module InterestingFindings
4
+ # Emergency Password Reset Script finder
5
+ class EmergencyPwdResetScript < CMSScanner::Finders::Finder
6
+ # @return [ InterestingFinding ]
7
+ def aggressive(_opts = {})
8
+ url = target.url('/emergency.php')
9
+ res = Browser.get(url)
10
+
11
+ return unless res.code == 200 && !target.homepage_or_404?(res)
12
+
13
+ WPScan::InterestingFinding.new(
14
+ url,
15
+ confidence: res.body =~ /password/i ? 100 : 40,
16
+ found_by: DIRECT_ACCESS,
17
+ references: {
18
+ url: 'https://codex.wordpress.org/Resetting_Your_Password#Using_the_Emergency_Password_Reset_Script'
19
+ }
20
+ )
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
data/app/models/plugin.rb CHANGED
@@ -17,7 +17,7 @@ module WPScan
17
17
  #
18
18
  # @return [ WPScan::Version, false ]
19
19
  def version(opts = {})
20
- @version = Finders::PluginVersion::Base.find(self, detection_opts.merge(opts)) if @version.nil?
20
+ @version = Finders::PluginVersion::Base.find(self, version_detection_opts.merge(opts)) if @version.nil?
21
21
 
22
22
  @version
23
23
  end
data/app/models/theme.rb CHANGED
@@ -23,7 +23,7 @@ module WPScan
23
23
  #
24
24
  # @return [ WPScan::Version, false ]
25
25
  def version(opts = {})
26
- @version = Finders::ThemeVersion::Base.find(self, detection_opts.merge(opts)) if @version.nil?
26
+ @version = Finders::ThemeVersion::Base.find(self, version_detection_opts.merge(opts)) if @version.nil?
27
27
 
28
28
  @version
29
29
  end
@@ -37,7 +37,7 @@ module WPScan
37
37
  style_url: url(Regexp.last_match[1]),
38
38
  found_by: 'Parent Themes (Passive Detection)',
39
39
  confidence: 100
40
- )
40
+ ).merge(version_detection: version_detection_opts)
41
41
 
42
42
  self.class.new(template, target, opts)
43
43
  end
@@ -3,16 +3,15 @@ module WPScan
3
3
  class Timthumb < InterestingFinding
4
4
  include Vulnerable
5
5
 
6
- # Opts used to detect the version
7
- attr_reader :detection_opts
6
+ attr_reader :version_detection_opts
8
7
 
9
8
  # @param [ String ] url
10
9
  # @param [ Hash ] opts
11
- # @option opts [ String ] :detection_mode
10
+ # @option opts [ Symbol ] :mode The mode to use to detect the version
12
11
  def initialize(url, opts = {})
13
12
  super(url, opts)
14
13
 
15
- @detection_opts = { mode: opts[:mode] }
14
+ @version_detection_opts = opts[:version_detection] || {}
16
15
  end
17
16
 
18
17
  # @param [ Hash ] opts
@@ -20,7 +19,7 @@ module WPScan
20
19
  # @return [ WPScan::Version, false ]
21
20
  def version(opts = {})
22
21
  if @version.nil?
23
- @version = Finders::TimthumbVersion::Base.find(self, detection_opts.merge(opts))
22
+ @version = Finders::TimthumbVersion::Base.find(self, version_detection_opts.merge(opts))
24
23
  end
25
24
 
26
25
  @version
@@ -9,21 +9,21 @@ module WPScan
9
9
  READMES = %w[readme.txt README.txt Readme.txt ReadMe.txt README.TXT readme.TXT].freeze
10
10
  CHANGELOGS = %w[changelog.txt Changelog.txt ChangeLog.txt CHANGELOG.txt].freeze
11
11
 
12
- attr_reader :uri, :name, :detection_opts, :target, :db_data
12
+ attr_reader :uri, :name, :detection_opts, :version_detection_opts, :target, :db_data
13
13
 
14
14
  # @param [ String ] name The plugin/theme name
15
15
  # @param [ Target ] target The targeted blog
16
16
  # @param [ Hash ] opts
17
- # @option opts [ String ] :detection_mode
18
- # @option opts [ Boolean ] :version_all Wether or not to
17
+ # @option opts [ Symbol ] :mode The detection mode to use
18
+ # @option opts [ Hash ] :version_detection The options to use when looking for the version
19
19
  # @option opts [ String ] :url The URL of the item
20
20
  def initialize(name, target, opts = {})
21
21
  @name = URI.decode(name)
22
22
  @target = target
23
23
  @uri = Addressable::URI.parse(opts[:url]) if opts[:url]
24
24
 
25
- # Options used to detect the version
26
- @detection_opts = { mode: opts[:mode], confidence_threshold: opts[:version_all] ? 0 : 100 }
25
+ @detection_opts = { mode: opts[:mode] }
26
+ @version_detection_opts = opts[:version_detection] || {}
27
27
 
28
28
  parse_finding_options(opts)
29
29
  end
@@ -1,8 +1,8 @@
1
1
 
2
2
  <% if @config_backups.empty? -%>
3
- <%= notice_icon %> No Backups Found.
3
+ <%= notice_icon %> No Config Backups Found.
4
4
  <% else -%>
5
- <%= notice_icon %> Backup(s) Identified:
5
+ <%= notice_icon %> Config Backup(s) Identified:
6
6
  <% @config_backups.each do |config_backup| -%>
7
7
 
8
8
  <%= info_icon %> <%= config_backup %>
@@ -112,7 +112,6 @@ module WPScan
112
112
  local_file_checksum(filename)
113
113
  end
114
114
 
115
- # rubocop:disable MethodLength
116
115
  # @return [ Array<String> ] The filenames updated
117
116
  def update
118
117
  updated = []
@@ -141,7 +140,6 @@ module WPScan
141
140
 
142
141
  updated
143
142
  end
144
- # rubocop:enable MethodLength
145
143
  end
146
144
  end
147
145
  # :nocov:
@@ -1,4 +1,4 @@
1
1
  # Version
2
2
  module WPScan
3
- VERSION = '3.0.4'.freeze
3
+ VERSION = '3.0.5'.freeze
4
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wpscan
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.4
4
+ version: 3.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - WPScanTeam
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-09-26 00:00:00.000000000 Z
11
+ date: 2017-10-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cms_scanner
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.0.37.10
19
+ version: 0.0.37.11
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 0.0.37.10
26
+ version: 0.0.37.11
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: yajl-ruby
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -247,6 +247,7 @@ files:
247
247
  - app/finders/interesting_findings/backup_db.rb
248
248
  - app/finders/interesting_findings/debug_log.rb
249
249
  - app/finders/interesting_findings/duplicator_installer_log.rb
250
+ - app/finders/interesting_findings/emergency_pwd_reset_script.rb
250
251
  - app/finders/interesting_findings/full_path_disclosure.rb
251
252
  - app/finders/interesting_findings/mu_plugins.rb
252
253
  - app/finders/interesting_findings/multisite.rb