Skip to content

Commit ab36b5d

Browse files
committed
Add support for single-IP external scanners
1 parent 8be2b1f commit ab36b5d

File tree

2 files changed

+51
-2
lines changed

2 files changed

+51
-2
lines changed

lib/msf/core/modules/external/shim.rb

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ def self.generate(module_path)
1313
capture_server(mod)
1414
when 'dos'
1515
dos(mod)
16+
when 'scanner.single'
17+
single_scanner(mod)
1618
when 'scanner.multi'
1719
multi_scanner(mod)
1820
else
@@ -30,13 +32,19 @@ def self.common_metadata(meta = {})
3032
render_template('common_metadata.erb', meta)
3133
end
3234

33-
def self.mod_meta_common(mod, meta = {})
35+
def self.mod_meta_common(mod, meta = {}, drop_rhost: true)
3436
meta[:path] = mod.path.dump
3537
meta[:name] = mod.meta['name'].dump
3638
meta[:description] = mod.meta['description'].dump
3739
meta[:authors] = mod.meta['authors'].map(&:dump).join(",\n ")
3840

39-
meta[:options] = mod.meta['options'].map do |n, o|
41+
options = if drop_rhost
42+
mod.meta['options'].reject {|n, o| n == 'rhost'}
43+
else
44+
mod.meta['options']
45+
end
46+
47+
meta[:options] = options.map do |n, o|
4048
"Opt#{o['type'].camelize}.new(#{n.dump},
4149
[#{o['required']}, #{o['description'].dump}, #{o['default'].inspect}])"
4250
end.join(",\n ")
@@ -71,6 +79,16 @@ def self.capture_server(mod)
7179
render_template('capture_server.erb', meta)
7280
end
7381

82+
def self.single_scanner(mod)
83+
meta = mod_meta_common(mod, drop_rhost: true)
84+
meta[:date] = mod.meta['date'].dump
85+
meta[:references] = mod.meta['references'].map do |r|
86+
"[#{r['type'].upcase.dump}, #{r['ref'].dump}]"
87+
end.join(",\n ")
88+
89+
render_template('single_scanner.erb', meta)
90+
end
91+
7492
def self.multi_scanner(mod)
7593
meta = mod_meta_common(mod)
7694
meta[:date] = mod.meta['date'].dump
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
require 'msf/core/modules/external/bridge'
2+
require 'msf/core/module/external'
3+
4+
class MetasploitModule < Msf::Auxiliary
5+
include Msf::Auxiliary::Scanner
6+
include Msf::Module::External
7+
8+
def initialize
9+
super({
10+
<%= common_metadata meta %>
11+
'References' =>
12+
[
13+
<%= meta[:references] %>
14+
],
15+
'DisclosureDate' => <%= meta[:date] %>,
16+
})
17+
18+
register_options([
19+
<%= meta[:options] %>
20+
])
21+
end
22+
23+
def run_host(ip)
24+
print_status("Running for #{ip}...")
25+
mod = Msf::Modules::External::Bridge.open(<%= meta[:path] %>)
26+
rhost = datastore.delete('RHOST')
27+
datastore['rhost'] = rhost
28+
mod.run(datastore)
29+
wait_status(mod)
30+
end
31+
end

0 commit comments

Comments
 (0)