module Wpxf::Payloads::SocketHelper
Provides common functionality for socket based payloads.
Public Instance Methods
execute_queued_commands(socket, event_emitter)
click to toggle source
# 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)
click to toggle source
# 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)
click to toggle source
# 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)
click to toggle source
# 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