Class: Msf::Ui::Console::CommandDispatcher::Post

Inherits:
Object
  • Object
show all
Includes:
ModuleCommandDispatcher
Defined in:
lib/msf/ui/console/command_dispatcher/post.rb

Overview

Recon module command dispatcher.

Constant Summary collapse

@@post_opts =
Rex::Parser::Arguments.new(
  "-h" => [ false, "Help banner."                                          ],
  "-j" => [ false, "Run in the context of a job."                          ],
  "-o" => [ true,  "A comma separated list of options in VAR=VAL format."  ],
  "-q" => [ false, "Run the module in quiet mode with no output"           ]
)

Instance Attribute Summary

Attributes included from Msf::Ui::Console::CommandDispatcher

#driver

Attributes included from Rex::Ui::Text::DispatcherShell::CommandDispatcher

#shell, #tab_complete_items

Instance Method Summary collapse

Methods included from ModuleCommandDispatcher

#check_multiple, #check_progress, #check_show_progress, #check_simple, #cmd_check, #cmd_check_help, #cmd_reload, #cmd_reload_help, #mod, #mod=, #reload, #report_vuln

Methods included from Msf::Ui::Console::CommandDispatcher

#active_module, #active_module=, #active_session, #active_session=, #build_range_array, #docs_dir, #framework, #initialize, #log_error, #remove_lines

Methods included from Rex::Ui::Text::DispatcherShell::CommandDispatcher

#cmd_help, #cmd_help_help, #cmd_help_tabs, #deprecated_cmd, #deprecated_commands, #deprecated_help, #docs_dir, #help_to_s, #initialize, #print, #print_error, #print_good, #print_line, #print_status, #print_warning, #tab_complete_directory, #tab_complete_filenames, #tab_complete_generic, #tab_complete_source_address, #update_prompt

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(meth, *args) ⇒ Object

Allow modules to define their own commands


39
40
41
42
43
44
45
46
47
48
# File 'lib/msf/ui/console/command_dispatcher/post.rb', line 39

def method_missing(meth, *args)
  if (mod and mod.respond_to?(meth.to_s))

    # Initialize user interaction
    mod.init_ui(driver.input, driver.output)

    return mod.send(meth.to_s, *args)
  end
  return
end

Instance Method Details

#cmd_rerun(*args) ⇒ Object Also known as: cmd_rexploit

Reloads a post module and executes it


68
69
70
71
72
73
# File 'lib/msf/ui/console/command_dispatcher/post.rb', line 68

def cmd_rerun(*args)
  # Stop existing job and reload the module
  if reload(true)
    cmd_run(*args)
  end
end

#cmd_run(*args) ⇒ Object Also known as: cmd_exploit

Executes a post module


87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
# File 'lib/msf/ui/console/command_dispatcher/post.rb', line 87

def cmd_run(*args)
  opt_str = nil
  jobify  = false
  quiet   = false

  @@post_opts.parse(args) do |opt, idx, val|
    case opt
    when '-j'
      jobify = true
    when '-o'
      opt_str = val
    when '-a'
      action = val
    when '-q'
      quiet  = true
    when '-h'
      cmd_run_help
      return false
    else
      (key, val) = val.split('=')
      if key && val
        mod.datastore[key] = val
      else
        cmd_run_help
        return false
      end
    end
  end

  # Always run passive modules in the background
  if (mod.passive)
    jobify = true
  end

  begin
    mod.run_simple(
      'OptionStr'      => opt_str,
      'LocalInput'     => driver.input,
      'LocalOutput'    => driver.output,
      'RunAsJob'       => jobify,
      'Quiet'          => quiet
    )
  rescue ::Timeout::Error
    print_error("Post triggered a timeout exception")
  rescue ::Interrupt
    print_error("Post interrupted by the console user")
  rescue ::Exception => e
    print_error("Post failed: #{e.class} #{e}")
    if (e.class.to_s != 'Msf::OptionValidateError')
      print_error("Call stack:")
      e.backtrace.each do |line|
        break if line =~ /lib.msf.base.simple/
        print_error("  #{line}")
      end
    end

    return false
  end

  if (jobify && mod.job_id)
    print_status("Post module running as background job #{mod.job_id}.")
  else
    print_status("Post module execution completed")
  end
end

#cmd_run_helpObject Also known as: cmd_exploit_help


77
78
79
80
81
82
# File 'lib/msf/ui/console/command_dispatcher/post.rb', line 77

def cmd_run_help
  print_line "Usage: run [options]"
  print_line
  print_line "Launches a post exploitation module."
  print @@auxiliary_opts.usage
end

#cmd_run_tabs(str, words) ⇒ Object Also known as: cmd_exploit_tabs

Tab completion for the run command

at least 1 when tab completion has reached this stage since the command itself has been completed

Parameters:

  • str (String)

    the string currently being typed before tab was hit

  • words (Array<String>)

    the previously completed words on the command line. words is always


162
163
164
165
# File 'lib/msf/ui/console/command_dispatcher/post.rb', line 162

def cmd_run_tabs(str, words)
  return [] if words.length > 1
  @@post_opts.fmt.keys
end

#commandsObject

Returns the hash of commands specific to post modules.


27
28
29
30
31
32
33
34
# File 'lib/msf/ui/console/command_dispatcher/post.rb', line 27

def commands
  super.update({
    "run"   => "Launches the post exploitation module",
    "rerun" => "Reloads and launches the module",
    "exploit"  => "This is an alias for the run command",
    "rexploit" => "This is an alias for the rerun command",
  }).merge( (mod ? mod.post_commands : {}) )
end

#nameObject

Returns the command dispatcher name.


54
55
56
# File 'lib/msf/ui/console/command_dispatcher/post.rb', line 54

def name
  "Post"
end