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 = ''
+ d.each{|v|
+ html += "- #{v.to_s}
"
+ }
+ return 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 = ''
+ d.each{|k,v|
+ html += "- #{k.to_s}: #{v.to_s}
"
+ }
+ return 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;
}
}]