コンテンツにスキップ

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 がオプションを足したあと)に書きます。

OptSomething.new(name, [required, description, default], aliases: ..., conditions: ...)
要素意味
namedatastore キー。大文字が慣例
requiredtrue なら show missing に出る
descriptionshow options の説明
default初期値。不要なら省略可
クラス用途例
OptString文字列TARGETURI、USERNAME
OptInt整数自前のポート、回数
OptBooltrue/falseSSL、STOP_ON_SUCCESS
OptPort1–65535追加ポート
OptAddressIP単独アドレス
OptAddressRangeCIDR / レンジ自前に持つ場合
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])
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既にある例
HttpClientRHOST、RPORT、VHOST、SSL、Proxies、UserAgent
ScannerRHOSTS、THREADS
AuthBruteUSERNAME、PASSWORD、USER_FILE、PASS_FILE、STOP_ON_SUCCESS など
PostSESSION

被ると警告や予期しない上書きの原因になります。足りないものだけ足します。

登録関数見える場所
register_optionsshow options
register_advanced_optionsshow advanced
register_evasion_optionsshow evasion(HttpClient など)

普段使わないタイムアウトや ForceExploit は advanced に回すと、基本オプションが読みやすくなります。

新しい Opt は conditions: で他オプションに依存表示できます。まずは単純な required/default で十分なことが多いです。

use exploit/linux/http/myapp_rce
show options
show missing
set RHOSTS 10.10.11.123
set TARGETURI /app/
set LHOST 10.10.16.10
run

次は 入口メソッド で、実際の処理本体を書きます。