Class: Msf::Sessions::SshCommandShellReverse

Inherits:
CommandShell show all
Includes:
Msf::Session::Basic, Msf::Session::Provider::SingleCommandShell
Defined in:
lib/msf/base/sessions/ssh_command_shell_reverse.rb

Overview

This class provides basic interaction with a ChannelFD abstraction provided by the Rex::Proto::Ssh wrapper around HrrRbSsh.

Date:    June 22, 2019
Author:  RageLtMan

Instance Attribute Summary

Attributes included from Msf::Session::Interactive

#rstream

Attributes included from Rex::Ui::Interactive

#completed, #interacting, #next_session, #on_command_proc, #on_print_proc, #orig_suspend, #orig_usr1, #orig_winch

Attributes included from Rex::Ui::Subscriber::Input

#user_input

Attributes included from Rex::Ui::Subscriber::Output

#user_output

Attributes included from Msf::Session

#alive, #db_record, #exploit, #exploit_datastore, #exploit_task, #exploit_uuid, #framework, #info, #machine_id, #payload_uuid, #routes, #sid, #sname, #target_host, #target_port, #username, #uuid, #via, #workspace

Attributes included from Framework::Offspring

#framework

Attributes inherited from CommandShell

#arch, #banner, #max_threads, #platform

Instance Method Summary collapse

Methods included from Msf::Session::Provider::SingleCommandShell

#command_termination, #set_is_echo_shell, #shell_close, #shell_command_token, #shell_command_token_base, #shell_command_token_unix, #shell_command_token_win32, #shell_init, #shell_read, #shell_read_until_token, #shell_write

Methods included from Msf::Session::Basic

#_interact, #type

Methods included from Msf::Session::Interactive

#_interact, #_interact_complete, #_interrupt, #_suspend, #_usr1, #abort_foreground, #abort_foreground_supported, #cleanup, #comm_channel, #initialize, #interactive?, #kill, #run_cmd, #tunnel_local, #tunnel_peer, #user_want_abort?

Methods included from Rex::Ui::Interactive

#_interact, #_interact_complete, #_interrupt, #_local_fd, #_remote_fd, #_stream_read_local_write_remote, #_stream_read_remote_write_local, #_suspend, #_winch, #detach, #handle_suspend, #handle_usr1, #handle_winch, #interact, #interact_stream, #prompt, #prompt_yesno, #restore_suspend, #restore_usr1, #restore_winch

Methods included from Rex::Ui::Subscriber

#copy_ui, #init_ui, #reset_ui

Methods included from Rex::Ui::Subscriber::Input

#gets

Methods included from Rex::Ui::Subscriber::Output

#flush, #print, #print_blank_line, #print_error, #print_good, #print_line, #print_status, #print_warning

Methods included from Msf::Session

#alive?, #cleanup, #comm_channel, #dead?, #initialize, #inspect, #interactive?, #kill, #log_file_name, #log_source, #name, #name=, #register?, #session_host, #session_host=, #session_port, #session_port=, #session_type, #set_from_exploit, #set_via, #tunnel_local, #tunnel_peer, #tunnel_to_s, type, #type, #via_exploit, #via_payload

Methods inherited from CommandShell

#_file_transfer, #_interact, #abort_foreground_supported, binary_exists, #binary_exists, #bootstrap, can_cleanup_files, #cleanup, #cmd_background, #cmd_background_help, #cmd_download, #cmd_download_help, #cmd_help, #cmd_help_help, #cmd_irb, #cmd_irb_help, #cmd_pry, #cmd_pry_help, #cmd_resource, #cmd_resource_help, #cmd_sessions, #cmd_sessions_help, #cmd_shell, #cmd_shell_help, #cmd_source, #cmd_source_help, #cmd_upload, #cmd_upload_help, #commands, #docs_dir, #execute_file, #initialize, #process_autoruns, #run_builtin_cmd, #run_single, #shell_close, #shell_init, #shell_read, #shell_write, type, #type

Methods included from Rex::Ui::Text::Resource

#load_resource

Methods included from Scriptable

#execute_file, #execute_script, included, #legacy_script_to_post_module

Instance Method Details

#_interact_streamObject (protected)



54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/msf/base/sessions/ssh_command_shell_reverse.rb', line 54

def _interact_stream
  fdr = [rstream.fd_rd, user_input.fd]
  fdw = [rstream.fd_wr, user_input.fd]
  while interacting
    sd = Rex::ThreadSafe.select(fdr, nil, fdw, 0.5)
    next unless sd

    if sd[0].include? rstream.fd_rd
      user_output.print(shell_read)
    end
    if sd[0].include? user_input.fd
      run_single((user_input.gets || '').chomp("\n"))
    end
    Thread.pass
  end
end

#descObject

Returns the session description.



30
31
32
# File 'lib/msf/base/sessions/ssh_command_shell_reverse.rb', line 30

def desc
  'SSH command shell'
end

#shell_command(cmd, timeout = 5) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/msf/base/sessions/ssh_command_shell_reverse.rb', line 34

def shell_command(cmd, timeout = 5)
  # Send the command to the session's stdin.
  shell_write(cmd + "\n")

  etime = ::Time.now.to_f + timeout
  buff = ""

  # Keep reading data until no more data is available or the timeout is
  # reached.
  while ::Time.now.to_f < etime && ::IO.select([rstream.fd_rd], nil, nil, timeout)
    res = shell_read(-1, 0.01)
    buff << res if res
    timeout = etime - ::Time.now.to_f
  end

  buff
end