Module: Wpxf::Payloads::SocketHelper

Included in:
BindPhp, ReverseTcp
Defined in:
lib/wpxf/payloads/socket_helper.rb

Overview

Provides common functionality for socket based payloads.

Instance Method Summary collapse

Instance Method Details

#execute_queued_commands(socket, event_emitter) ⇒ Object



17
18
19
20
21
22
23
24
# File 'lib/wpxf/payloads/socket_helper.rb', line 17

def execute_queued_commands(socket, event_emitter)
  queued_commands.each do |cmd|
    socket.puts cmd
    event_emitter.emit_success "Executed: #{cmd}"
  end

  puts
end

#start_socket_io_loop(socket, event_emitter) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
# File 'lib/wpxf/payloads/socket_helper.rb', line 5

def start_socket_io_loop(socket, event_emitter)
  read_thread = Thread.new { start_socket_read_loop(socket) }
  execute_queued_commands(socket, event_emitter)
  start_socket_write_loop(socket, read_thread)
rescue SignalException
  puts
  event_emitter.emit_warning 'Caught kill signal', true
rescue StandardError => e
  puts
  event_emitter.emit_error "Error encountered: #{e}"
end

#start_socket_read_loop(socket) ⇒ Object



38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/wpxf/payloads/socket_helper.rb', line 38

def start_socket_read_loop(socket)
  loop do
    begin
      print socket.read_nonblock(1024)
    rescue IO::WaitReadable
      retry
    rescue StandardError => e
      raise 'Connection lost' if e.is_a? EOFError
      puts "SOCKET ERROR: #{e}"
    end
  end
end

#start_socket_write_loop(socket, read_thread) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
# File 'lib/wpxf/payloads/socket_helper.rb', line 26

def start_socket_write_loop(socket, read_thread)
  loop do
    input = STDIN.gets
    if input =~ /^(quit|exit)$/i
      read_thread.exit
      break
    else
      socket.puts input
    end
  end
end