wpxf 2.0.0a → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 88cc61a49c99dadfe784503e10bb8850a9fa9783c86ca951aad98fe86878ea51
4
- data.tar.gz: 4e3b3df123398881ea918dfc2a7f6c2a2279cb632ca9879eecbdf7f13c96c5b7
3
+ metadata.gz: 2e6dc34b56da0fd68db342c296a60346337584ccccf3c1c03b54122e9f5bb164
4
+ data.tar.gz: 494ef8fd8cdae9d0e7989124005647cfe48c6fe431510d2a0c5e402ff4bd155e
5
5
  SHA512:
6
- metadata.gz: '000349eeaceaf3bd40b0b23861e8fd7ae5c231cda8fd079739d253abcd8e28a492d0e3915b1393b57ed6d498cb23095165d911763ed713b4b5c7b18cfe362fa9'
7
- data.tar.gz: 4157996c7c90b62994c9a0186f198bd7efbf4584245a600a928c8896c875a1f14d4c61bca0d7450c2ddff645e19bbe6a0a5e87336a43b08ed23fb9711b25634e
6
+ metadata.gz: d35e6556e102cdea7ac5d43b35b17dec338e2390f81b7977caf4a78de088a112e67f0be0295915f68004026c79d0e89067b4c422b705d17d4bd1256add2e699b
7
+ data.tar.gz: 5a10159e78df9016a51771f5eb9a123dd1abd5d6698d02d0923488949c445114aed24064e27710583600f08e661b4ddbcec5a30504d92525694a2d9efd5918e4
@@ -45,6 +45,7 @@ module Wpxf
45
45
  print_warning 'Refreshing the module cache...'
46
46
 
47
47
  Wpxf::Models::Module.truncate
48
+ Wpxf.load_custom_modules
48
49
 
49
50
  create_module_models 'exploit'
50
51
  create_module_models 'auxiliary'
@@ -1,19 +1,36 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Wpxf
4
- def self.build_module_list(namespace, folder_name = '')
4
+ def self.modules_path
5
+ File.join(Wpxf.app_path, 'lib', 'wpxf', 'modules')
6
+ end
7
+
8
+ def self.custom_modules_path
9
+ File.join(Wpxf.home_directory, 'modules')
10
+ end
11
+
12
+ def self.payloads_path
13
+ File.join(Wpxf.app_path, 'lib', 'wpxf', 'payloads')
14
+ end
15
+
16
+ def self.build_module_list(namespace, source_folders = [])
5
17
  modules = namespace.constants.select do |c|
6
18
  namespace.const_get(c).is_a? Class
7
19
  end
8
20
 
9
- modules_directory = File.join(Wpxf.app_path, 'lib', 'wpxf', folder_name)
10
-
11
21
  modules.map do |m|
12
22
  klass = namespace.const_get(m)
13
23
  filename = klass.new.method(:initialize).source_location[0]
24
+
25
+ # Remove any source folders from the path and store the
26
+ # relative path that will be used in the CLI.
27
+ source_folders.each do |source_folder|
28
+ filename = filename.sub(source_folder, '')
29
+ end
30
+
14
31
  {
15
32
  class: klass,
16
- name: filename.sub(modules_directory, '').sub(/^\//, '').sub(/\.rb$/, '')
33
+ name: filename.sub(/^\//, '').sub(/\.rb$/, '')
17
34
  }
18
35
  end
19
36
  end
@@ -24,15 +41,20 @@ module Wpxf
24
41
  Object.const_get(mod.class_name).new
25
42
  end
26
43
 
44
+ def self.load_custom_modules
45
+ custom_modules_path = File.join(Wpxf.home_directory, 'modules', '**', '*.rb')
46
+ Dir.glob(custom_modules_path).each { |p| load p }
47
+ end
48
+
27
49
  module Auxiliary
28
50
  def self.module_list
29
- Wpxf.build_module_list(Wpxf::Auxiliary, 'modules')
51
+ Wpxf.build_module_list(Wpxf::Auxiliary, [Wpxf.modules_path, Wpxf.custom_modules_path])
30
52
  end
31
53
  end
32
54
 
33
55
  module Exploit
34
56
  def self.module_list
35
- Wpxf.build_module_list(Wpxf::Exploit, 'modules')
57
+ Wpxf.build_module_list(Wpxf::Exploit, [Wpxf.modules_path, Wpxf.custom_modules_path])
36
58
  end
37
59
  end
38
60
 
@@ -46,7 +68,7 @@ module Wpxf
46
68
  end
47
69
 
48
70
  def self.payload_list
49
- @@payloads ||= Wpxf.build_module_list(Wpxf::Payloads, 'payloads')
71
+ @@payloads ||= Wpxf.build_module_list(Wpxf::Payloads, [Wpxf.payloads_path])
50
72
  end
51
73
 
52
74
  def self.load_payload(name)
@@ -60,3 +82,5 @@ end
60
82
  require_rel 'modules/auxiliary'
61
83
  require_rel 'modules/exploit'
62
84
  require_rel 'payloads'
85
+
86
+ Wpxf.load_custom_modules
@@ -37,7 +37,10 @@ class Wpxf::Auxiliary::WpHideSecurityEnhancerFileDownload < Wpxf::Module
37
37
  end
38
38
 
39
39
  def download_request_params
40
- { 'action' => 'style-clean', 'file_path' => "/#{remote_file}" }
40
+ {
41
+ 'action' => 'style-clean',
42
+ 'file_path' => "/#{remote_file}"
43
+ }
41
44
  end
42
45
 
43
46
  def validate_content(content)
@@ -80,8 +80,7 @@ class Wpxf::Auxiliary::WpMarketplaceV24FileDownload < Wpxf::Module
80
80
  cookie: session_cookie
81
81
  )
82
82
 
83
- return nil if !res || res.code != 200
84
- nonce = res.body[/name="__product_wpmp" value="([^"]+)"/i, 1]
83
+ nonce = res.body[/name="__product_wpmp" value="([^"]+)"/i, 1] if res&.code == 200
85
84
 
86
85
  unless nonce
87
86
  emit_error 'Failed to acquire a download nonce'
@@ -122,7 +121,7 @@ class Wpxf::Auxiliary::WpMarketplaceV24FileDownload < Wpxf::Module
122
121
  return false unless @nonce
123
122
 
124
123
  emit_info "Acquired nonce \"#{@nonce}\"", true
125
- @download_id = "1#{Utility::Text.rand_numeric(5)}"
124
+ self.download_id = "1#{Utility::Text.rand_numeric(5)}"
126
125
 
127
126
  create_product
128
127
  end
@@ -136,6 +135,8 @@ class Wpxf::Auxiliary::WpMarketplaceV24FileDownload < Wpxf::Module
136
135
  end
137
136
 
138
137
  def download_request_params
139
- { 'wpmpfile' => @download_id }
138
+ { 'wpmpfile' => download_id }
140
139
  end
140
+
141
+ attr_accessor :download_id
141
142
  end
@@ -2,8 +2,8 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = 'wpxf'
5
- s.version = '2.0.0a'
6
- s.date = '2018-07-12'
5
+ s.version = '2.0.0'
6
+ s.date = '2018-07-14'
7
7
  s.summary = 'WordPress Exploit Framework'
8
8
  s.description = 'A Ruby framework designed to aid in the penetration testing of WordPress systems'
9
9
  s.authors = ['rastating']
@@ -17,10 +17,9 @@ Gem::Specification.new do |s|
17
17
  s.add_dependency 'colorize', '~> 0.8'
18
18
  s.add_dependency 'mime-types', '~> 3.1'
19
19
  s.add_dependency 'nokogiri', '~> 1.8'
20
- s.add_dependency 'rake', '~> 12.3'
21
20
  s.add_dependency 'require_all', '~> 2.0'
22
21
  s.add_dependency 'rubyzip', '~> 1.2'
23
- s.add_dependency 'sequel', '~> 5.9'
22
+ s.add_dependency 'sequel', '~> 5.11'
24
23
  s.add_dependency 'slop', '~> 4.6'
25
24
  s.add_dependency 'sqlite3', '~> 1.3'
26
25
  s.add_dependency 'typhoeus', '~> 1.3'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wpxf
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0a
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - rastating
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-07-12 00:00:00.000000000 Z
11
+ date: 2018-07-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: colorize
@@ -52,20 +52,6 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '1.8'
55
- - !ruby/object:Gem::Dependency
56
- name: rake
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: '12.3'
62
- type: :runtime
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - "~>"
67
- - !ruby/object:Gem::Version
68
- version: '12.3'
69
55
  - !ruby/object:Gem::Dependency
70
56
  name: require_all
71
57
  requirement: !ruby/object:Gem::Requirement
@@ -100,14 +86,14 @@ dependencies:
100
86
  requirements:
101
87
  - - "~>"
102
88
  - !ruby/object:Gem::Version
103
- version: '5.9'
89
+ version: '5.11'
104
90
  type: :runtime
105
91
  prerelease: false
106
92
  version_requirements: !ruby/object:Gem::Requirement
107
93
  requirements:
108
94
  - - "~>"
109
95
  - !ruby/object:Gem::Version
110
- version: '5.9'
96
+ version: '5.11'
111
97
  - !ruby/object:Gem::Dependency
112
98
  name: slop
113
99
  requirement: !ruby/object:Gem::Requirement
@@ -696,9 +682,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
696
682
  version: 2.4.4
697
683
  required_rubygems_version: !ruby/object:Gem::Requirement
698
684
  requirements:
699
- - - ">"
685
+ - - ">="
700
686
  - !ruby/object:Gem::Version
701
- version: 1.3.1
687
+ version: '0'
702
688
  requirements: []
703
689
  rubyforge_project:
704
690
  rubygems_version: 2.7.6