netcat 联机帮助页指出,在没有 -c 和 -e 选项的情况下,可以使用以下命令通过 nc 提供 shell。
$ rm -f /tmp/f; mkfifo /tmp/f
$ cat /tmp/f | /bin/sh -i 2>&1 | nc -l 127.0.0.1 1234 > /tmp/f
现在,据我了解,从 fifos 读取和写入都是阻塞操作。例如,如果我运行
$ mkfifo foo
$ cat foo
bash 会阻塞,因为没有任何内容写入 foo。 nc 联机帮助页示例中的管道如何不阻塞?我想我误解了管道的执行方式。
最佳答案
管道中的所有命令同时运行,而不是顺序运行。所以 cat/tmp/f
确实会阻塞,但是 /bin/sh
和 nc
仍然会在发生这种情况时启动。当客户端连接到端口并发送命令时,nc
将写入 FIFO,这将允许 cat
解锁。
关于Bash 流水线执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25734300/