コンテンツにスキップ

モジュール作成

新しい Metasploit モジュールを作成するときの案内です。参照コードは packages/metasploit-framework にあります。参照コミットは Metasploit 運用ノート に記載しています。

ペイロードモジュール自体は自作せず、既存ペイロードを exploit から使う前提で整理しています。

  1. このページで種別と判断表を見る。
  2. 共通手順 を上から読む(各ステップの意味と書き方)。
  3. 種別ごとのページで入口メソッドと使用例を読む。
  4. 必要に応じて Mixin と API、ヘルパー関数、send_request_cgi を参照する。
用途ページ
共通手順(1 ステップずつ)共通手順
ExploitExploit
AuxiliaryAuxiliary
PostPost
Mixin と APIMixin と API
ヘルパー関数ヘルパー関数
HTTP リクエストsend_request_cgi
置き場用途
~/.msf4/modules/exploits/...自作 exploit
~/.msf4/modules/auxiliary/...自作 auxiliary
~/.msf4/modules/post/...自作 post
packages/metasploit-framework/modules/...upstream 本体の参照先
loadpath /path/to/extra/modules
reload_lib -a

参考にする雛形は次のとおりです。

  • modules/exploits/example.rb — TCP exploit
  • modules/exploits/example_webapp.rb — HTTP / webapp exploit
  • modules/exploits/example_linux_priv_esc.rb — local PE
  • modules/auxiliary/example.rb — auxiliary
  • modules/post/multi/general/execute.rb — post
種別基底の例入口メソッドペイロード
exploitMsf::Exploit::Remote / Msf::Exploit::Localcheck(任意)、exploit使う
auxiliaryMsf::Auxiliaryrun、または scanner なら run_host使わない
postMsf::Postrun(SESSION 必須)使わない(既存セッション上)
payload(自作しない)—自体がペイロード

新しいセッションを開く処理には exploit、セッションを開かない処理には auxiliary を使います。既存セッションでの作業には post を使います。

#手順何をするか詳細
1種別とパスexploit / auxiliary / post と配置ディレクトリを決める種別と配置
2基底と mixinクラス継承と include で通信手段・実行モデルを足す基底と mixin
3update_infoName、Platform、Targets、Notes などのメタデータupdate_info
4register_options利用者が set する入力欄register_options
5入口メソッドcheck / exploit / run / run_host入口メソッド
6成果の保存report_*、store_loot、資格情報 API成果の保存
7後片付け置いたファイルの削除予約など後片付け

よくある作業から、関連するページを探せます。

やりたいこと種別の目安先に読むページ
HTTP にログインして設定やファイルを取るauxiliaryAuxiliary + send_request_cgi
多ホストの banner / バージョン走査auxiliary + ScannerScanner
ユーザ/パス辞書でログイン試行auxiliary + AuthBruteAuthBrute
HTTP command injection でシェルを返すexploitExploit + CmdStager
TCP の binary 脆弱性でセッションexploit + TcpTcp + Exploit
ブラウザに罠ページを見せて取るexploit + HttpServerHttpServer
SSH でコマンド実行 / interactexploit または auxiliarySSH
SMB 経由の操作・認証auxiliary / exploit + SMBSMB
既存シェル / Meterpreter で列挙postPost + Post 用 mixin
シェルを Meterpreter に昇格post(既存モジュール利用も可)Post / 運用側 SSH/WinRM
既にセッションがある状態からの local PEexploit(local)Exploit
check だけで脆弱性有無を見るexploit / auxiliary の check入口メソッド + AutoCheck
取った hash / 設定を DB に残すどの type でも Report成果の保存
アップロードした webshell を後で消すexploit + FileDropper後片付け
待ち受けハンドラだけ既存 exploit/multi/handler運用側 ハンドラと待ち受け(自作不要)

迷ったら「セッションを新しく開くか」「すでにセッションがあるか」「ペイロードが要るか」の 3 点で 種別と配置 に戻ります。