Uses terminal-table to display wp_users

This commit is contained in:
erwanlr
2013-04-13 22:25:34 +02:00
parent 4f182dc41b
commit 4af7a19eb0
5 changed files with 63 additions and 19 deletions

View File

@@ -5,6 +5,7 @@ gem "typhoeus", "=0.6.2"
gem "ethon", "=0.5.10" gem "ethon", "=0.5.10"
gem "nokogiri" gem "nokogiri"
gem "json" gem "json"
gem "terminal-table"
group :development, :test do group :development, :test do
gem "webmock", ">=1.9.3" gem "webmock", ">=1.9.3"

View File

@@ -3,27 +3,26 @@
class WpUsers < WpItems class WpUsers < WpItems
module Output module Output
# TODO : create a generic method to output tabs # @param [ Hash ] options
def output(left_margin = '') # @option options[ Boolean ] :show_password Output the password column
max_id_length = self.sort { |a, b| a.id.to_s.length <=> b.id.to_s.length }.last.id.to_s.length #
max_login_length = self.sort { |a, b| a.login.length <=> b.login.length }.last.login.length # @return [ void ]
max_display_name_length = self.sort { |a, b| a.display_name.length <=> b.display_name.length }.last.display_name.length def output(options = {})
inner_space = 2 rows = []
id_length = (max_id_length + inner_space * 2) /2 * 2 headings = ['Id', 'Name']
login_length = max_login_length + inner_space * 2 headings << 'Password' if options[:show_password]
display_name_length = max_display_name_length + inner_space * 2
puts left_margin + '+' * (id_length + login_length + display_name_length + 4) self.each do |wp_user|
puts left_margin + '|' + 'id'.center(id_length) + '|' + 'login'.center(login_length) + '|' + 'display name'.center(display_name_length) + '|' row = [wp_user.id, wp_user.display_name]
puts left_margin + '|' + '+' * (id_length + login_length + display_name_length + 2) + '|' row << wp_user.password if options[:show_password]
rows << row
self.each do |u|
puts left_margin + '|' + u.id.to_s.center(id_length) + '|' + u.login.center(login_length) + '|' + u.display_name.center(display_name_length) + '|'
end
puts left_margin + '+' * (id_length + login_length + display_name_length + 4)
end end
puts Terminal::Table.new(headings: headings,
rows: rows,
style: { margin_left: options[:margin_left] || '' })
end
end end
end end

View File

@@ -79,3 +79,44 @@ class File
%x{file -i #{file_path}}[%r{charset=([^\n]+)\n}, 1] %x{file -i #{file_path}}[%r{charset=([^\n]+)\n}, 1]
end end
end end
module Terminal
class Table
def render
separator = Separator.new(self)
buffer = [separator]
unless @title.nil?
buffer << Row.new(self, [title_cell_options])
buffer << separator
end
unless @headings.cells.empty?
buffer << @headings
buffer << separator
end
buffer += @rows
buffer << separator
buffer.map { |r| style.margin_left + r.render }.join("\n")
end
alias :to_s :render
class Style
@@defaults = {
:border_x => "-", :border_y => "|", :border_i => "+",
:padding_left => 1, :padding_right => 1,
:margin_left => '',
:width => nil, :alignment => nil
}
attr_accessor :margin_left
attr_accessor :border_x
attr_accessor :border_y
attr_accessor :border_i
attr_accessor :padding_left
attr_accessor :padding_right
attr_accessor :width
attr_accessor :alignment
end
end
end

View File

@@ -27,6 +27,7 @@ begin
require 'typhoeus' require 'typhoeus'
require 'json' require 'json'
require 'nokogiri' require 'nokogiri'
require 'terminal-table'
# Custom libs # Custom libs
require 'common/browser' require 'common/browser'
require 'common/custom_option_parser' require 'common/custom_option_parser'

View File

@@ -277,7 +277,7 @@ def main
puts puts
puts green('[+]') + " We found the following #{wp_users.size} user/s :" puts green('[+]') + " We found the following #{wp_users.size} user/s :"
wp_users.output(' ' * 4) wp_users.output(margin_left: ' ' * 4)
end end
else else
@@ -307,6 +307,8 @@ def main
wp_users.brute_force(wpscan_options.wordlist, wp_users.brute_force(wpscan_options.wordlist,
show_progression: true, show_progression: true,
verbose: wpscan_options.verbose) verbose: wpscan_options.verbose)
puts
wp_users.output(show_password: true, margin_left: ' ' * 2)
else else
puts puts
puts 'Brute forcing aborted' puts 'Brute forcing aborted'