我正在玩nc,因为-e命令消失了,所以建议
cat /tmp/f | /bin/sh -i 2>&1 | nc -l 127.0.0.1 1234 > /tmp/f
我认为“2>& 1”是不必要的,因为我不需要知道我将要运行的简单命令的错误,如“whoami”,“ls”等,所以我的命令改为是
cat /tmp/f | /bin/sh -i | nc -l 127.0.0.1 1234 > /tmp/f
但是,我没有得到“干净”的结果。这就是我得到的
SERVER:
Listening on [0.0.0.0] (family 0, port 1234)
$ $
客户端:
nc localhost 1234
ls
testfile
whoami
user1
基本上,我在客户端终端没有看到$。当我使用2>& 1执行命令时,我得到了我期望的结果
SERVER:
Listening on [0.0.0.0] (family 0, port 1234)
客户端:
nc localhost 1234
$ ls
testfile
$ whoami
user1
我知道2>& 1表示将stderr重定向到stdout所以在这种情况下,命令提示符“$”如何成为stderr的一部分?它不应该成为标准输入的一部分吗?
答案 0 :(得分:1)
shell使用标准错误流作为提示,也使用select
创建的菜单,以及用于与用户交互的任何其他文本。