Path: blob/master/modules/auxiliary/scanner/nessus/nessus_rest_login.rb
19567 views
##1# This module requires Metasploit: https://metasploit.com/download2# Current source: https://github.com/rapid7/metasploit-framework3##45require 'metasploit/framework/login_scanner/nessus'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' => 'Nessus RPC Interface Login Utility',19'Description' => %q{20This module will attempt to authenticate to a Nessus server RPC interface.21},22'Author' => [ 'void_in' ],23'License' => MSF_LICENSE,24'DefaultOptions' => {25'SSL' => true,26},27'Notes' => {28'Reliability' => UNKNOWN_RELIABILITY,29'Stability' => UNKNOWN_STABILITY,30'SideEffects' => UNKNOWN_SIDE_EFFECTS31}32)33)34register_options(35[36Opt::RPORT(8834),37OptString.new('TARGETURI', [ true, 'The path to the Nessus server login API', '/session']),38]39)4041deregister_options('HttpUsername', 'HttpPassword')42end4344# Initializes CredentialCollection and Nessus Scanner45def init(ip)46@cred_collection = build_credential_collection(47password: datastore['PASSWORD'],48username: datastore['USERNAME']49)5051@scanner = Metasploit::Framework::LoginScanner::Nessus.new(52configure_http_login_scanner(53host: ip,54port: datastore['RPORT'],55uri: datastore['TARGETURI'],56proxies: datastore['PROXIES'],57cred_details: @cred_collection,58stop_on_success: datastore['STOP_ON_SUCCESS'],59bruteforce_speed: datastore['BRUTEFORCE_SPEED'],60connection_timeout: 561)62)63@scanner.ssl = datastore['SSL']64@scanner.ssl_version = datastore['SSLVERSION']65end6667# Reports a good login credential68def do_report(ip, port, result)69service_data = {70address: ip,71port: port,72service_name: 'http',73protocol: 'tcp',74workspace_id: myworkspace_id75}7677credential_data = {78module_fullname: self.fullname,79origin_type: :service,80private_data: result.credential.private,81private_type: :password,82username: result.credential.public,83}.merge(service_data)8485login_data = {86core: create_credential(credential_data),87last_attempted_at: DateTime.now,88status: result.status,89proof: result.proof90}.merge(service_data)9192create_credential_login(login_data)93end9495# Attempts to login96def bruteforce(ip)97@scanner.scan! do |result|98case result.status99when Metasploit::Model::Login::Status::SUCCESSFUL100print_brute :level => :good, :ip => ip, :msg => "Success: '#{result.credential}'"101do_report(ip, rport, result)102when Metasploit::Model::Login::Status::UNABLE_TO_CONNECT103vprint_brute :level => :verror, :ip => ip, :msg => result.proof104invalidate_login(105address: ip,106port: rport,107protocol: 'tcp',108public: result.credential.public,109private: result.credential.private,110realm_key: result.credential.realm_key,111realm_value: result.credential.realm,112status: result.status,113proof: result.proof114)115when Metasploit::Model::Login::Status::INCORRECT116vprint_brute :level => :verror, :ip => ip, :msg => "Failed: '#{result.credential}'"117invalidate_login(118address: ip,119port: rport,120protocol: 'tcp',121public: result.credential.public,122private: result.credential.private,123realm_key: result.credential.realm_key,124realm_value: result.credential.realm,125status: result.status,126proof: result.proof127)128end129end130end131132# Start here133def run_host(ip)134init(ip)135unless @scanner.check_setup136print_brute :level => :error, :ip => ip, :msg => 'Target is not a Tenable Nessus server'137return138end139140bruteforce(ip)141end142end143144145