Updates plugin version detection via Readme
This commit is contained in:
@@ -9,9 +9,10 @@ module WPScan
|
|||||||
def aggressive(_opts = {})
|
def aggressive(_opts = {})
|
||||||
found_by_msg = 'Readme - %s (Aggressive Detection)'
|
found_by_msg = 'Readme - %s (Aggressive Detection)'
|
||||||
|
|
||||||
|
# The target(plugin)#readme_url can't be used directly here
|
||||||
|
# as if the --detection-mode is passive, it will always return nil
|
||||||
Model::WpItem::READMES.each do |file|
|
Model::WpItem::READMES.each do |file|
|
||||||
url = target.url(file)
|
res = target.head_and_get(file)
|
||||||
res = Browser.get(url)
|
|
||||||
|
|
||||||
next unless res.code == 200 && !(numbers = version_numbers(res.body)).empty?
|
next unless res.code == 200 && !(numbers = version_numbers(res.body)).empty?
|
||||||
|
|
||||||
@@ -20,10 +21,11 @@ module WPScan
|
|||||||
e[0],
|
e[0],
|
||||||
found_by: format(found_by_msg, e[1]),
|
found_by: format(found_by_msg, e[1]),
|
||||||
confidence: e[2],
|
confidence: e[2],
|
||||||
interesting_entries: [url]
|
interesting_entries: [res.effective_url]
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
nil
|
nil
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -24,17 +24,23 @@ describe WPScan::Finders::PluginVersion::Readme do
|
|||||||
end
|
end
|
||||||
|
|
||||||
describe '#aggressive' do
|
describe '#aggressive' do
|
||||||
before { expect(target).to receive(:content_dir).and_return('wp-content') }
|
before do
|
||||||
|
expect(target).to receive(:content_dir).and_return('wp-content')
|
||||||
|
|
||||||
|
allow(target).to receive(:head_or_get_params).and_return(method: :head)
|
||||||
|
|
||||||
|
stub_request(:head, /.*/).to_return(status: 404)
|
||||||
|
stub_request(:head, readme_url).to_return(status: 200)
|
||||||
|
end
|
||||||
|
|
||||||
|
let(:readme_url) { plugin.url(WPScan::Model::WpItem::READMES.sample) }
|
||||||
|
|
||||||
after do
|
after do
|
||||||
stub_request(:get, /.*/).to_return(status: 404)
|
|
||||||
stub_request(:get, readme_url).to_return(body: File.read(fixtures.join(@file)))
|
stub_request(:get, readme_url).to_return(body: File.read(fixtures.join(@file)))
|
||||||
|
|
||||||
expect(finder.aggressive).to eql @expected
|
expect(finder.aggressive).to eql @expected
|
||||||
end
|
end
|
||||||
|
|
||||||
let(:readme_url) { plugin.url(WPScan::Model::WpItem::READMES.sample) }
|
|
||||||
|
|
||||||
context 'when no version' do
|
context 'when no version' do
|
||||||
it 'returns nil' do
|
it 'returns nil' do
|
||||||
@file = 'no_version.txt'
|
@file = 'no_version.txt'
|
||||||
|
|||||||
Reference in New Issue
Block a user