diff --git a/core/loader.rb b/core/loader.rb index 50b62403f..3f0fc2c23 100644 --- a/core/loader.rb +++ b/core/loader.rb @@ -22,6 +22,9 @@ require 'term/ansicolor' # Include the filters require 'core/filters' +# Include the filters +require 'core/renderers' + # Include our patches for ruby and gems require 'core/ruby' diff --git a/core/renderers.rb b/core/renderers.rb new file mode 100644 index 000000000..bcd390d06 --- /dev/null +++ b/core/renderers.rb @@ -0,0 +1,11 @@ +module BeEF +module Renderers + + + +end +end + +# Include the filters +require 'core/renderers/html' +require 'core/renderers/html/basic' diff --git a/core/renderers/html.rb b/core/renderers/html.rb new file mode 100644 index 000000000..a1acf505c --- /dev/null +++ b/core/renderers/html.rb @@ -0,0 +1,20 @@ +module BeEF +module Renderers +module HTML + + #fires the HTML render function, attempting to match the appropriate data type + def self.render(cat, type, data) + kclass = self.const_get(cat.capitalize) + if kclass + if kclass.respond_to?(type.downcase) + return kclass.send type.downcase.to_sym, data + else + return kclass.send :string, data + end + end + return data.to_s + end + +end +end +end diff --git a/core/renderers/html/basic.rb b/core/renderers/html/basic.rb new file mode 100644 index 000000000..65617e003 --- /dev/null +++ b/core/renderers/html/basic.rb @@ -0,0 +1,40 @@ +module BeEF +module Renderers +module HTML +module Basic + + #renders basic string + def self.string(d) + return '

'+d.to_s+'

' + end + + #renders list of strings from an array + def self.array(d) + if d.kind_of?(Array) + html = '' + end + print_debug "BeEF::Renderers::HTML::Basic.array encountered a non-array data type" + return self.string(d) + end + + #renders list of strings from a hash with key values + def self.hash(d) + if d.kind_of?(Hash) + html = '' + end + print_debug "BeEF::Renderers::HTML::Basic.hash encountered a non-hash data type" + return self.string(d) + end + +end +end +end +end diff --git a/extensions/admin_ui/controllers/modules/modules.rb b/extensions/admin_ui/controllers/modules/modules.rb index fe6721602..a1f10c4cf 100644 --- a/extensions/admin_ui/controllers/modules/modules.rb +++ b/extensions/admin_ui/controllers/modules/modules.rb @@ -513,8 +513,16 @@ class Modules < BeEF::Extension::AdminUI::HttpController resultsdb = BeEF::Core::Models::Result.all(:command_id => command_id) raise WEBrick::HTTPStatus::BadRequest, "Command id result is nil" if resultsdb.nil? - resultsdb.each{ |result| results.push({'date' => result.date, 'data' => JSON.parse(result.data)}) } - + resultsdb.each{ |result| + begin + r = JSON.parse(result.data) + results.push({'date' => result.date, 'data' => BeEF::Renderers::HTML.render('basic', r['type'], r['data'])}) + rescue JSON::ParserError => e + print_debug "Invalid JSON on command_id: #{command_id}" + print_error "Unable to JSON parse result set from database" + end + } + @body = { 'success' => 'true', 'command_module_name' => command_module.name, diff --git a/extensions/admin_ui/media/javascript/ui/panel/common.js b/extensions/admin_ui/media/javascript/ui/panel/common.js index 21241d1e9..f5ae17033 100644 --- a/extensions/admin_ui/media/javascript/ui/panel/common.js +++ b/extensions/admin_ui/media/javascript/ui/panel/common.js @@ -243,7 +243,7 @@ function genExisingExploitPanel(panel, command_id, zombie, sb) { sortable: false, renderer: function(value, p, record) { html = String.format("
{0}
", value); - html += '

'; + /*html += '

'; for(index in record.data.data) { result = record.data.data[index]; @@ -252,7 +252,8 @@ function genExisingExploitPanel(panel, command_id, zombie, sb) { html += String.format('{0}: {1}
', index, result); } - html += '

'; + html += '

';*/ + html += record.data.data; return html; } }]