モジュール作成
新しい Metasploit モジュールを作成するときの案内です。参照コードは packages/metasploit-framework にあります。参照コミットは Metasploit 運用ノート に記載しています。
ペイロードモジュール自体は自作せず、既存ペイロードを exploit から使う前提で整理しています。
- このページで種別と判断表を見る。
- 共通手順 を上から読む(各ステップの意味と書き方)。
- 種別ごとのページで入口メソッドと使用例を読む。
- 必要に応じて Mixin と API、ヘルパー関数、send_request_cgi を参照する。
| 用途 | ページ |
|---|---|
| 共通手順(1 ステップずつ) | 共通手順 |
| Exploit | Exploit |
| Auxiliary | Auxiliary |
| Post | Post |
| Mixin と API | Mixin と 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/modulesreload_lib -a参考にする雛形は次のとおりです。
modules/exploits/example.rb— TCP exploitmodules/exploits/example_webapp.rb— HTTP / webapp exploitmodules/exploits/example_linux_priv_esc.rb— local PEmodules/auxiliary/example.rb— auxiliarymodules/post/multi/general/execute.rb— post
モジュールの種別
Section titled “モジュールの種別”| 種別 | 基底の例 | 入口メソッド | ペイロード |
|---|---|---|---|
| exploit | Msf::Exploit::Remote / Msf::Exploit::Local | check(任意)、exploit | 使う |
| auxiliary | Msf::Auxiliary | run、または scanner なら run_host | 使わない |
| post | Msf::Post | run(SESSION 必須) | 使わない(既存セッション上) |
payload | (自作しない) | — | 自体がペイロード |
新しいセッションを開く処理には exploit、セッションを開かない処理には auxiliary を使います。既存セッションでの作業には post を使います。
| # | 手順 | 何をするか | 詳細 |
|---|---|---|---|
| 1 | 種別とパス | exploit / auxiliary / post と配置ディレクトリを決める | 種別と配置 |
| 2 | 基底と mixin | クラス継承と include で通信手段・実行モデルを足す | 基底と mixin |
| 3 | update_info | Name、Platform、Targets、Notes などのメタデータ | update_info |
| 4 | register_options | 利用者が set する入力欄 | register_options |
| 5 | 入口メソッド | check / exploit / run / run_host | 入口メソッド |
| 6 | 成果の保存 | report_*、store_loot、資格情報 API | 成果の保存 |
| 7 | 後片付け | 置いたファイルの削除予約など | 後片付け |
やりたいこと別の行き先
Section titled “やりたいこと別の行き先”よくある作業から、関連するページを探せます。
| やりたいこと | 種別の目安 | 先に読むページ |
|---|---|---|
| HTTP にログインして設定やファイルを取る | auxiliary | Auxiliary + send_request_cgi |
| 多ホストの banner / バージョン走査 | auxiliary + Scanner | Scanner |
| ユーザ/パス辞書でログイン試行 | auxiliary + AuthBrute | AuthBrute |
| HTTP command injection でシェルを返す | exploit | Exploit + CmdStager |
| TCP の binary 脆弱性でセッション | exploit + Tcp | Tcp + Exploit |
| ブラウザに罠ページを見せて取る | exploit + HttpServer | HttpServer |
| SSH でコマンド実行 / interact | exploit または auxiliary | SSH |
| SMB 経由の操作・認証 | auxiliary / exploit + SMB | SMB |
| 既存シェル / Meterpreter で列挙 | post | Post + Post 用 mixin |
| シェルを Meterpreter に昇格 | post(既存モジュール利用も可) | Post / 運用側 SSH/WinRM |
| 既にセッションがある状態からの local PE | exploit(local) | Exploit |
| check だけで脆弱性有無を見る | exploit / auxiliary の check | 入口メソッド + AutoCheck |
| 取った hash / 設定を DB に残す | どの type でも Report | 成果の保存 |
| アップロードした webshell を後で消す | exploit + FileDropper | 後片付け |
| 待ち受けハンドラだけ | 既存 exploit/multi/handler | 運用側 ハンドラと待ち受け(自作不要) |
迷ったら「セッションを新しく開くか」「すでにセッションがあるか」「ペイロードが要るか」の 3 点で 種別と配置 に戻ります。

