Skip to content

Commit a5be16f

Browse files
committed
Add batch scanner external module type
1 parent fb41eea commit a5be16f

File tree

2 files changed

+47
-1
lines changed

2 files changed

+47
-1
lines changed

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

Lines changed: 13 additions & 1 deletion
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.multi'
17+
multi_scanner(mod)
1618
else
1719
# TODO have a nice load error show up in the logs
1820
''
@@ -35,7 +37,7 @@ def self.mod_meta_common(mod, meta = {})
3537
meta[:authors] = mod.meta['authors'].map(&:dump).join(",\n ")
3638

3739
meta[:options] = mod.meta['options'].map do |n, o|
38-
"Opt#{o['type'].capitalize}.new(#{n.dump},
40+
"Opt#{o['type'].camelize}.new(#{n.dump},
3941
[#{o['required']}, #{o['description'].dump}, #{o['default'].inspect}])"
4042
end.join(",\n ")
4143
meta
@@ -69,6 +71,16 @@ def self.capture_server(mod)
6971
render_template('capture_server.erb', meta)
7072
end
7173

74+
def self.multi_scanner(mod)
75+
meta = mod_meta_common(mod)
76+
meta[:date] = mod.meta['date'].dump
77+
meta[:references] = mod.meta['references'].map do |r|
78+
"[#{r['type'].upcase.dump}, #{r['ref'].dump}]"
79+
end.join(",\n ")
80+
81+
render_template('multi_scanner.erb', meta)
82+
end
83+
7284
def self.dos(mod)
7385
meta = mod_meta_common(mod)
7486
meta[:date] = mod.meta['date'].dump
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
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_batch_size
24+
200
25+
end
26+
27+
def run_batch(ips)
28+
mod = Msf::Modules::External::Bridge.open(<%= meta[:path] %>)
29+
datastore.delete('RHOSTS')
30+
datastore['rhosts'] = ips
31+
mod.run(datastore)
32+
wait_status(mod)
33+
end
34+
end

0 commit comments

Comments
 (0)