Updates plugin version detection via Readme

This commit is contained in:
erwanlr
2019-03-26 08:39:21 +00:00
parent 7ea1acb7c1
commit 32270efd65
2 changed files with 15 additions and 7 deletions

View File

@@ -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

View File

@@ -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'