register_options
register_options は、msfconsole で show options に出る入力欄を定義します。ここで登録したものが datastore['NAME'] としてコードから読めます。
register_options( [ Opt::RPORT(80), OptString.new('TARGETURI', [true, 'The base path', '/app/']), OptString.new('USERNAME', [true, 'Username', 'admin']), OptString.new('PASSWORD', [false, 'Password', '']), ])
register_advanced_options( [ OptFloat.new('HttpClientTimeout', [false, 'HTTP timeout', 20.0]), OptBool.new('ForceExploit', [false, 'Override check result', false]) ])initialize の中、super(update_info(...)) の後(または mixin がオプションを足したあと)に書きます。
Opt の書き方
Section titled “Opt の書き方”OptSomething.new(name, [required, description, default], aliases: ..., conditions: ...)| 要素 | 意味 |
|---|---|
name | datastore キー。大文字が慣例 |
required | true なら show missing に出る |
description | show options の説明 |
default | 初期値。不要なら省略可 |
| クラス | 用途 | 例 |
|---|---|---|
OptString | 文字列 | TARGETURI、USERNAME |
OptInt | 整数 | 自前のポート、回数 |
OptBool | true/false | SSL、STOP_ON_SUCCESS |
OptPort | 1–65535 | 追加ポート |
OptAddress | IP | 単独アドレス |
OptAddressRange | CIDR / レンジ | 自前に持つ場合 |
OptPath | ファイルパス | wordlist、鍵 |
OptEnum | 選択肢 | %w[GET POST] |
Opt::RHOST / Opt::RPORT | 定番接続先 | mixin が既に足していることも多い |
Opt::RHOSTS | 多ホスト | Scanner が足す |
Opt::LHOST / Opt::LPORT | 戻り先 | exploit でペイロード用 |
OptEnum.new('METHOD', [true, 'HTTP method', 'GET', %w[GET POST]])OptPath.new('KEY_FILE', [false, 'SSH private key path', nil])OptBool.new('CREATESESSION', [false, 'Create a session on success', true])datastore からの読み方
Section titled “datastore からの読み方”uri = datastore['TARGETURI']user = datastore['USERNAME']timeout = datastore['HttpClientTimeout']set TARGETURI /x/ した値がここに入ります。setg の値はモジュール側に同名が無ければフレームワーク側から見えます。詳細は同梱 wiki How-to-use-datastore-options.md です。
mixin が既に登録しているオプション
Section titled “mixin が既に登録しているオプション”HttpClient や Scanner を include すると、次は 自分で再登録しない のが基本です。
| mixin | 既にある例 |
|---|---|
| HttpClient | RHOST、RPORT、VHOST、SSL、Proxies、UserAgent |
| Scanner | RHOSTS、THREADS |
| AuthBrute | USERNAME、PASSWORD、USER_FILE、PASS_FILE、STOP_ON_SUCCESS など |
| Post | SESSION |
被ると警告や予期しない上書きの原因になります。足りないものだけ足します。
advanced / evasion
Section titled “advanced / evasion”| 登録関数 | 見える場所 |
|---|---|
register_options | show options |
register_advanced_options | show advanced |
register_evasion_options | show evasion(HttpClient など) |
普段使わないタイムアウトや ForceExploit は advanced に回すと、基本オプションが読みやすくなります。
条件付きオプション
Section titled “条件付きオプション”新しい Opt は conditions: で他オプションに依存表示できます。まずは単純な required/default で十分なことが多いです。
実行時の表示
Section titled “実行時の表示”use exploit/linux/http/myapp_rceshow optionsshow missingset RHOSTS 10.10.11.123set TARGETURI /app/set LHOST 10.10.16.10run次は 入口メソッド で、実際の処理本体を書きます。

