rapid7/metasploit-framework

View on GitHub
scripts/meterpreter/multiscript.rb

Summary

Maintainability
A
45 mins
Test Coverage
##
# WARNING: Metasploit no longer maintains or accepts meterpreter scripts.
# If you'd like to improve this script, please try to port it as a post
# module instead. Thank you.
##



#Meterpreter script for running multiple scripts on a Meterpreter Session
#Provided by Carlos Perez at carlos_perez[at]darkoperator[dot]com
#Version: 0.2
################## Variable Declarations ##################
session = client
# Setting Argument

@@exec_opts = Rex::Parser::Arguments.new(
  "-h" => [ false,"Help menu."                        ],
  "-c" => [ true,"Collection of scripts to execute. Each script command must be enclosed in double quotes and separated by a semicolon."],
  "-r" => [ true,"Text file with list of commands, one per line."]
)
#Setting Argument variables
commands = ""
script = []
help = 0

################## Function Declarations ##################
# Function for running a list of scripts stored in a array
def script_exec(session,scrptlst)
  print_status("Running script List ...")
  scrptlst.each_line do |scrpt|
    next if scrpt.strip.length < 1
    next if scrpt[0,1] == "#"

    begin
      script_components = scrpt.split
      script = script_components.shift
      script_args = script_components
      print_status "\trunning script #{scrpt.chomp}"
      session.execute_script(script, script_args)
    rescue ::Exception => e
      print_error("Error: #{e.class} #{e}")
      print_error("Error in script: #{scrpt}")
    end
  end
end

def usage
  print_line("Multi Script Execution Meterpreter Script ")
  print_line(@@exec_opts.usage)
end

################## Main ##################
@@exec_opts.parse(args) do |opt, idx, val|
  case opt

  when "-c"
    commands = val.gsub(/;/,"\n")
  when "-r"
    script = val
    if not ::File.exist?(script)
      raise "Script List File does not exist!"
    else
      ::File.open(script, "rb").each_line do |line|
        commands << line
      end
    end
  when "-h"
    help = 1
  end
end


if args.length == 0 or help == 1
  usage
else
  print_status("Running Multiscript script.....")
  script_exec(session,commands)
end