diff --git a/core/main/rest/handlers/hookedbrowsers.rb b/core/main/rest/handlers/hookedbrowsers.rb index 88805e0c4..6f5106cfa 100644 --- a/core/main/rest/handlers/hookedbrowsers.rb +++ b/core/main/rest/handlers/hookedbrowsers.rb @@ -29,6 +29,7 @@ module BeEF 'Expires' => '0' end + # @note Get online and offline hooked browsers details (like name, version, os, ip, port, ...) get '/' do online_hooks = hb_to_json(BeEF::Core::Models::HookedBrowser.all(:lastseen.gte => (Time.new.to_i - 15))) offline_hooks = hb_to_json(BeEF::Core::Models::HookedBrowser.all(:lastseen.lt => (Time.new.to_i - 15))) diff --git a/core/main/rest/handlers/logs.rb b/core/main/rest/handlers/logs.rb index 753b4a7fd..d33ff9522 100644 --- a/core/main/rest/handlers/logs.rb +++ b/core/main/rest/handlers/logs.rb @@ -23,10 +23,47 @@ module BeEF before do error 401 unless params[:token] == config.get('beef.api_token') + headers 'Content-Type' => 'application/json; charset=UTF-8', + 'Pragma' => 'no-cache', + 'Cache-Control' => 'no-cache', + 'Expires' => '0' end + # @note Get all global logs get '/' do - "return global logs or HB logs" + logs = BeEF::Core::Models::Log.all() + logs_to_json(logs) + end + + # @note Get hooked browser logs + get '/:session' do + hb = BeEF::Core::Models::HookedBrowser.first(:session => params[:session]) + error 401 unless hb != nil + + logs = BeEF::Core::Models::Log.all(:hooked_browser_id => hb.id) + logs_to_json(logs) + end + + private + + def logs_to_json(logs) + logs_json = [] + count = logs.length + + logs.each do |log| + logs_json << { + 'id' => log.id.to_i, + 'date' => log.date.to_s, + 'event' => log.event.to_s, + 'type' => log.type.to_s + } + end + + { + 'logs_count' => count, + 'logs' => logs_json + }.to_json if not logs_json.empty? + end end