成果の保存
モジュールが得た情報を Metasploit DB や loot ファイルに残すステップです。API の所有者は主に Msf::Auxiliary::Report(lib/msf/core/auxiliary/report.rb)です。HttpClient を include していると Report も一緒に入ります。
何をどの API に載せるか
Section titled “何をどの API に載せるか”| 得たもの | 使う API | 理由 |
|---|---|---|
| 生きている host の属性 | report_host | OS など。他 API が兼ねることも多い |
| 開いているポート / banner | report_service | services に出る |
| すぐ使える認証情報 | create_credential / create_credential_login / create_credential_and_login | creds に出る |
| ログイン失敗 | invalidate_login | 再試行制御や記録 |
| 確認できた脆弱性 | report_vuln | exploit のセッション成功時は自動報告もある |
| 設定ファイル、コマンド出力、dump | store_loot | 実ファイル + loot 索引 |
| 上に当てはまらない観察 | report_note | type を点区切りで付ける |
| 面白い Web ページ / フォーム | report_web_* | web 系補助 |
同梱 wiki: How-to-do-reporting-or-store-data-in-module-development.md
report_service
Section titled “report_service”report_service( host: rhost, port: rport, proto: 'tcp', name: ssl? ? 'https' : 'http', info: res.headers['Server'].to_s)scanner で banner を取ったら、まずこれを検討します。
store_loot
Section titled “store_loot”「ファイルとして残したいもの」向けです。戻り値は保存パスです。
path = store_loot( 'example.config', # ltype(種類のラベル) 'text/plain', # ctype(MIME 目安) rhost, # host。post なら session でも可 res.body, # データ本体 'config.php', # ファイル名目安 'ExampleApp config' # 説明)print_good("Loot saved to #{path}")post 例です。
data = read_file('/etc/passwd')store_loot('linux.passwd', 'text/plain', session, data, 'passwd', 'passwd file')hash や「すぐログインに使えるパスワード」は loot だけより資格情報 API も併用します。
資格情報 API
Section titled “資格情報 API”create_credential_and_login( workspace_id: myworkspace_id, origin_type: :service, module_fullname: fullname, address: rhost, port: rport, protocol: 'tcp', service_name: 'ssh', username: user, private_data: pass, private_type: :password, status: Metasploit::Model::Login::Status::SUCCESSFUL)| メソッド | 用途 |
|---|---|
create_credential | 資格情報そのもの |
create_credential_login | あるサービスへのログイン記録 |
create_credential_and_login | 両方まとめて |
invalidate_login | 失敗した組 |
private_type の例: :password、:ntlm_hash、:ssh_key。
report_vuln / report_note
Section titled “report_vuln / report_note”report_vuln( host: rhost, port: rport, name: name, refs: references, info: 'command injection confirmed via id')
report_note( host: rhost, type: 'example.users', data: { users: users }, update: :unique_data)report_note の type は domain.hosts のような点区切りにします。他モジュールが探しやすくなります。
DB が無いとき
Section titled “DB が無いとき”msfdb 未起動でもモジュールは動きますが、保存系は効果が薄いです。検証環境では先に 基本操作と DB を用意します。
db_statuscredsserviceslootvulns実装上の指針
Section titled “実装上の指針”- 成功したログインは資格情報、大きなテキスト/バイナリは loot。
- 同じ内容を
report_noteとstore_lootに二重で雑多に投げない。役割を分ける。 - exploit でセッションが開けば vuln 報告はフレームワーク側でも行われる。補助的な
report_vulnは auxiliary / 明示確認向け。
次は 後片付け です。

