95 lines
2.5 KiB
Ruby
Executable File
95 lines
2.5 KiB
Ruby
Executable File
#!/usr/bin/env ruby
|
|
# browser-details - Example BeEF RESTful API script
|
|
# Retrieves browser details and logs for all online hooked browsers
|
|
# Refer to the wiki for info: https://github.com/beefproject/beef/wiki/BeEF-RESTful-API
|
|
##
|
|
require 'rest_client'
|
|
require 'json'
|
|
require 'optparse'
|
|
require 'pp'
|
|
require './lib/string' # colored strings
|
|
require './lib/print' # print wrappers
|
|
require './lib/beef_rest_api'
|
|
|
|
if ARGV.length == 0
|
|
puts "#{$0}:"
|
|
puts "| Example BeEF RESTful API script"
|
|
puts "| Use --help for help"
|
|
puts "|_ Use verbose mode (-v) and debug mode (-d) for more output"
|
|
exit 1
|
|
end
|
|
|
|
# API config
|
|
proto = 'http'
|
|
host = '127.0.0.1'
|
|
port = '3000'
|
|
user = 'beef'
|
|
pass = 'beef'
|
|
|
|
# Command line options
|
|
@debug = false
|
|
@verbose = false
|
|
OptionParser.new do |opts|
|
|
opts.on('-h', '--help', 'Shows this help screen') do
|
|
puts opts
|
|
exit 1
|
|
end
|
|
opts.on('--host HOST', "Set BeEF host (default: #{host})") do |h|
|
|
host = h
|
|
end
|
|
opts.on('--port PORT', "Set BeEF port (default: #{port})") do |p|
|
|
port = p
|
|
end
|
|
opts.on('--user USERNAME', "Set BeEF username (default: #{user})") do |u|
|
|
user = u
|
|
end
|
|
opts.on('--pass PASSWORD', "Set BeEF password (default: #{pass})") do |p|
|
|
pass = p
|
|
end
|
|
opts.on('--ssl', 'Use HTTPS') do
|
|
proto = 'https'
|
|
end
|
|
opts.on('-v', '--verbose', 'Enable verbose output') do
|
|
@verbose = true
|
|
end
|
|
opts.on('-d', '--debug', 'Enable debug output') do
|
|
@debug = true
|
|
end
|
|
end.parse!
|
|
|
|
@api = BeefRestAPI.new proto, host, port, user, pass
|
|
|
|
# Retrieve the RESTful API token
|
|
print_status "Authenticating to: #{proto}://#{host}:#{port}"
|
|
@api.auth
|
|
|
|
# Retrieve BeEF version
|
|
@api.version
|
|
|
|
# Retrieve online hooked browser list
|
|
hooks = @api.online_browsers.flatten
|
|
exit 1 if hooks.empty?
|
|
print_debug hooks
|
|
|
|
# Retrieve hooked browser details
|
|
hooks.each do |hook|
|
|
next if hook['id'].nil?
|
|
print_status "Retrieving details for browser [id: #{hook['id']}]"
|
|
details = @api.browser_details(hook['session'])
|
|
print_debug details
|
|
print_verbose "Hooked Browser [id:#{hook['id']}, ip:#{details['IP']}, type:#{details['BrowserName']}-#{details['BrowserVersion']}, os:#{details['OsName']}] on [#{details['PageURI']}]"
|
|
end
|
|
|
|
# Retrieve hooked browser logs
|
|
hooks.each do |hook|
|
|
next if hook['id'].nil?
|
|
print_status "Retrieving logs for browser [id: #{hook['id']}]"
|
|
logs = @api.browser_logs(hook['session'])
|
|
print_debug logs
|
|
logs['logs'].each do |log|
|
|
next if log['id'].nil?
|
|
print_verbose "#{log['date']} - #{log['event']}"
|
|
end
|
|
end
|
|
|