コンテンツにスキップ

成果の保存

モジュールが得た情報を Metasploit DB や loot ファイルに残すステップです。API の所有者は主に Msf::Auxiliary::Report(lib/msf/core/auxiliary/report.rb)です。HttpClient を include していると Report も一緒に入ります。

得たもの使う API理由
生きている host の属性report_hostOS など。他 API が兼ねることも多い
開いているポート / bannerreport_serviceservices に出る
すぐ使える認証情報create_credential / create_credential_login / create_credential_and_logincreds に出る
ログイン失敗invalidate_login再試行制御や記録
確認できた脆弱性report_vulnexploit のセッション成功時は自動報告もある
設定ファイル、コマンド出力、dumpstore_loot実ファイル + loot 索引
上に当てはまらない観察report_notetype を点区切りで付ける
面白い Web ページ / フォームreport_web_*web 系補助

同梱 wiki: How-to-do-reporting-or-store-data-in-module-development.md

report_service(
host: rhost,
port: rport,
proto: 'tcp',
name: ssl? ? 'https' : 'http',
info: res.headers['Server'].to_s
)

scanner で banner を取ったら、まずこれを検討します。

「ファイルとして残したいもの」向けです。戻り値は保存パスです。

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 も併用します。

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(
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 のような点区切りにします。他モジュールが探しやすくなります。

msfdb 未起動でもモジュールは動きますが、保存系は効果が薄いです。検証環境では先に 基本操作と DB を用意します。

db_status
creds
services
loot
vulns
  • 成功したログインは資格情報、大きなテキスト/バイナリは loot。
  • 同じ内容を report_note と store_loot に二重で雑多に投げない。役割を分ける。
  • exploit でセッションが開けば vuln 報告はフレームワーク側でも行われる。補助的な report_vuln は auxiliary / 明示確認向け。

次は 後片付け です。