コンテンツにスキップ

update_info

update_info は、モジュールの 名刺と契約 をフレームワークに渡す処理です。info / show options / ペイロード適合 / ranking などに使われます。「動くコード」とは別に、必ず埋めるブロックです。

def initialize(info = {})
super(
update_info(
info,
'Name' => 'ExampleApp Ping Command Injection',
'Description' => %q{
ExampleApp の /ping に OS コマンド注入がある。
lab 用の説明。
},
'Author' => ['you'],
'License' => MSF_LICENSE,
'References' => [
['CVE', '2024-0000'],
['URL', 'https://example.local/advisory']
],
'DisclosureDate' => '2024-01-01',
'Platform' => ['linux'],
'Arch' => [ARCH_CMD],
'Privileged' => false,
'Targets' => [
['Automatic', {}]
],
'DefaultTarget' => 0,
'Notes' => {
'Stability' => [CRASH_SAFE],
'Reliability' => [REPEATABLE_SESSION],
'SideEffects' => [IOC_IN_LOGS]
}
)
)
end

super(update_info(info, ...)) の形が定石です。info を渡すことで、親や mixin が足したメタデータを壊さずマージします。

キー必須寄り意味
Nameはい短い題名。検索されやすい語を入れる
Descriptionはい何をするか、前提、注意。%q{...} で複数行
Authorはい配列。'name <mail>' 形式が一般的
Licenseはい通常 MSF_LICENSE
References推奨['CVE','...']、['URL','...']、['EDB','...'] など
DisclosureDate推奨'YYYY-MM-DD'
Platformexploit で重要'linux' / 'win' / 'unix' / 'python' など。ペイロード適合に効く
Archexploit で重要ARCH_CMD / ARCH_X64 / ARCH_X86 / ARCH_PYTHON など
Privileged任意高権限が必要 / 得られるかの目安
Payloadexploit'Space'、'BadChars' などペイロード制約
Targetsexploit対象 OS / オフセット / CmdStagerFlavor など
DefaultTargetexploitTargets の index
SessionTypespost'shell' / 'meterpreter'
Actions / DefaultActionauxiliary複数モードがあるとき
Notes新規は実質必須Stability / Reliability / SideEffects

exploit では、ここで宣言した Platform/Arch とペイロードのそれが噛み合わないと、選べるペイロードが空になったり実行時に失敗します。

用途例
コマンドそのものを流す'Platform' => ['unix','linux'], 'Arch' => [ARCH_CMD]
ELF / PE を置く'Arch' => [ARCH_X64] + CmdStager
Web 言語ペイロード'Platform' => ['php'], 'Arch' => [ARCH_PHP]
'Targets' => [
[
'Linux Command',
{
'Platform' => 'linux',
'Arch' => [ARCH_CMD]
}
],
[
'Linux Dropper',
{
'Platform' => 'linux',
'Arch' => [ARCH_X64],
'CmdStagerFlavor' => ['bourne', 'curl', 'wget']
}
]
],
'DefaultTarget' => 0

利用者は set TARGET 1 で切り替えます。モジュール内では target / target.name / target['Arch'] で参照します。

Notes(Stability / Reliability / SideEffects)

Section titled “Notes(Stability / Reliability / SideEffects)”

新規モジュールで求められている欄です。定数の意味は同梱 wiki Definition-of-Module-Reliability-Side-Effects-and-Stability.md にあります。

'Notes' => {
'Stability' => [CRASH_SAFE],
'Reliability' => [REPEATABLE_SESSION],
'SideEffects' => [IOC_IN_LOGS, ARTIFACTS_ON_DISK]
}
分類例
StabilityCRASH_SAFE、CRASH_SERVICE_DOWN
ReliabilityREPEATABLE_SESSION、UNRELIABLE_SESSION、EVENT_DEPENDENT
SideEffectsIOC_IN_LOGS、ARTIFACTS_ON_DISK、CONFIG_CHANGES、ACCOUNT_LOCKOUTS

クラス直下に置きます。

Rank = ExcellentRanking

ExcellentRanking / GreatRanking / GoodRanking / NormalRanking など。信頼性の自己申告です。

'Actions' => [
['List', { 'Description' => 'Enumerate items' }],
['Dump', { 'Description' => 'Dump config' }]
],
'DefaultAction' => 'List'

run 内で action.name を見ます。

'Platform' => ['linux', 'unix'],
'SessionTypes' => ['shell', 'meterpreter']

対応しないセッションで run されると失敗しやすいので、本当に動くものだけ書きます。

次は register_options で、利用者が入力する値を定義します。