Changes db_data to metadata

This commit is contained in:
erwanlr
2019-07-18 18:52:52 +01:00
parent d05ad0f8f4
commit 84422b10c8
13 changed files with 102 additions and 42 deletions

View File

@@ -16,8 +16,8 @@ module WPScan
end end
# @return [ JSON ] # @return [ JSON ]
def db_data def metadata
@db_data ||= DB::Plugin.db_data(slug) @metadata ||= DB::Plugin.metadata_at(slug)
end end
# @param [ Hash ] opts # @param [ Hash ] opts

View File

@@ -22,8 +22,8 @@ module WPScan
end end
# @return [ JSON ] # @return [ JSON ]
def db_data def metadata
@db_data ||= DB::Theme.db_data(slug) @metadata ||= DB::Theme.metadata_at(slug)
end end
# @param [ Hash ] opts # @param [ Hash ] opts

View File

@@ -39,10 +39,11 @@ module WPScan
@vulnerabilities = [] @vulnerabilities = []
[*db_data['vulnerabilities']].each do |json_vuln| # TODO Get them from API
vulnerability = Vulnerability.load_from_json(json_vuln) #[*db_data['vulnerabilities']].each do |json_vuln|
@vulnerabilities << vulnerability if vulnerable_to?(vulnerability) # vulnerability = Vulnerability.load_from_json(json_vuln)
end # @vulnerabilities << vulnerability if vulnerable_to?(vulnerability)
#end
@vulnerabilities @vulnerabilities
end end
@@ -60,18 +61,18 @@ module WPScan
# @return [ String ] # @return [ String ]
def latest_version def latest_version
@latest_version ||= db_data['latest_version'] ? Model::Version.new(db_data['latest_version']) : nil @latest_version ||= metadata['latest_version'] ? Model::Version.new(metadata['latest_version']) : nil
end end
# Not used anywhere ATM # Not used anywhere ATM
# @return [ Boolean ] # @return [ Boolean ]
def popular? def popular?
@popular ||= db_data['popular'] @popular ||= metadata['popular']
end end
# @return [ String ] # @return [ String ]
def last_updated def last_updated
@last_updated ||= db_data['last_updated'] @last_updated ||= metadata['last_updated']
end end
# @return [ Boolean ] # @return [ Boolean ]

View File

@@ -36,8 +36,8 @@ module WPScan
end end
# @return [ JSON ] # @return [ JSON ]
def db_data def metadata
@db_data ||= DB::Version.db_data(number) @metadata ||= DB::Version.metadata_at(number)
end end
# @return [ Array<Vulnerability> ] # @return [ Array<Vulnerability> ]
@@ -46,21 +46,22 @@ module WPScan
@vulnerabilities = [] @vulnerabilities = []
[*db_data['vulnerabilities']].each do |json_vuln| # TODO get them from API
@vulnerabilities << Vulnerability.load_from_json(json_vuln) #[*db_data['vulnerabilities']].each do |json_vuln|
end # @vulnerabilities << Vulnerability.load_from_json(json_vuln)
#end
@vulnerabilities @vulnerabilities
end end
# @return [ String ] # @return [ String ]
def release_date def release_date
@release_date ||= db_data['release_date'] || 'Unknown' @release_date ||= metadata['release_date'] || 'Unknown'
end end
# @return [ String ] # @return [ String ]
def status def status
@status ||= db_data['status'] || 'Unknown' @status ||= metadata['status'] || 'Unknown'
end end
end end
end end

View File

@@ -4,9 +4,9 @@ module WPScan
module DB module DB
# Plugin DB # Plugin DB
class Plugin < WpItem class Plugin < WpItem
# @return [ String ] # @return [ Hash ]
def self.db_file def self.metadata
@db_file ||= DB_DIR.join('plugins.json').to_s @metadata ||= super['plugins'] || {}
end end
end end
end end

View File

@@ -5,8 +5,8 @@ module WPScan
# WP Plugins # WP Plugins
class Plugins < WpItems class Plugins < WpItems
# @return [ JSON ] # @return [ JSON ]
def self.db def self.metadata
Plugin.db Plugin.metadata
end end
end end
end end

View File

@@ -4,9 +4,9 @@ module WPScan
module DB module DB
# Theme DB # Theme DB
class Theme < WpItem class Theme < WpItem
# @return [ String ] # @return [ Hash ]
def self.db_file def self.metadata
@db_file ||= DB_DIR.join('themes.json').to_s @metadata ||= super['themes'] || {}
end end
end end
end end

View File

@@ -5,8 +5,8 @@ module WPScan
# WP Themes # WP Themes
class Themes < WpItems class Themes < WpItems
# @return [ JSON ] # @return [ JSON ]
def self.db def self.metadata
Theme.db Theme.metadata
end end
end end
end end

View File

@@ -7,12 +7,15 @@ module WPScan
class Updater class Updater
# /!\ Might want to also update the Enumeration#cli_options when some filenames are changed here # /!\ Might want to also update the Enumeration#cli_options when some filenames are changed here
FILES = %w[ FILES = %w[
plugins.json themes.json wordpresses.json metadata.json wp_fingerprints.json
timthumbs-v3.txt config_backups.txt db_exports.txt timthumbs-v3.txt config_backups.txt db_exports.txt
dynamic_finders.yml wp_fingerprints.json LICENSE dynamic_finders.yml LICENSE
].freeze ].freeze
OLD_FILES = %w[wordpress.db user-agents.txt dynamic_finders_01.yml].freeze OLD_FILES = %w[
wordpress.db user-agents.txt dynamic_finders_01.yml
wordpressess.json plugins.json themes.json
].freeze
attr_reader :repo_directory attr_reader :repo_directory

View File

@@ -6,14 +6,19 @@ module WPScan
class WpItem class WpItem
# @param [ String ] identifier The plugin/theme slug or version number # @param [ String ] identifier The plugin/theme slug or version number
# #
# @return [ Hash ] The JSON data from the DB associated to the identifier # @return [ Hash ] The JSON data from the metadata associated to the identifier
def self.db_data(identifier) def self.metadata_at(identifier)
db[identifier] || {} metadata[identifier] || {}
end end
# @return [ JSON ] # @return [ JSON ]
def self.db def self.metadata
@db ||= read_json_file(db_file) @metadata ||= read_json_file(metadata_file)
end
# @return [ String ]
def self.metadata_file
@metadata_file ||= DB_DIR.join('metadata.json').to_s
end end
end end
end end

View File

@@ -6,17 +6,17 @@ module WPScan
class WpItems class WpItems
# @return [ Array<String> ] The slug of all items # @return [ Array<String> ] The slug of all items
def self.all_slugs def self.all_slugs
db.keys metadata.keys
end end
# @return [ Array<String> ] The slug of all popular items # @return [ Array<String> ] The slug of all popular items
def self.popular_slugs def self.popular_slugs
db.select { |_key, item| item['popular'] == true }.keys metadata.select { |_key, item| item['popular'] == true }.keys
end end
# @return [ Array<String> ] The slug of all vulnerable items # @return [ Array<String> ] The slug of all vulnerable items
def self.vulnerable_slugs def self.vulnerable_slugs
db.reject { |_key, item| item['vulnerabilities'].empty? }.keys metadata.select { |_key, item| item['vulnerabilities'] == true }.keys
end end
end end
end end

View File

@@ -4,9 +4,9 @@ module WPScan
module DB module DB
# WP Version # WP Version
class Version < WpItem class Version < WpItem
# @return [ String ] # @return [ Hash ]
def self.db_file def self.metadata
@db_file ||= DB_DIR.join('wordpresses.json').to_s @metadata ||= super['wordpress'] || {}
end end
end end
end end

50
spec/fixtures/db/metadata.json vendored Normal file
View File

@@ -0,0 +1,50 @@
{
"wordpress": {
"4.0": {
"release_date": "2014-09-04",
"status": "latest"
},
"3.8.1": {
"release_date": "2014-01-23",
"status": "outdated"
},
"3.8": {
"release_date": "2013-12-12",
"status": "insecure"
}
},
"plugins": {
"no-vulns-popular": {
"vulnerabilities": false,
"popular": true,
"latest_version": "2.0",
"last_updated": "2015-05-16T00:00:00.000Z"
},
"vulnerable-not-popular": {
"latest_version": null,
"last_updated": null,
"popular": false,
"vulnerabilities": true
}
},
"themes": {
"no-vulns-popular": {
"popular": true,
"latest_version": "2.0",
"last_updated": "2015-05-16T00:00:00.000Z",
"vulnerabilities": false
},
"dignitas-themes": {
"popular": true,
"latest_version": null,
"last_updated": null,
"vulnerabilities" : true
},
"yaaburnee-themes": {
"popular": false,
"latest_version": null,
"last_updated": null,
"vulnerabilities" : true
}
}
}