コンテンツにスキップ

基本操作と DB

ワークスペース、PostgreSQL(msfdb)、db_nmap、グローバルデータストア(setg)、作業ディレクトリの最小セットです。

HTB 用の作業は ~/lab 配下にまとめます。

~/lab/
├── msf/
│ ├── rc/ # Git 管理するテンプレート
│ ├── profiles/ # 対象ごとの設定。Git 管理しない
│ ├── logs/
│ └── loot/
└── notes/ # 列挙結果・仮説・手順メモ

~/lab を Git 管理する場合の除外例です。

msf/profiles/*.local.rc
msf/logs/
msf/loot/
*.kirbi
*.ccache
*.pfx
*.pem
*.key

DB なしでも msfconsole は動きますが、hosts / services / creds / loot / workspace / db_nmap は接続が前提です。同梱の msfdb が最も簡単な起動経路です。

ターミナルウィンドウ
# Metasploit の install ルート、または packages/metasploit-framework で
./msfdb init
./msfdb start
./msfdb status

init は ~/.msf4/db に PostgreSQL データディレクトリを作り、~/.msf4/database.yml を書きます。msfconsole 起動後に接続を確認します。

db_status

期待する表示の例です。

[*] Connected to msf. Connection type: postgresql.

よく使う msfdb サブコマンドです。

コマンド用途
msfdb initDB(必要なら webservice)の初期化
msfdb start / stop / restartDB の起動・停止
msfdb status状態確認
msfdb reinit再初期化。データ削除確認プロンプトに注意
msfdb delete削除

接続が切れているときは msfconsole から再接続できます。

db_connect -y ~/.msf4/database.yml
db_status

Web サービス経由で使う場合は msfdb --component webservice init でトークンと証明書が発行されます。通常の検証環境ではローカル PostgreSQL へ直接接続できます。

対象ごとにワークスペースを分けます。

workspace -a paperwork
workspace paperwork
workspace
コマンド意味
workspace一覧と現在のワークスペース
workspace -a NAME作成して切り替え
workspace NAME既存へ切り替え
workspace -d NAME削除
workspace -D全削除(破壊的)

hosts、services、creds、vulns、loot、notes は現在のワークスペースに紐づきます。別の対象の結果を混ぜないよう、作業開始時に切り替えます。

nmap の結果を Metasploit DB に直接保存します。生の出力は ~/lab/notes にも残します。

db_nmap -sV -sC -oA ~/lab/notes/paperwork/nmap/tcp 10.10.11.123
hosts
services
services -p 22,5985,5986

既存の XML を取り込む場合です。

db_import ~/lab/notes/paperwork/nmap/tcp.xml
hosts; services

認証情報を見つけたら DB 側も確認します。

creds
vulns
loot

set は現在のモジュールにだけ効きます。setg は msfconsole プロセス全体の既定値になり、別モジュールに移っても値が残ります。

対象ごとのプロファイル ~/lab/msf/profiles/target.local.rc の例です。パスワードは入れません。

workspace -a paperwork
workspace paperwork
setg RHOSTS 10.10.11.123
setg RHOST 10.10.11.123
setg LHOST 10.10.16.10
setg LPORT 4444
setg EXITFUNC thread
spool ~/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_login
show options
run verbose=true username=svc-user password=PASSWORD_HERE createsession=true

別の対象に移るときは msfconsole を再起動するか、設定を明示的に消します。

unsetg RHOSTS; unsetg RHOST; unsetg LHOST; unsetg LPORT
getg LHOST

setg の値はモジュール datastore よりフレームワーク datastore 側に残ります。モジュール側で同名を set すると、そのモジュールでは上書きされます。

置き場目的
spoolmsfconsole の入出力をそのまま保存する
DB / ワークスペースホスト、サービス、資格情報、脆弱性を構造化して検索する
lootモジュールが取得した artifact の索引
~/lab/notes仮説、根拠、次の手順
spool ~/lab/msf/logs/paperwork-msfconsole.log
# ... 作業 ...
spool off

spool は set PASSWORD ... のような入力も記録します。資格情報を打つ前に開始した log の扱いには注意します。

Metasploit の既定 loot が ~/.msf4/loot に入る場合は、重要なものだけ ~/lab/msf/loot/<target>/ へ移し、notes/ に出所を書きます。

繰り返し使う操作は リソーススクリプト に切り出します。