Skip to content

Commit 059d84e

Browse files
committed
More consistent *print_* and Rex::Ui::Text::Table for sunrpc_portmapper
1 parent 4ecb892 commit 059d84e

File tree

1 file changed

+25
-15
lines changed

1 file changed

+25
-15
lines changed

modules/auxiliary/scanner/misc/sunrpc_portmapper.rb

Lines changed: 25 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,11 @@ def initialize
2525
],
2626
'License' => MSF_LICENSE
2727
)
28-
29-
register_options([], self.class)
3028
end
3129

3230
def run_host(ip)
33-
vprint_status "#{ip}:#{rport} - SunRPC - Enumerating programs"
31+
peer = "#{ip}:#{rport}"
32+
vprint_status "#{peer} - SunRPC - Enumerating programs"
3433

3534
begin
3635
program = 100000
@@ -44,34 +43,45 @@ def run_host(ip)
4443
progs = resp[3,1].unpack('C')[0]
4544
maps = []
4645
if (progs == 0x01)
47-
print_good("#{ip}:#{rport} - Programs available")
4846
while XDR.decode_int!(resp) == 1 do
4947
map = XDR.decode!(resp, Integer, Integer, Integer, Integer)
5048
maps << map
5149
end
5250
end
5351
sunrpc_destroy
52+
return if maps.empty?
53+
print_good("#{peer} - Found #{maps.size} programs available")
54+
55+
table = Rex::Ui::Text::Table.new(
56+
'Header' => "SunRPC Programs for #{ip}.",
57+
'Indent' => 1,
58+
'Columns' => %w(Name Number Version Port Protocol)
59+
)
5460

55-
lines = []
5661
maps.each do |map|
57-
prog, vers, prot, port = map[0,4]
58-
prot = if prot == 0x06; "tcp"
59-
elsif prot == 0x11; "udp"
60-
end
61-
lines << "\t#{progresolv(prog)} - #{port}/#{prot}"
62+
prog, vers, prot_num, port = map[0,4]
63+
thing = "RPC Program ##{prog} v#{vers} on port #{port} w/ protocol #{prot_num}"
64+
if prot_num == 0x06
65+
proto = 'tcp'
66+
elsif prot_num == 0x11
67+
proto = 'udp'
68+
else
69+
print_error("#{peer}: unknown protocol number for #{thing}")
70+
next
71+
end
6272

73+
resolved = progresolv(prog)
74+
table << [ resolved, prog, vers, port, proto ]
6375
report_service(
6476
:host => ip,
6577
:port => port,
66-
:proto => prot,
67-
:name => progresolv(prog),
78+
:proto => proto,
79+
:name => resolved,
6880
:info => "Prog: #{prog} Version: #{vers} - via portmapper"
6981
)
7082
end
7183

72-
# So we don't print a line for every program version
73-
lines.uniq.each {|line| print_line(line)}
74-
84+
print_good(table.to_s)
7585
rescue ::Rex::Proto::SunRPC::RPCTimeout
7686
end
7787
end

0 commit comments

Comments
 (0)