See #624. Adds the module ranking to all text-base displays, this may be enough to close the ticket

git-svn-id: file:///home/svn/framework3/trunk@7725 4d416f70-5f16-0410-b530-b9f4589650da
unstable
HD Moore 2009-12-06 14:35:16 +00:00
parent ff83f1cd2f
commit 8df719e7a8
2 changed files with 48 additions and 23 deletions

View File

@ -43,12 +43,12 @@ class ReadableText
'Header' => h, 'Header' => h,
'Columns' => 'Columns' =>
[ [
'Id', 'Id',
'Name', 'Name',
]) ])
mod.targets.each_with_index { |target, idx| mod.targets.each_with_index { |target, idx|
tbl << [ idx.to_s, target.name || 'All' ] tbl << [ idx.to_s, target.name || 'All' ]
} }
tbl.to_s + "\n" tbl.to_s + "\n"
@ -63,7 +63,7 @@ class ReadableText
'Header' => h, 'Header' => h,
'Columns' => 'Columns' =>
[ [
'Id', 'Id',
'Name', 'Name',
]) ])
@ -71,7 +71,7 @@ class ReadableText
tbl.to_s + "\n" tbl.to_s + "\n"
end end
# #
# Dumps an auxiliary's actions # Dumps an auxiliary's actions
# #
@ -86,12 +86,12 @@ class ReadableText
]) ])
mod.actions.each_with_index { |target, idx| mod.actions.each_with_index { |target, idx|
tbl << [ target.name || 'All' , target.description || '' ] tbl << [ target.name || 'All' , target.description || '' ]
} }
tbl.to_s + "\n" tbl.to_s + "\n"
end end
# #
# Dumps the table of payloads that are compatible with the supplied # Dumps the table of payloads that are compatible with the supplied
# exploit. # exploit.
@ -102,7 +102,7 @@ class ReadableText
'Header' => h, 'Header' => h,
'Columns' => 'Columns' =>
[ [
'Name', 'Name',
'Description', 'Description',
]) ])
@ -123,6 +123,7 @@ class ReadableText
output << " Platform: #{mod.platform_to_s}\n" output << " Platform: #{mod.platform_to_s}\n"
output << " Privileged: " + (mod.privileged? ? "Yes" : "No") + "\n" output << " Privileged: " + (mod.privileged? ? "Yes" : "No") + "\n"
output << " License: #{mod.license}\n" output << " License: #{mod.license}\n"
output << " Rank: #{mod.rank_to_s.capitalize}\n"
output << "\n" output << "\n"
# Authors # Authors
@ -135,14 +136,14 @@ class ReadableText
# Targets # Targets
output << "Available targets:\n" output << "Available targets:\n"
output << dump_exploit_targets(mod, indent) output << dump_exploit_targets(mod, indent)
# Options # Options
if (mod.options.has_options?) if (mod.options.has_options?)
output << "Basic options:\n" output << "Basic options:\n"
output << dump_options(mod, indent) output << dump_options(mod, indent)
output << "\n" output << "\n"
end end
# Payload information # Payload information
if (mod.payload_info.length) if (mod.payload_info.length)
output << "Payload information:\n" output << "Payload information:\n"
@ -154,7 +155,7 @@ class ReadableText
end end
output << "\n" output << "\n"
end end
# Description # Description
output << "Description:\n" output << "Description:\n"
output << word_wrap(Rex::Text.compress(mod.description)) output << word_wrap(Rex::Text.compress(mod.description))
@ -168,7 +169,7 @@ class ReadableText
} }
output << "\n" output << "\n"
end end
return output return output
end end
@ -181,6 +182,7 @@ class ReadableText
output << " Name: #{mod.name}\n" output << " Name: #{mod.name}\n"
output << " Version: #{mod.version}\n" output << " Version: #{mod.version}\n"
output << " License: #{mod.license}\n" output << " License: #{mod.license}\n"
output << " Rank: #{mod.rank_to_s.capitalize}\n"
output << "\n" output << "\n"
# Authors # Authors
@ -196,7 +198,7 @@ class ReadableText
output << dump_options(mod, indent) output << dump_options(mod, indent)
output << "\n" output << "\n"
end end
# Description # Description
output << "Description:\n" output << "Description:\n"
output << word_wrap(Rex::Text.compress(mod.description)) output << word_wrap(Rex::Text.compress(mod.description))
@ -210,11 +212,11 @@ class ReadableText
} }
output << "\n" output << "\n"
end end
return output return output
end end
# #
# Dumps information about a payload module. # Dumps information about a payload module.
# #
def self.dump_payload_module(mod, indent = '') def self.dump_payload_module(mod, indent = '')
@ -226,6 +228,7 @@ class ReadableText
output << " Arch: #{mod.arch_to_s}\n" output << " Arch: #{mod.arch_to_s}\n"
output << "Needs Admin: " + (mod.privileged? ? "Yes" : "No") + "\n" output << "Needs Admin: " + (mod.privileged? ? "Yes" : "No") + "\n"
output << " Total size: #{mod.size}\n" output << " Total size: #{mod.size}\n"
output << " Rank: #{mod.rank_to_s.capitalize}\n"
output << "\n" output << "\n"
# Authors # Authors
@ -246,7 +249,7 @@ class ReadableText
output << "Description:\n" output << "Description:\n"
output << word_wrap(Rex::Text.compress(mod.description)) output << word_wrap(Rex::Text.compress(mod.description))
output << "\n\n" output << "\n\n"
return output return output
end end
@ -260,6 +263,7 @@ class ReadableText
output << " Version: #{mod.version}\n" output << " Version: #{mod.version}\n"
output << " Platform: #{mod.platform_to_s}\n" output << " Platform: #{mod.platform_to_s}\n"
output << " Arch: #{mod.arch_to_s}\n" output << " Arch: #{mod.arch_to_s}\n"
output << " Rank: #{mod.rank_to_s.capitalize}\n"
output << "\n" output << "\n"
# Authors # Authors
@ -268,12 +272,12 @@ class ReadableText
output << indent + author.to_s + "\n" output << indent + author.to_s + "\n"
} }
output << "\n" output << "\n"
# Description # Description
output << "Description:\n" output << "Description:\n"
output << word_wrap(Rex::Text.compress(mod.description)) output << word_wrap(Rex::Text.compress(mod.description))
output << "\n\n" output << "\n\n"
return output return output
end end
@ -290,7 +294,7 @@ class ReadableText
'Indent' => indent.length, 'Indent' => indent.length,
'Columns' => 'Columns' =>
[ [
'Name', 'Name',
'Current Setting', 'Current Setting',
'Required', 'Required',
'Description' 'Description'
@ -301,7 +305,7 @@ class ReadableText
next if (opt.advanced?) next if (opt.advanced?)
next if (opt.evasion?) next if (opt.evasion?)
val = mod.datastore[name] || opt.default.to_s val = mod.datastore[name] || opt.default.to_s
tbl << [ name, val.to_s, opt.required? ? "yes" : "no", opt.desc ] tbl << [ name, val.to_s, opt.required? ? "yes" : "no", opt.desc ]
@ -347,7 +351,7 @@ class ReadableText
next if (!opt.evasion?) next if (!opt.evasion?)
val = mod.datastore[name] || opt.default || '' val = mod.datastore[name] || opt.default || ''
desc = word_wrap(opt.desc, indent.length + 3) desc = word_wrap(opt.desc, indent.length + 3)
desc = desc.slice(indent.length + 3, desc.length) desc = desc.slice(indent.length + 3, desc.length)
@ -358,7 +362,7 @@ class ReadableText
return output return output
end end
# #
# Dumps the contents of a datastore. # Dumps the contents of a datastore.
# #
@ -368,7 +372,7 @@ class ReadableText
'Header' => name, 'Header' => name,
'Columns' => 'Columns' =>
[ [
'Name', 'Name',
'Value' 'Value'
]) ])
@ -383,7 +387,7 @@ class ReadableText
# Dumps the list of active sessions. # Dumps the list of active sessions.
# #
def self.dump_sessions(framework, verbose = false, indent = DefaultIndent, col = DefaultColumnWrap) def self.dump_sessions(framework, verbose = false, indent = DefaultIndent, col = DefaultColumnWrap)
columns = columns =
[ [
'Id', 'Id',
'Description', 'Description',
@ -458,3 +462,4 @@ class ReadableText
end end
end end end end

View File

@ -54,6 +54,12 @@ class Module
RankingName[rank] RankingName[rank]
end end
#
# Returns this module's ranking as a string for display.
#
def rank_to_h
rank_to_s.gsub('Rank', '').downcase
end
# #
# The module's name that is assigned it it by the framework # The module's name that is assigned it it by the framework
# or derived from the path that the module is loaded from. # or derived from the path that the module is loaded from.
@ -195,6 +201,20 @@ class Module
return self.class.rank return self.class.rank
end end
#
# Returns the module's rank in string format.
#
def rank_to_s
return self.class.rank_to_s
end
#
# Returns the module's rank in display format.
#
def rank_to_h
return self.class.rank_to_h
end
# #
# Returns the module's framework short name. This is a # Returns the module's framework short name. This is a
# possibly conflicting name used for things like console # possibly conflicting name used for things like console