diff --git a/tools/rest_api_examples/dns b/tools/rest_api_examples/dns index 6e2b9a880..ee48a292a 100755 --- a/tools/rest_api_examples/dns +++ b/tools/rest_api_examples/dns @@ -66,10 +66,28 @@ print_status "Authenticating to: #{proto}://#{host}:#{port}" # Retrieve BeEF version @api.version -# Retrieve online hooked browser list -hooks = @api.online_browsers.flatten -exit 1 if hooks.empty? -print_debug hooks +# Add a rule +print_status "Adding a DNS rule" +pattern = 'beefproject.com' +resource = 'A' +response = ['127.0.0.1', '127.0.0.2'] +result = @api.dns_add_rule(pattern, resource, response) +print_debug result +id = result['id'] + +# Retrieve ruleset +print_status "Retrieving DNS rule set" +rules = @api.dns_ruleset +print_debug rules + +# Retrieve rule details +print_status "Retrieving details for rule [id: #{id}]" +rule = @api.dns_get_rule(id) +print_debug rule + +print_status "Deleting rule [id: #{id}]" +result = @api.dns_delete_rule(id) +print_debug result # Retrieve ruleset print_status "Retrieving DNS rule set" diff --git a/tools/rest_api_examples/lib/beef_rest_api.rb b/tools/rest_api_examples/lib/beef_rest_api.rb index f9ff20823..e6f107773 100644 --- a/tools/rest_api_examples/lib/beef_rest_api.rb +++ b/tools/rest_api_examples/lib/beef_rest_api.rb @@ -1,7 +1,7 @@ class BeefRestAPI # initialize -def initialize proto = 'http', host = '127.0.0.1', port = '3000', user = 'beef', pass = 'beef' +def initialize proto = 'https', host = '127.0.0.1', port = '3000', user = 'beef', pass = 'beef' @user = user @pass = pass @url = "#{proto}://#{host}:#{port}/api/" @@ -327,6 +327,51 @@ def dns_ruleset end end +# add a rule +def dns_add_rule(dns_pattern, dns_resource, dns_response) + dns_response = [dns_response] if dns_response.is_a?(String) + begin + print_verbose "Adding DNS rule [pattern: #{dns_pattern}, resource: #{dns_resource}, response: #{dns_response}]" + response = RestClient.post "#{@url}dns/rule?token=#{@token}", { + 'pattern' => dns_pattern, + 'resource' => dns_resource, + 'response' => dns_response }.to_json, + :content_type => :json, + :accept => :json + details = JSON.parse(response.body) + print_good "Added rule [id: #{details['id']}]" + details + rescue => e + print_error "Could not add DNS rule: #{e.message}" + end +end + +# get rule details +def dns_get_rule(id) + begin + print_verbose "Retrieving DNS rule details [id: #{id}]" + response = RestClient.get "#{@url}dns/rule/#{id}", {:params => {:token => @token}} + details = JSON.parse(response.body) + print_good "Retrieved rule [id: #{details['id']}]" + details + rescue => e + print_error "Could not retrieve DNS rule: #{e.message}" + end +end + +# delete a rule +def dns_delete_rule(id) + begin + response = RestClient.delete "#{@url}dns/rule/#{id}?token=#{@token}" + details = JSON.parse(response.body) + print_good "Deleted rule [id: #{id}]" + details + rescue => e + print_error "Could not delete DNS rule: #{e.message}" + end +end + + ################################################################################ ### WebRTC ################################################################################