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
- #execute_queued_commands(socket, event_emitter) ⇒ Object
- #start_socket_io_loop(socket, event_emitter) ⇒ Object
- #start_socket_read_loop(socket) ⇒ Object
- #start_socket_write_loop(socket, read_thread) ⇒ Object
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 |