Path: blob/master/modules/auxiliary/scanner/ftp/anonymous.rb
19778 views
##1# This module requires Metasploit: https://metasploit.com/download2# Current source: https://github.com/rapid7/metasploit-framework3##45class MetasploitModule < Msf::Auxiliary6include Msf::Exploit::Remote::Ftp7include Msf::Auxiliary::Scanner8include Msf::Auxiliary::Report910def initialize11super(12'Name' => 'Anonymous FTP Access Detection',13'Description' => 'Detect anonymous (read/write) FTP server access.',14'References' => [15['URL', 'https://en.wikipedia.org/wiki/File_Transfer_Protocol#Anonymous_FTP'],16],17'Author' => 'Matteo Cantoni <goony[at]nothink.org>',18'License' => MSF_LICENSE19)2021register_options(22[23Opt::RPORT(21),24]25)26end2728def run_host(target_host)29begin30res = connect_login(true, false)3132banner.strip! if banner3334dir = Rex::Text.rand_text_alpha(8)35if res36write_check = send_cmd(['MKD', dir], true)3738if write_check && write_check =~ /^2/39send_cmd(['RMD', dir], true)4041print_good("#{target_host}:#{rport} - Anonymous READ/WRITE (#{banner})")42access_type = 'Read/Write'43else44print_good("#{target_host}:#{rport} - Anonymous READ (#{banner})")45access_type = 'Read-only'46end47register_creds(target_host, access_type)48end4950disconnect51rescue ::Interrupt52raise $ERROR_INFO53rescue ::Rex::ConnectionError, ::IOError54end55end5657def register_creds(target_host, access_type)58# Build service information59service_data = {60address: target_host,61port: datastore['RPORT'],62service_name: 'ftp',63protocol: 'tcp',64workspace_id: myworkspace_id65}6667# Build credential information68credential_data = {69origin_type: :service,70module_fullname: self.fullname,71private_data: datastore['FTPPASS'],72private_type: :password,73username: datastore['FTPUSER'],74workspace_id: myworkspace_id75}7677credential_data.merge!(service_data)78credential_core = create_credential(credential_data)7980# Assemble the options hash for creating the Metasploit::Credential::Login object81login_data = {82access_level: access_type,83core: credential_core,84last_attempted_at: DateTime.now,85status: Metasploit::Model::Login::Status::SUCCESSFUL,86workspace_id: myworkspace_id87}8889login_data.merge!(service_data)90create_credential_login(login_data)91end92end939495