123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- #!/usr/bin/env ruby
- # -*- coding: binary -*-
- #
- # $Id$
- #
- # This user interface allows users to interact with a remote framework
- # instance through a XMLRPC socket.
- #
- # $Revision$
- #
- msfbase = __FILE__
- while File.symlink?(msfbase)
- msfbase = File.expand_path(File.readlink(msfbase), File.dirname(msfbase))
- end
- $:.unshift(File.expand_path(File.join(File.dirname(msfbase), 'lib')))
- require 'msfenv'
- $:.unshift(ENV['MSF_LOCAL_LIB']) if ENV['MSF_LOCAL_LIB']
- require 'rex/parser/arguments'
- # Declare the argument parser for msfrpc
- arguments = Rex::Parser::Arguments.new(
- "-a" => [ true, "Connect to this IP address" ],
- "-p" => [ true, "Connect to the specified port instead of 55553" ],
- "-U" => [ true, "Specify the username to access msfrpcd" ],
- "-P" => [ true, "Specify the password to access msfrpcd" ],
- "-S" => [ false, "Disable SSL on the RPC socket" ],
- "-h" => [ false, "Help banner" ]
- )
- opts = {
- 'User' => 'msf',
- 'SSL' => true,
- 'ServerPort' => 55553,
- 'Type' => 'Msg'
- }
- # Parse command line arguments.
- arguments.parse(ARGV) { |opt, idx, val|
- case opt
- when "-a"
- opts['ServerHost'] = val
- when "-S"
- opts['SSL'] = false
- when "-p"
- opts['ServerPort'] = val
- when '-U'
- opts['User'] = val
- when '-P'
- opts['Pass'] = val
- when "-h"
- print("\nUsage: #{File.basename(__FILE__)} <options>\n" + arguments.usage)
- exit
- end
- }
- if(not opts['ServerHost'])
- $stderr.puts "[-] Error: a server IP must be specified (-a)"
- $stderr.puts arguments.usage
- exit(0)
- end
- if(not opts['Pass'])
- $stderr.puts "[-] Error: a password must be specified (-P)"
- $stderr.puts arguments.usage
- exit(0)
- end
- $0 = "msfrpc"
- require 'msf/core/rpc/v10/client'
- require 'rex/ui'
- rpc = Msf::RPC::Client.new(
- :host => opts['ServerHost'],
- :port => opts['ServerPort'],
- :ssl => opts['SSL']
- )
- res = rpc.login(opts['User'], opts['Pass'])
- puts "[*] The 'rpc' object holds the RPC client interface"
- puts ""
- while(ARGV.shift)
- end
- Rex::Ui::Text::IrbShell.new(binding).run
|