Errors moved into their own namespace - Ref #1315
This commit is contained in:
@@ -25,7 +25,7 @@ module WPScan
|
|||||||
# @return [ Boolean ]
|
# @return [ Boolean ]
|
||||||
def update_db_required?
|
def update_db_required?
|
||||||
if local_db.missing_files?
|
if local_db.missing_files?
|
||||||
raise MissingDatabaseFile if parsed_options[:update] == false
|
raise Error::MissingDatabaseFile if parsed_options[:update] == false
|
||||||
|
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
@@ -62,7 +62,7 @@ module WPScan
|
|||||||
# Raises errors if the target is hosted on wordpress.com or is not running WordPress
|
# Raises errors if the target is hosted on wordpress.com or is not running WordPress
|
||||||
# Also check if the homepage_url is still the install url
|
# Also check if the homepage_url is still the install url
|
||||||
def check_wordpress_state
|
def check_wordpress_state
|
||||||
raise WordPressHostedError if target.wordpress_hosted?
|
raise Error::WordPressHosted if target.wordpress_hosted?
|
||||||
|
|
||||||
if Addressable::URI.parse(target.homepage_url).path =~ %r{/wp-admin/install.php$}i
|
if Addressable::URI.parse(target.homepage_url).path =~ %r{/wp-admin/install.php$}i
|
||||||
|
|
||||||
@@ -71,7 +71,7 @@ module WPScan
|
|||||||
exit(WPScan::ExitCode::VULNERABLE)
|
exit(WPScan::ExitCode::VULNERABLE)
|
||||||
end
|
end
|
||||||
|
|
||||||
raise NotWordPressError unless target.wordpress?(parsed_options[:detection_mode]) || parsed_options[:force]
|
raise Error::NotWordPress unless target.wordpress?(parsed_options[:detection_mode]) || parsed_options[:force]
|
||||||
end
|
end
|
||||||
|
|
||||||
# Loads the related server module in the target
|
# Loads the related server module in the target
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ module WPScan
|
|||||||
|
|
||||||
return if target.content_dir
|
return if target.content_dir
|
||||||
|
|
||||||
raise WpContentDirNotDetected
|
raise Error::WpContentDirNotDetected
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -65,11 +65,11 @@ module WPScan
|
|||||||
when :wp_login
|
when :wp_login
|
||||||
WPScan::Finders::Passwords::WpLogin.new(target)
|
WPScan::Finders::Passwords::WpLogin.new(target)
|
||||||
when :xmlrpc
|
when :xmlrpc
|
||||||
raise XMLRPCNotDetected unless xmlrpc
|
raise Error::XMLRPCNotDetected unless xmlrpc
|
||||||
|
|
||||||
WPScan::Finders::Passwords::XMLRPC.new(xmlrpc)
|
WPScan::Finders::Passwords::XMLRPC.new(xmlrpc)
|
||||||
when :xmlrpc_multicall
|
when :xmlrpc_multicall
|
||||||
raise XMLRPCNotDetected unless xmlrpc
|
raise Error::XMLRPCNotDetected unless xmlrpc
|
||||||
|
|
||||||
WPScan::Finders::Passwords::XMLRPCMulticall.new(xmlrpc)
|
WPScan::Finders::Passwords::XMLRPCMulticall.new(xmlrpc)
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ module WPScan
|
|||||||
include Vulnerable
|
include Vulnerable
|
||||||
|
|
||||||
def initialize(number, opts = {})
|
def initialize(number, opts = {})
|
||||||
raise InvalidWordPressVersion unless WpVersion.valid?(number.to_s)
|
raise Error::InvalidWordPressVersion unless WpVersion.valid?(number.to_s)
|
||||||
|
|
||||||
super(number, opts)
|
super(number, opts)
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -80,7 +80,7 @@ module WPScan
|
|||||||
url = "#{remote_file_url(filename)}.sha512"
|
url = "#{remote_file_url(filename)}.sha512"
|
||||||
|
|
||||||
res = Browser.get(url, request_params)
|
res = Browser.get(url, request_params)
|
||||||
raise DownloadError, res if res.timed_out? || res.code != 200
|
raise Error::Download, res if res.timed_out? || res.code != 200
|
||||||
|
|
||||||
res.body.chomp
|
res.body.chomp
|
||||||
end
|
end
|
||||||
@@ -121,7 +121,7 @@ module WPScan
|
|||||||
file_url = remote_file_url(filename)
|
file_url = remote_file_url(filename)
|
||||||
|
|
||||||
res = Browser.get(file_url, request_params)
|
res = Browser.get(file_url, request_params)
|
||||||
raise DownloadError, res if res.timed_out? || res.code != 200
|
raise Error::Download, res if res.timed_out? || res.code != 200
|
||||||
|
|
||||||
File.open(file_path, 'wb') { |f| f.write(res.body) }
|
File.open(file_path, 'wb') { |f| f.write(res.body) }
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,9 @@
|
|||||||
module WPScan
|
module WPScan
|
||||||
class Error < StandardError
|
module Error
|
||||||
|
include CMSScanner::Error
|
||||||
|
|
||||||
|
class Standard < StandardError
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -1,34 +1,36 @@
|
|||||||
module WPScan
|
module WPScan
|
||||||
# HTTP Error
|
module Error
|
||||||
class HTTPError < Error
|
# HTTP Error
|
||||||
attr_reader :response
|
class HTTP < Standard
|
||||||
|
attr_reader :response
|
||||||
|
|
||||||
# @param [ Typhoeus::Response ] res
|
# @param [ Typhoeus::Response ] res
|
||||||
def initialize(response)
|
def initialize(response)
|
||||||
@response = response
|
@response = response
|
||||||
|
end
|
||||||
|
|
||||||
|
def failure_details
|
||||||
|
msg = response.effective_url
|
||||||
|
|
||||||
|
msg += if response.code.zero? || response.timed_out?
|
||||||
|
" (#{response.return_message})"
|
||||||
|
else
|
||||||
|
" (status: #{response.code})"
|
||||||
|
end
|
||||||
|
|
||||||
|
msg
|
||||||
|
end
|
||||||
|
|
||||||
|
def to_s
|
||||||
|
"HTTP Error: #{failure_details}"
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def failure_details
|
# Used in the Updater
|
||||||
msg = response.effective_url
|
class Download < HTTP
|
||||||
|
def to_s
|
||||||
msg += if response.code.zero? || response.timed_out?
|
"Unable to get #{failure_details}"
|
||||||
" (#{response.return_message})"
|
end
|
||||||
else
|
|
||||||
" (status: #{response.code})"
|
|
||||||
end
|
|
||||||
|
|
||||||
msg
|
|
||||||
end
|
|
||||||
|
|
||||||
def to_s
|
|
||||||
"HTTP Error: #{failure_details}"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# Used in the Updater
|
|
||||||
class DownloadError < HTTPError
|
|
||||||
def to_s
|
|
||||||
"Unable to get #{failure_details}"
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,8 +1,10 @@
|
|||||||
module WPScan
|
module WPScan
|
||||||
# Error raised when there is a missing DB file and --no-update supplied
|
module Error
|
||||||
class MissingDatabaseFile < Error
|
# Error raised when there is a missing DB file and --no-update supplied
|
||||||
def to_s
|
class MissingDatabaseFile < Standard
|
||||||
'Update required, you can not run a scan if a database file is missing.'
|
def to_s
|
||||||
|
'Update required, you can not run a scan if a database file is missing.'
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,28 +1,30 @@
|
|||||||
module WPScan
|
module WPScan
|
||||||
# WordPress hosted (*.wordpress.com)
|
module Error
|
||||||
class WordPressHostedError < Error
|
# WordPress hosted (*.wordpress.com)
|
||||||
def to_s
|
class WordPressHosted < Standard
|
||||||
'Scanning *.wordpress.com hosted blogs is not supported.'
|
def to_s
|
||||||
|
'Scanning *.wordpress.com hosted blogs is not supported.'
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
|
||||||
# Not WordPress Error
|
# Not WordPress Error
|
||||||
class NotWordPressError < Error
|
class NotWordPress < Standard
|
||||||
def to_s
|
def to_s
|
||||||
'The remote website is up, but does not seem to be running WordPress.'
|
'The remote website is up, but does not seem to be running WordPress.'
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
|
||||||
# Invalid Wp Version (used in the WpVersion#new)
|
# Invalid Wp Version (used in the WpVersion#new)
|
||||||
class InvalidWordPressVersion < Error
|
class InvalidWordPressVersion < Standard
|
||||||
def to_s
|
def to_s
|
||||||
'The WordPress version is invalid'
|
'The WordPress version is invalid'
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
|
||||||
class WpContentDirNotDetected < Error
|
class WpContentDirNotDetected < Standard
|
||||||
def to_s
|
def to_s
|
||||||
'Unable to identify the wp-content dir, please supply it with --wp-content-dir'
|
'Unable to identify the wp-content dir, please supply it with --wp-content-dir'
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,8 +1,10 @@
|
|||||||
module WPScan
|
module WPScan
|
||||||
# XML-RPC Not Detected
|
module Error
|
||||||
class XMLRPCNotDetected < Error
|
# XML-RPC Not Detected
|
||||||
def to_s
|
class XMLRPCNotDetected < Standard
|
||||||
'The XML-RPC Interface was not detected.'
|
def to_s
|
||||||
|
'The XML-RPC Interface was not detected.'
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ module WPScan
|
|||||||
confidence: opts[:confidence] || 80,
|
confidence: opts[:confidence] || 80,
|
||||||
interesting_entries: opts[:entries]
|
interesting_entries: opts[:entries]
|
||||||
)
|
)
|
||||||
rescue WPScan::InvalidWordPressVersion
|
rescue WPScan::Error::InvalidWordPressVersion
|
||||||
nil # Invalid Version returned as nil and will be ignored by Finders
|
nil # Invalid Version returned as nil and will be ignored by Finders
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -70,7 +70,7 @@ describe WPScan::Controller::Core do
|
|||||||
let(:cli_args) { "#{super()} --no-update" }
|
let(:cli_args) { "#{super()} --no-update" }
|
||||||
|
|
||||||
it 'raises an error' do
|
it 'raises an error' do
|
||||||
expect { core.update_db_required? }. to raise_error(WPScan::MissingDatabaseFile)
|
expect { core.update_db_required? }. to raise_error(WPScan::Error::MissingDatabaseFile)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -199,7 +199,7 @@ describe WPScan::Controller::Core do
|
|||||||
let(:redirection) { 'http://g.com/' }
|
let(:redirection) { 'http://g.com/' }
|
||||||
|
|
||||||
it 'raises an error' do
|
it 'raises an error' do
|
||||||
expect { core.before_scan }.to raise_error(CMSScanner::HTTPRedirectError)
|
expect { core.before_scan }.to raise_error(CMSScanner::Error::HTTPRedirect)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -218,7 +218,7 @@ describe WPScan::Controller::Core do
|
|||||||
it 'raises an error' do
|
it 'raises an error' do
|
||||||
expect(core.target).to receive(:wordpress?).with(:mixed).and_return(false)
|
expect(core.target).to receive(:wordpress?).with(:mixed).and_return(false)
|
||||||
|
|
||||||
expect { core.before_scan }.to raise_error(WPScan::NotWordPressError)
|
expect { core.before_scan }.to raise_error(WPScan::Error::NotWordPress)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -230,7 +230,7 @@ describe WPScan::Controller::Core do
|
|||||||
before { expect(core).to receive(:load_server_module) }
|
before { expect(core).to receive(:load_server_module) }
|
||||||
|
|
||||||
it 'raises an error' do
|
it 'raises an error' do
|
||||||
expect { core.before_scan }.to raise_error(WPScan::WordPressHostedError)
|
expect { core.before_scan }.to raise_error(WPScan::Error::WordPressHosted)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -253,7 +253,7 @@ describe WPScan::Controller::Core do
|
|||||||
|
|
||||||
context 'when no --force' do
|
context 'when no --force' do
|
||||||
it 'raises an error' do
|
it 'raises an error' do
|
||||||
expect { core.before_scan }.to raise_error(WPScan::NotWordPressError)
|
expect { core.before_scan }.to raise_error(WPScan::Error::NotWordPress)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ describe WPScan::Controller::CustomDirectories do
|
|||||||
before { expect(controller.target).to receive(:content_dir) }
|
before { expect(controller.target).to receive(:content_dir) }
|
||||||
|
|
||||||
it 'raises an exception' do
|
it 'raises an exception' do
|
||||||
expect { controller.before_scan }.to raise_error(WPScan::WpContentDirNotDetected)
|
expect { controller.before_scan }.to raise_error(WPScan::Error::WpContentDirNotDetected)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -75,7 +75,7 @@ describe WPScan::Controller::PasswordAttack do
|
|||||||
let(:attack) { 'xmlrpc' }
|
let(:attack) { 'xmlrpc' }
|
||||||
|
|
||||||
it 'raises an error' do
|
it 'raises an error' do
|
||||||
expect { controller.attacker }.to raise_error(WPScan::XMLRPCNotDetected)
|
expect { controller.attacker }.to raise_error(WPScan::Error::XMLRPCNotDetected)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -83,7 +83,7 @@ describe WPScan::Controller::PasswordAttack do
|
|||||||
let(:attack) { 'xmlrpc-multicall' }
|
let(:attack) { 'xmlrpc-multicall' }
|
||||||
|
|
||||||
it 'raises an error' do
|
it 'raises an error' do
|
||||||
expect { controller.attacker }.to raise_error(WPScan::XMLRPCNotDetected)
|
expect { controller.attacker }.to raise_error(WPScan::Error::XMLRPCNotDetected)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ describe WPScan::WpVersion do
|
|||||||
describe '#new' do
|
describe '#new' do
|
||||||
context 'when invalid number' do
|
context 'when invalid number' do
|
||||||
it 'raises an error' do
|
it 'raises an error' do
|
||||||
expect { described_class.new('aa') }.to raise_error WPScan::InvalidWordPressVersion
|
expect { described_class.new('aa') }.to raise_error WPScan::Error::InvalidWordPressVersion
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user