diff --git a/extensions/admin_ui/controllers/requester/requester.rb b/extensions/admin_ui/controllers/requester/requester.rb index 7158a86f3..8f8475a5b 100644 --- a/extensions/admin_ui/controllers/requester/requester.rb +++ b/extensions/admin_ui/controllers/requester/requester.rb @@ -85,6 +85,7 @@ class Requester < BeEF::Extension::AdminUI::HttpController :request => raw_request, :method => request.request_method, :domain => request.host, + :port => request.port, :path => request.unparsed_uri, :request_date => Time.now, :hooked_browser_id => zombie.id @@ -119,6 +120,7 @@ class Requester < BeEF::Extension::AdminUI::HttpController history << { 'id' => http.id, 'domain' => http.domain, + 'port' => http.port, 'path' => http.path, 'has_ran' => http.has_ran, 'method' => http.method, @@ -154,6 +156,7 @@ class Requester < BeEF::Extension::AdminUI::HttpController 'response' => http_db.response_data, 'response_headers' => http_db.response_headers, 'domain' => http_db.domain, + 'port' => http_db.port, 'path' => http_db.path, 'date' => http_db.request_date, 'has_ran' => http_db.has_ran diff --git a/extensions/admin_ui/media/javascript/ui/panel/tabs/ZombieTabRequester.js b/extensions/admin_ui/media/javascript/ui/panel/tabs/ZombieTabRequester.js index 362e0aa51..90b85588e 100644 --- a/extensions/admin_ui/media/javascript/ui/panel/tabs/ZombieTabRequester.js +++ b/extensions/admin_ui/media/javascript/ui/panel/tabs/ZombieTabRequester.js @@ -74,7 +74,7 @@ ZombieTab_Requester = function(zombie) { autoLoad: false, root: 'history', - fields: ['domain', 'method', 'request_date', 'response_date','id', 'has_ran', 'path','response_status_code', 'response_status_text', 'response_port_status'], + fields: ['domain', 'port', 'method', 'request_date', 'response_date','id', 'has_ran', 'path','response_status_code', 'response_status_text', 'response_port_status'], sortInfo: {field: 'request_date', direction: 'DESC'}, baseParams: { @@ -133,14 +133,15 @@ ZombieTab_Requester = function(zombie) { columns: [ {header: 'Id', width: 10, sortable: true, dataIndex: 'id', hidden:true}, {header: 'Domain', sortable: true, dataIndex: 'domain'}, - {header: 'Method', width: 30, sortable: true, dataIndex: 'method'}, + {header: 'Port', width: 30, sortable: true, dataIndex: 'port'}, + {header: 'Method', width: 30, sortable: true, dataIndex: 'method'}, {header: 'Path', sortable: true, dataIndex: 'path'}, - {header: 'Res Code', width: 35, sortable: true, dataIndex: 'response_status_code'}, - {header: 'Res TextCode', width: 35, sortable: true, dataIndex: 'response_status_text'}, - {header: 'Port Status', width: 35, sortable: true, dataIndex: 'response_port_status'}, + {header: 'Res Code', width: 35, sortable: true, dataIndex: 'response_status_code'}, + {header: 'Res TextCode', width: 35, sortable: true, dataIndex: 'response_status_text'}, + {header: 'Port Status', width: 35, sortable: true, dataIndex: 'response_port_status'}, {header: 'Processed', width: 30, sortable: true, dataIndex: 'has_ran'}, {header: 'Req Date', width: 50, sortable: true, dataIndex: 'request_date'}, - {header: 'Res Date', width: 50, sortable: true, dataIndex: 'response_date'} + {header: 'Res Date', width: 50, sortable: true, dataIndex: 'response_date'} ], @@ -250,12 +251,9 @@ ZombieTab_Requester = function(zombie) { if(!value) { value = "GET /demos/secret_page.html HTTP/1.1\n"; - - if(zombie.domain) { - value += "Host: "+zombie.domain.split(':')[0]+"\n"; - } else { - value += "Host: \n"; - } + + if (zombie.domain) value += "Host: "+zombie.domain+"\n"; + else value += "Host: \n"; } form.get('raw-request-zombie-'+zombie.session).value = value; diff --git a/extensions/proxy/handlers/zombie/handler.rb b/extensions/proxy/handlers/zombie/handler.rb index acb48675d..a6efd62e6 100644 --- a/extensions/proxy/handlers/zombie/handler.rb +++ b/extensions/proxy/handlers/zombie/handler.rb @@ -49,19 +49,13 @@ module Zombie raise 'Invalid hostport' if not BeEF::Filters.nums_only?(hostport) #check the target hostport end - # Append port to domain string if not 80 or 443 - if req.port != 80 or req.port != 443 - domain = req.host.to_s + ':' + req.port.to_s - else - domain = req.host.to_s - end - # Saves the new HTTP request to the db for processing by browser. # IDs are created and incremented automatically by DataMapper. http = H.new( :request => req, :method => req.request_method.to_s, - :domain => domain, + :domain => req.host, + :port => req.port, :path => req.path.to_s, :request_date => Time.now, :hooked_browser_id => hooked_browser_id @@ -70,7 +64,7 @@ module Zombie # Starts a new thread scoped to this Handler instance, in order to minimize performance degradation # while waiting for the HTTP response to be stored in the db. - print_info("[PROXY] Thread started in order to process request ##{http.id} to [#{req.path.to_s}] on domain [#{domain}]") + print_info("[PROXY] Thread started in order to process request ##{http.id} to [#{req.path.to_s}] on domain [#{req.host}:#{req.port}]") @response_thread = Thread.new do while !H.first(:id => http.id).has_ran sleep 0.5 @@ -79,7 +73,7 @@ module Zombie end @response_thread.join - print_info("[PROXY] Response for request ##{http.id} to [#{req.path.to_s}] on domain [#{domain}] correctly processed") + print_info("[PROXY] Response for request ##{http.id} to [#{req.path.to_s}] on domain [#{req.host}:#{req.port}] correctly processed") res.body = @response['response_data'] diff --git a/extensions/requester/models/http.rb b/extensions/requester/models/http.rb index 0441b119a..b02c93459 100644 --- a/extensions/requester/models/http.rb +++ b/extensions/requester/models/http.rb @@ -57,6 +57,9 @@ module Models # The domain on which perform the request. property :domain, Text, :lazy => false + # The port on which perform the request. + property :port, Text, :lazy => false + # Boolean value to say if the request was cross-domain property :has_ran, Boolean, :default => false