wpscan 3.0

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.
Files changed (180) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile.lock +139 -0
  3. data/LICENSE +74 -0
  4. data/README.md +146 -0
  5. data/app/app.rb +3 -0
  6. data/app/controllers.rb +6 -0
  7. data/app/controllers/brute_force.rb +126 -0
  8. data/app/controllers/core.rb +104 -0
  9. data/app/controllers/custom_directories.rb +23 -0
  10. data/app/controllers/enumeration.rb +53 -0
  11. data/app/controllers/enumeration/cli_options.rb +126 -0
  12. data/app/controllers/enumeration/enum_methods.rb +157 -0
  13. data/app/controllers/main_theme.rb +27 -0
  14. data/app/controllers/wp_version.rb +30 -0
  15. data/app/finders.rb +13 -0
  16. data/app/finders/config_backups.rb +17 -0
  17. data/app/finders/config_backups/known_filenames.rb +46 -0
  18. data/app/finders/interesting_findings.rb +33 -0
  19. data/app/finders/interesting_findings/backup_db.rb +25 -0
  20. data/app/finders/interesting_findings/debug_log.rb +20 -0
  21. data/app/finders/interesting_findings/duplicator_installer_log.rb +23 -0
  22. data/app/finders/interesting_findings/full_path_disclosure.rb +23 -0
  23. data/app/finders/interesting_findings/mu_plugins.rb +48 -0
  24. data/app/finders/interesting_findings/multisite.rb +29 -0
  25. data/app/finders/interesting_findings/readme.rb +26 -0
  26. data/app/finders/interesting_findings/registration.rb +31 -0
  27. data/app/finders/interesting_findings/tmm_db_migrate.rb +24 -0
  28. data/app/finders/interesting_findings/upload_directory_listing.rb +24 -0
  29. data/app/finders/interesting_findings/upload_sql_dump.rb +28 -0
  30. data/app/finders/main_theme.rb +22 -0
  31. data/app/finders/main_theme/css_style.rb +43 -0
  32. data/app/finders/main_theme/urls_in_homepage.rb +25 -0
  33. data/app/finders/main_theme/woo_framework_meta_generator.rb +22 -0
  34. data/app/finders/medias.rb +17 -0
  35. data/app/finders/medias/attachment_brute_forcing.rb +44 -0
  36. data/app/finders/plugin_version.rb +44 -0
  37. data/app/finders/plugin_version/layer_slider/translation_file.rb +40 -0
  38. data/app/finders/plugin_version/readme.rb +79 -0
  39. data/app/finders/plugin_version/revslider/release_log.rb +35 -0
  40. data/app/finders/plugin_version/sitepress_multilingual_cms/meta_generator.rb +27 -0
  41. data/app/finders/plugin_version/sitepress_multilingual_cms/version_parameter.rb +31 -0
  42. data/app/finders/plugin_version/w3_total_cache/headers.rb +28 -0
  43. data/app/finders/plugins.rb +24 -0
  44. data/app/finders/plugins/comments.rb +31 -0
  45. data/app/finders/plugins/headers.rb +36 -0
  46. data/app/finders/plugins/known_locations.rb +48 -0
  47. data/app/finders/plugins/urls_in_homepage.rb +29 -0
  48. data/app/finders/theme_version.rb +41 -0
  49. data/app/finders/theme_version/style.rb +43 -0
  50. data/app/finders/theme_version/woo_framework_meta_generator.rb +19 -0
  51. data/app/finders/themes.rb +20 -0
  52. data/app/finders/themes/known_locations.rb +48 -0
  53. data/app/finders/themes/urls_in_homepage.rb +23 -0
  54. data/app/finders/timthumb_version.rb +17 -0
  55. data/app/finders/timthumb_version/bad_request.rb +21 -0
  56. data/app/finders/timthumbs.rb +17 -0
  57. data/app/finders/timthumbs/known_locations.rb +56 -0
  58. data/app/finders/users.rb +24 -0
  59. data/app/finders/users/author_id_brute_forcing.rb +111 -0
  60. data/app/finders/users/author_posts.rb +61 -0
  61. data/app/finders/users/login_error_messages.rb +50 -0
  62. data/app/finders/users/wp_json_api.rb +31 -0
  63. data/app/finders/wp_items.rb +1 -0
  64. data/app/finders/wp_items/urls_in_homepage.rb +68 -0
  65. data/app/finders/wp_version.rb +34 -0
  66. data/app/finders/wp_version/atom_generator.rb +40 -0
  67. data/app/finders/wp_version/meta_generator.rb +27 -0
  68. data/app/finders/wp_version/opml_generator.rb +23 -0
  69. data/app/finders/wp_version/rdf_generator.rb +38 -0
  70. data/app/finders/wp_version/readme.rb +28 -0
  71. data/app/finders/wp_version/rss_generator.rb +43 -0
  72. data/app/finders/wp_version/sitemap_generator.rb +23 -0
  73. data/app/finders/wp_version/stylesheets.rb +55 -0
  74. data/app/finders/wp_version/unique_fingerprinting.rb +64 -0
  75. data/app/models.rb +10 -0
  76. data/app/models/config_backup.rb +5 -0
  77. data/app/models/interesting_finding.rb +6 -0
  78. data/app/models/media.rb +5 -0
  79. data/app/models/plugin.rb +25 -0
  80. data/app/models/theme.rb +99 -0
  81. data/app/models/timthumb.rb +74 -0
  82. data/app/models/user.rb +31 -0
  83. data/app/models/wp_item.rb +142 -0
  84. data/app/models/wp_version.rb +49 -0
  85. data/app/models/xml_rpc.rb +19 -0
  86. data/app/views/cli/brute_force/error.erb +1 -0
  87. data/app/views/cli/brute_force/found.erb +2 -0
  88. data/app/views/cli/brute_force/users.erb +9 -0
  89. data/app/views/cli/core/banner.erb +14 -0
  90. data/app/views/cli/core/db_update_finished.erb +8 -0
  91. data/app/views/cli/core/db_update_started.erb +1 -0
  92. data/app/views/cli/core/not_fully_configured.erb +1 -0
  93. data/app/views/cli/enumeration/config_backups.erb +11 -0
  94. data/app/views/cli/enumeration/medias.erb +11 -0
  95. data/app/views/cli/enumeration/plugins.erb +35 -0
  96. data/app/views/cli/enumeration/themes.erb +11 -0
  97. data/app/views/cli/enumeration/timthumbs.erb +18 -0
  98. data/app/views/cli/enumeration/users.erb +11 -0
  99. data/app/views/cli/finding.erb +32 -0
  100. data/app/views/cli/info.erb +1 -0
  101. data/app/views/cli/main_theme/theme.erb +6 -0
  102. data/app/views/cli/notice.erb +1 -0
  103. data/app/views/cli/theme.erb +64 -0
  104. data/app/views/cli/usage.erb +3 -0
  105. data/app/views/cli/vulnerability.erb +14 -0
  106. data/app/views/cli/wp_version/version.erb +6 -0
  107. data/app/views/json/brute_force/users.erb +10 -0
  108. data/app/views/json/core/banner.erb +12 -0
  109. data/app/views/json/core/db_update_finished.erb +2 -0
  110. data/app/views/json/core/db_update_started.erb +1 -0
  111. data/app/views/json/core/not_fully_configured.erb +1 -0
  112. data/app/views/json/enumeration/config_backups.erb +10 -0
  113. data/app/views/json/enumeration/medias.erb +10 -0
  114. data/app/views/json/enumeration/plugins.erb +25 -0
  115. data/app/views/json/enumeration/themes.erb +10 -0
  116. data/app/views/json/enumeration/timthumbs.erb +19 -0
  117. data/app/views/json/enumeration/users.erb +11 -0
  118. data/app/views/json/finding.erb +26 -0
  119. data/app/views/json/main_theme/theme.erb +7 -0
  120. data/app/views/json/theme.erb +38 -0
  121. data/app/views/json/wp_version/version.erb +8 -0
  122. data/bin/wpscan +15 -0
  123. data/coverage/assets/0.10.0/application.css +799 -0
  124. data/coverage/assets/0.10.0/application.js +1707 -0
  125. data/coverage/assets/0.10.0/colorbox/border.png +0 -0
  126. data/coverage/assets/0.10.0/colorbox/controls.png +0 -0
  127. data/coverage/assets/0.10.0/colorbox/loading.gif +0 -0
  128. data/coverage/assets/0.10.0/colorbox/loading_background.png +0 -0
  129. data/coverage/assets/0.10.0/favicon_green.png +0 -0
  130. data/coverage/assets/0.10.0/favicon_red.png +0 -0
  131. data/coverage/assets/0.10.0/favicon_yellow.png +0 -0
  132. data/coverage/assets/0.10.0/loading.gif +0 -0
  133. data/coverage/assets/0.10.0/magnify.png +0 -0
  134. data/coverage/assets/0.10.0/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  135. data/coverage/assets/0.10.0/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  136. data/coverage/assets/0.10.0/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  137. data/coverage/assets/0.10.0/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  138. data/coverage/assets/0.10.0/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  139. data/coverage/assets/0.10.0/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  140. data/coverage/assets/0.10.0/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  141. data/coverage/assets/0.10.0/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  142. data/coverage/assets/0.10.0/smoothness/images/ui-icons_222222_256x240.png +0 -0
  143. data/coverage/assets/0.10.0/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  144. data/coverage/assets/0.10.0/smoothness/images/ui-icons_454545_256x240.png +0 -0
  145. data/coverage/assets/0.10.0/smoothness/images/ui-icons_888888_256x240.png +0 -0
  146. data/coverage/assets/0.10.0/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  147. data/coverage/index.html +27510 -0
  148. data/lib/wpscan.rb +44 -0
  149. data/lib/wpscan/browser.rb +16 -0
  150. data/lib/wpscan/controller.rb +8 -0
  151. data/lib/wpscan/controllers.rb +8 -0
  152. data/lib/wpscan/db.rb +28 -0
  153. data/lib/wpscan/db/dynamic_finders.rb +63 -0
  154. data/lib/wpscan/db/plugin.rb +11 -0
  155. data/lib/wpscan/db/plugins.rb +11 -0
  156. data/lib/wpscan/db/schema.rb +39 -0
  157. data/lib/wpscan/db/theme.rb +11 -0
  158. data/lib/wpscan/db/themes.rb +11 -0
  159. data/lib/wpscan/db/updater.rb +148 -0
  160. data/lib/wpscan/db/wp_item.rb +18 -0
  161. data/lib/wpscan/db/wp_items.rb +21 -0
  162. data/lib/wpscan/db/wp_version.rb +11 -0
  163. data/lib/wpscan/errors/http.rb +34 -0
  164. data/lib/wpscan/errors/update.rb +8 -0
  165. data/lib/wpscan/errors/wordpress.rb +22 -0
  166. data/lib/wpscan/finders.rb +14 -0
  167. data/lib/wpscan/finders/finder/plugin_version/comments.rb +25 -0
  168. data/lib/wpscan/finders/finder/wp_version/smart_url_checker.rb +23 -0
  169. data/lib/wpscan/helper.rb +6 -0
  170. data/lib/wpscan/references.rb +31 -0
  171. data/lib/wpscan/target.rb +81 -0
  172. data/lib/wpscan/target/platform/wordpress.rb +74 -0
  173. data/lib/wpscan/target/platform/wordpress/custom_directories.rb +93 -0
  174. data/lib/wpscan/version.rb +4 -0
  175. data/lib/wpscan/vulnerability.rb +25 -0
  176. data/lib/wpscan/vulnerable.rb +10 -0
  177. data/wpscan-v3.sublime-project +8 -0
  178. data/wpscan-v3.sublime-workspace +895 -0
  179. data/wpscan.gemspec +55 -0
  180. metadata +419 -0
@@ -0,0 +1,74 @@
1
+ module WPScan
2
+ # Timthumb
3
+ class Timthumb < InterestingFinding
4
+ include Vulnerable
5
+
6
+ # Opts used to detect the version
7
+ attr_reader :detection_opts
8
+
9
+ # @param [ String ] url
10
+ # @param [ Hash ] opts
11
+ # @option opts [ String ] :detection_mode
12
+ def initialize(url, opts = {})
13
+ super(url, opts)
14
+
15
+ @detection_opts = { mode: opts[:mode] }
16
+ end
17
+
18
+ # @param [ Hash ] opts
19
+ #
20
+ # @return [ WPScan::Version, false ]
21
+ def version(opts = {})
22
+ if @version.nil?
23
+ @version = Finders::TimthumbVersion::Base.find(self, detection_opts.merge(opts))
24
+ end
25
+
26
+ @version
27
+ end
28
+
29
+ # @return [ Array<Vulnerability> ]
30
+ def vulnerabilities
31
+ vulns = []
32
+
33
+ vulns << rce_webshot_vuln if false == version || version > '1.35' && version < '2.8.14' && webshot_enabled?
34
+ vulns << rce_132_vuln if false == version || version < '1.33'
35
+
36
+ vulns
37
+ end
38
+
39
+ # @return [ Vulnerability ] The RCE in the <= 1.32
40
+ def rce_132_vuln
41
+ Vulnerability.new(
42
+ 'Timthumb <= 1.32 Remote Code Execution',
43
+ { exploitdb: ['17602'] },
44
+ 'RCE',
45
+ '1.33'
46
+ )
47
+ end
48
+
49
+ # @return [ Vulnerability ] The RCE due to the WebShot in the > 1.35 (or >= 2.0) and <= 2.8.13
50
+ def rce_webshot_vuln
51
+ Vulnerability.new(
52
+ 'Timthumb <= 2.8.13 WebShot Remote Code Execution',
53
+ {
54
+ url: ['http://seclists.org/fulldisclosure/2014/Jun/117', 'https://github.com/wpscanteam/wpscan/issues/519'],
55
+ cve: '2014-4663'
56
+ },
57
+ 'RCE',
58
+ '2.8.14'
59
+ )
60
+ end
61
+
62
+ # @return [ Boolean ]
63
+ def webshot_enabled?
64
+ res = Browser.get(url, params: { webshot: 1, src: "http://#{default_allowed_domains.sample}" })
65
+
66
+ res.body =~ /WEBSHOT_ENABLED == true/ ? false : true
67
+ end
68
+
69
+ # @return [ Array<String> ] The default allowed domains (between the 2.0 and 2.8.13)
70
+ def default_allowed_domains
71
+ %w(flickr.com picasa.com img.youtube.com upload.wikimedia.org)
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,31 @@
1
+ module WPScan
2
+ # WordPress User
3
+ class User
4
+ include Finders::Finding
5
+
6
+ attr_accessor :password
7
+ attr_reader :id, :username
8
+
9
+ # @param [ String ] username
10
+ # @param [ Hash ] opts
11
+ # @option opts [ Integer ] :id
12
+ # @option opts [ String ] :password
13
+ def initialize(username, opts = {})
14
+ @username = username
15
+ @password = opts[:password]
16
+ @id = opts[:id]
17
+
18
+ parse_finding_options(opts)
19
+ end
20
+
21
+ def ==(other)
22
+ return false unless self.class == other.class
23
+
24
+ username == other.username
25
+ end
26
+
27
+ def to_s
28
+ username
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,142 @@
1
+ module WPScan
2
+ # WpItem (superclass of Plugin & Theme)
3
+ class WpItem
4
+ include Vulnerable
5
+ include Finders::Finding
6
+ include CMSScanner::Target::Platform::PHP
7
+ include CMSScanner::Target::Server::Generic
8
+
9
+ READMES = %w(readme.txt README.txt Readme.txt ReadMe.txt README.TXT readme.TXT).freeze
10
+ CHANGELOGS = %w(changelog.txt Changelog.txt ChangeLog.txt CHANGELOG.txt).freeze
11
+
12
+ attr_reader :uri, :name, :detection_opts, :target, :db_data
13
+
14
+ # @param [ String ] name The plugin/theme name
15
+ # @param [ Target ] target The targeted blog
16
+ # @param [ Hash ] opts
17
+ # @option opts [ String ] :detection_mode
18
+ # @option opts [ Boolean ] :version_all Wether or not to
19
+ # @option opts [ String ] :url The URL of the item
20
+ def initialize(name, target, opts = {})
21
+ @name = URI.decode(name)
22
+ @target = target
23
+ @uri = Addressable::URI.parse(opts[:url]) if opts[:url]
24
+
25
+ # Options used to detect the version
26
+ @detection_opts = { mode: opts[:mode], confidence_threshold: opts[:version_all] ? 0 : 100 }
27
+
28
+ parse_finding_options(opts)
29
+ end
30
+
31
+ # @return [ Array<Vulnerabily> ]
32
+ def vulnerabilities
33
+ return @vulnerabilities if @vulnerabilities
34
+
35
+ @vulnerabilities = []
36
+
37
+ [*db_data['vulnerabilities']].each do |json_vuln|
38
+ vulnerability = Vulnerability.load_from_json(json_vuln)
39
+ @vulnerabilities << vulnerability if vulnerable_to?(vulnerability)
40
+ end
41
+
42
+ @vulnerabilities
43
+ end
44
+
45
+ # Checks if the wp_item is vulnerable to a specific vulnerability
46
+ #
47
+ # @param [ Vulnerability ] vuln Vulnerability to check the item against
48
+ #
49
+ # @return [ Boolean ]
50
+ def vulnerable_to?(vuln)
51
+ return true unless version && vuln && vuln.fixed_in && !vuln.fixed_in.empty?
52
+
53
+ version < vuln.fixed_in ? true : false
54
+ end
55
+
56
+ # @return [ String ]
57
+ def latest_version
58
+ @latest_version ||= db_data['latest_version']
59
+ end
60
+
61
+ # Not used anywhere ATM
62
+ # @return [ Boolean ]
63
+ def popular?
64
+ @popular ||= db_data['popular']
65
+ end
66
+
67
+ # URI.encode is preferered over Addressable::URI.encode as it will encode
68
+ # leading # character:
69
+ # URI.encode('#t#') => %23t%23
70
+ # Addressable::URI.encode('#t#') => #t%23
71
+ #
72
+ # @param [ String ] path Optional path to merge with the uri
73
+ #
74
+ # @return [ String ]
75
+ def url(path = nil)
76
+ return unless @uri
77
+ return @uri.to_s unless path
78
+
79
+ @uri.join(URI.encode(path)).to_s
80
+ end
81
+
82
+ # @return [ Boolean ]
83
+ def ==(other)
84
+ return false unless self.class == other.class
85
+
86
+ name == other.name
87
+ end
88
+
89
+ def to_s
90
+ name
91
+ end
92
+
93
+ # @return [ Symbol ] The Class name associated to the item name
94
+ def classify_name
95
+ name.to_s.tr('-', '_').camelize.to_s.to_sym
96
+ end
97
+
98
+ # @return [ String ] The readme url if found
99
+ def readme_url
100
+ return if detection_opts[:mode] == :passive
101
+
102
+ if @readme_url.nil?
103
+ READMES.each do |path|
104
+ return @readme_url = url(path) if Browser.get(url(path)).code == 200
105
+ end
106
+ end
107
+
108
+ @readme_url
109
+ end
110
+
111
+ # @return [ String, false ] The changelog urr if found
112
+ def changelog_url
113
+ return if detection_opts[:mode] == :passive
114
+
115
+ if @changelog_url.nil?
116
+ CHANGELOGS.each do |path|
117
+ return @changelog_url = url(path) if Browser.get(url(path)).code == 200
118
+ end
119
+ end
120
+
121
+ @changelog_url
122
+ end
123
+
124
+ # @param [ String ] path
125
+ # @param [ Hash ] params The request params
126
+ #
127
+ # @return [ Boolean ]
128
+ def directory_listing?(path = nil, params = {})
129
+ return if detection_opts[:mode] == :passive
130
+ super(path, params)
131
+ end
132
+
133
+ # @param [ String ] path
134
+ # @param [ Hash ] params The request params
135
+ #
136
+ # @return [ Boolean ]
137
+ def error_log?(path = 'error_log', params = {})
138
+ return if detection_opts[:mode] == :passive
139
+ super(path, params)
140
+ end
141
+ end
142
+ end
@@ -0,0 +1,49 @@
1
+ module WPScan
2
+ # WP Version
3
+ class WpVersion < CMSScanner::Version
4
+ include Vulnerable
5
+ attr_reader :db_data
6
+
7
+ def initialize(number, opts = {})
8
+ raise InvalidWordPressVersion unless WpVersion.valid?(number.to_s)
9
+
10
+ super(number, opts)
11
+ end
12
+
13
+ # @param [ String ] number
14
+ #
15
+ # @return [ Boolean ] true if the number is a valid WP version, false otherwise
16
+ def self.valid?(number)
17
+ all.include?(number)
18
+ end
19
+
20
+ # @return [ Array<String> ] All the version numbers
21
+ def self.all
22
+ return @all_numbers if @all_numbers
23
+
24
+ @all_numbers = []
25
+
26
+ DB::Version.all.each { |v| @all_numbers << v.number }
27
+
28
+ @all_numbers
29
+ end
30
+
31
+ # @return [ JSON ]
32
+ def db_data
33
+ DB::Version.db_data(number)
34
+ end
35
+
36
+ # @return [ Array<Vulnerability> ]
37
+ def vulnerabilities
38
+ return @vulnerabilities if @vulnerabilities
39
+
40
+ @vulnerabilities = []
41
+
42
+ [*db_data['vulnerabilities']].each do |json_vuln|
43
+ @vulnerabilities << Vulnerability.load_from_json(json_vuln)
44
+ end
45
+
46
+ @vulnerabilities
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,19 @@
1
+ module WPScan
2
+ # Override of the CMSScanner::XMLRPC to include the references
3
+ class XMLRPC < CMSScanner::XMLRPC
4
+ include References # To be able to use the :wpvulndb reference if needed
5
+
6
+ # @return [ Hash ]
7
+ def references
8
+ {
9
+ url: ['http://codex.wordpress.org/XML-RPC_Pingback_API'],
10
+ metasploit: [
11
+ 'auxiliary/scanner/http/wordpress_ghost_scanner',
12
+ 'auxiliary/dos/http/wordpress_xmlrpc_dos',
13
+ 'auxiliary/scanner/http/wordpress_xmlrpc_login',
14
+ 'auxiliary/scanner/http/wordpress_pingback_access'
15
+ ]
16
+ }
17
+ end
18
+ end
19
+ end
@@ -0,0 +1 @@
1
+ <%= red('ERROR:') %> <%= @msg %>
@@ -0,0 +1,2 @@
1
+
2
+ <%= green('[SUCCESS]') %> Username: <%= @user.username %> Password: <%= @user.password %>
@@ -0,0 +1,9 @@
1
+
2
+ <% if @users.empty? -%>
3
+ <%= notice_icon %> No Valid Passwords Found.
4
+ <% else -%>
5
+ <%= notice_icon %> Valid Combinations Found:
6
+ <% @users.each do |user| -%>
7
+ | Username: <%= user.username %>, Password: <%= user.password %>
8
+ <% end -%>
9
+ <% end %>
@@ -0,0 +1,14 @@
1
+ _______________________________________________________________
2
+ __ _______ _____
3
+ \ \ / / __ \ / ____|
4
+ \ \ /\ / /| |__) | (___ ___ __ _ _ __
5
+ \ \/ \/ / | ___/ \___ \ / __|/ _` | '_ \
6
+ \ /\ / | | ____) | (__| (_| | | | |
7
+ \/ \/ |_| |_____/ \___|\__,_|_| |_|
8
+
9
+ WordPress Security Scanner by the WPScan Team
10
+ Version <%= WPScan::VERSION %>
11
+ Sponsored by Sucuri - https://sucuri.net
12
+ @_WPScan_, @ethicalhack3r, @erwan_lr, pvdl, @_FireFart_
13
+ _______________________________________________________________
14
+
@@ -0,0 +1,8 @@
1
+ <% if @verbose && !@updated.empty? -%>
2
+ <%= notice_icon %> File(s) Updated:
3
+ <% @updated.each do |file| -%>
4
+ | <%= file %>
5
+ <% end -%>
6
+ <% end -%>
7
+ <%= notice_icon %> Update completed.
8
+
@@ -0,0 +1 @@
1
+ <%= notice_icon %> Updating the Database ...
@@ -0,0 +1 @@
1
+ <%= critical_icon %> The Website is not fully configured and currently in install mode. Create a new admin user at <%= @url %>
@@ -0,0 +1,11 @@
1
+
2
+ <% if @config_backups.empty? -%>
3
+ <%= notice_icon %> No Backups Found.
4
+ <% else -%>
5
+ <%= notice_icon %> Backup(s) Identified:
6
+ <% @config_backups.each do |config_backup| -%>
7
+
8
+ <%= info_icon %> <%= config_backup %>
9
+ <%= render('@finding', item: config_backup) -%>
10
+ <% end -%>
11
+ <% end %>
@@ -0,0 +1,11 @@
1
+
2
+ <% if @medias.empty? -%>
3
+ <%= notice_icon %> No Medias Found.
4
+ <% else -%>
5
+ <%= notice_icon %> Medias(s) Identified:
6
+ <% @medias.each do |media| -%>
7
+
8
+ <%= info_icon %> <%= media %>
9
+ <%= render('@finding', item: media) -%>
10
+ <% end -%>
11
+ <% end %>
@@ -0,0 +1,35 @@
1
+
2
+ <% if @plugins.empty? -%>
3
+ <%= notice_icon %> No plugins Found.
4
+ <% else -%>
5
+ <%= notice_icon %> Plugin(s) Identified:
6
+ <% @plugins.each do |plugin| -%>
7
+
8
+ <%= info_icon %> <%= plugin %>
9
+ | Location: <%= plugin.url %>
10
+ <% if plugin.latest_version -%>
11
+ | Latest Version: <%= plugin.latest_version %>
12
+ <% end -%>
13
+ <% if plugin.readme_url -%>
14
+ | Readme: <%= plugin.readme_url %>
15
+ <% end -%>
16
+ <% if plugin.changelog_url -%>
17
+ | Changelog: <%= plugin.changelog_url %>
18
+ <% end -%>
19
+ <% if plugin.directory_listing? -%>
20
+ | <%= critical_icon %> Directory listing is enabled
21
+ <% end -%>
22
+ <% if plugin.error_log? -%>
23
+ | <%= critical_icon %> An error log file has been found: <%= plugin.url('error_log') %>
24
+ <% end -%>
25
+ |
26
+ <%= render('@finding', item: plugin) -%>
27
+ |
28
+ <% if plugin.version -%>
29
+ | Version: <%= plugin.version %> (<%= plugin.version.confidence %>% confidence)
30
+ <%= render('@finding', item: plugin.version) -%>
31
+ <% else -%>
32
+ | The version could not be determined.
33
+ <% end -%>
34
+ <% end -%>
35
+ <% end %>
@@ -0,0 +1,11 @@
1
+
2
+ <% if @themes.empty? -%>
3
+ <%= notice_icon %> No themes Found.
4
+ <% else -%>
5
+ <%= notice_icon %> Theme(s) Identified:
6
+ <% @themes.each do |theme| -%>
7
+
8
+ <%= info_icon %> <%= theme %>
9
+ <%= render('@theme', theme: theme, show_parents: false) -%>
10
+ <% end -%>
11
+ <% end %>
@@ -0,0 +1,18 @@
1
+
2
+ <% if @timthumbs.empty? -%>
3
+ <%= notice_icon %> No Timthumbs Found.
4
+ <% else -%>
5
+ <%= notice_icon %> Timthumb(s) Identified:
6
+ <% @timthumbs.each do |timthumb| -%>
7
+
8
+ <%= info_icon %> <%= timthumb %>
9
+ <%= render('@finding', item: timthumb) -%>
10
+ |
11
+ <% if timthumb.version -%>
12
+ | Version: <%= timthumb.version %>
13
+ <%= render('@finding', item: timthumb.version) -%>
14
+ <% else -%>
15
+ | The version could not be determined.
16
+ <% end -%>
17
+ <% end -%>
18
+ <% end %>