基本操作と DB
ワークスペース、PostgreSQL(msfdb)、db_nmap、グローバルデータストア(setg)、作業ディレクトリの最小セットです。
作業ディレクトリ
Section titled “作業ディレクトリ”HTB 用の作業は ~/lab 配下にまとめます。
~/lab/├── msf/│ ├── rc/ # Git 管理するテンプレート│ ├── profiles/ # 対象ごとの設定。Git 管理しない│ ├── logs/│ └── loot/└── notes/ # 列挙結果・仮説・手順メモ~/lab を Git 管理する場合の除外例です。
msf/profiles/*.local.rcmsf/logs/msf/loot/*.kirbi*.ccache*.pfx*.pem*.keyPostgreSQL と msfdb
Section titled “PostgreSQL と msfdb”DB なしでも msfconsole は動きますが、hosts / services / creds / loot / workspace / db_nmap は接続が前提です。同梱の msfdb が最も簡単な起動経路です。
# Metasploit の install ルート、または packages/metasploit-framework で./msfdb init./msfdb start./msfdb statusinit は ~/.msf4/db に PostgreSQL データディレクトリを作り、~/.msf4/database.yml を書きます。msfconsole 起動後に接続を確認します。
db_status期待する表示の例です。
[*] Connected to msf. Connection type: postgresql.よく使う msfdb サブコマンドです。
| コマンド | 用途 |
|---|---|
msfdb init | DB(必要なら webservice)の初期化 |
msfdb start / stop / restart | DB の起動・停止 |
msfdb status | 状態確認 |
msfdb reinit | 再初期化。データ削除確認プロンプトに注意 |
msfdb delete | 削除 |
接続が切れているときは msfconsole から再接続できます。
db_connect -y ~/.msf4/database.ymldb_statusWeb サービス経由で使う場合は msfdb --component webservice init でトークンと証明書が発行されます。通常の検証環境ではローカル PostgreSQL へ直接接続できます。
ワークスペース
Section titled “ワークスペース”対象ごとにワークスペースを分けます。
workspace -a paperworkworkspace paperworkworkspace| コマンド | 意味 |
|---|---|
workspace | 一覧と現在のワークスペース |
workspace -a NAME | 作成して切り替え |
workspace NAME | 既存へ切り替え |
workspace -d NAME | 削除 |
workspace -D | 全削除(破壊的) |
hosts、services、creds、vulns、loot、notes は現在のワークスペースに紐づきます。別の対象の結果を混ぜないよう、作業開始時に切り替えます。
db_nmap
Section titled “db_nmap”nmap の結果を Metasploit DB に直接保存します。生の出力は ~/lab/notes にも残します。
db_nmap -sV -sC -oA ~/lab/notes/paperwork/nmap/tcp 10.10.11.123hostsservicesservices -p 22,5985,5986既存の XML を取り込む場合です。
db_import ~/lab/notes/paperwork/nmap/tcp.xmlhosts; services認証情報を見つけたら DB 側も確認します。
credsvulnslootsetg で毎回の再入力を減らす
Section titled “setg で毎回の再入力を減らす”set は現在のモジュールにだけ効きます。setg は msfconsole プロセス全体の既定値になり、別モジュールに移っても値が残ります。
対象ごとのプロファイル ~/lab/msf/profiles/target.local.rc の例です。パスワードは入れません。
workspace -a paperworkworkspace paperworksetg RHOSTS 10.10.11.123setg RHOST 10.10.11.123setg LHOST 10.10.16.10setg LPORT 4444setg EXITFUNC threadspool ~/lab/msf/logs/paperwork-msfconsole.log起動例です。
msfconsole -q -r ~/lab/msf/profiles/target.local.rc起動後は use したモジュールで show options し、足りない値だけ set または run 引数で補います。
use auxiliary/scanner/ssh/ssh_loginshow optionsrun verbose=true username=svc-user password=PASSWORD_HERE createsession=true別の対象に移るときは msfconsole を再起動するか、設定を明示的に消します。
unsetg RHOSTS; unsetg RHOST; unsetg LHOST; unsetg LPORTgetg LHOSTsetg の値はモジュール datastore よりフレームワーク datastore 側に残ります。モジュール側で同名を set すると、そのモジュールでは上書きされます。
spool と loot の役割
Section titled “spool と loot の役割”| 置き場 | 目的 |
|---|---|
spool | msfconsole の入出力をそのまま保存する |
| DB / ワークスペース | ホスト、サービス、資格情報、脆弱性を構造化して検索する |
loot | モジュールが取得した artifact の索引 |
~/lab/notes | 仮説、根拠、次の手順 |
spool ~/lab/msf/logs/paperwork-msfconsole.log# ... 作業 ...spool offspool は set PASSWORD ... のような入力も記録します。資格情報を打つ前に開始した log の扱いには注意します。
Metasploit の既定 loot が ~/.msf4/loot に入る場合は、重要なものだけ ~/lab/msf/loot/<target>/ へ移し、notes/ に出所を書きます。
繰り返し使う操作は リソーススクリプト に切り出します。

