ここでmetasploit のエクスプロイトを分析しており、358 行目のどこからpayload
inが来ているのかを突き止めようとしていpayload.encoded
ます。エクスプロイト開発の初心者ですが、基本的なプログラミング ルールではpayload
、関数を呼び出す前に初期化する必要があります。payload
どの値にも初期化されていません。56 行目に a がありますがPayload
、最初のアルファベットが大文字なので、何か違います (Ruby は大文字と小文字を区別します)。つまりpayload
、おそらく何らかのクラスから継承されています。しかし、それが何らかのクラスから継承されている場合、なぜそれをエンコードするのでしょうか? そこに新しい価値を埋めてみませんか?payload
特に、エンコーディングに使用されている値を探しています。誰かが私がそれを理解するのを手伝ってくれれば、それは大きな助けになるでしょう. ありがとうございます!
2 に答える
つまり、これは Ruby であり、エクスプロイト クラスは から派生しMsf::Exploit::Remote
、それは から派生したものmsf/core
です。コードを少しナビゲートして に移動しlib/msf/core.rb
、 from が必要であることを確認しcore/payload
ます。そのファイルを開きます。
https://github.com/rapid7/metasploit-framework/blob/master/lib/msf/core/payload.rb
179 行目で関数payload
が定義されており、ペイロードがreturn module_info['Payload'] ? module_info['Payload']['Payload'] : nil
module_info
元のエクスプロイトに戻ると、関数と次の値で初期化されていることがわかります。
'Payload' =>
{
'Space' => 4096,
# NOTE: \xff are avoided here so we can control the number of them being sent.
'BadChars' => "\x09\x0a\x0b\x0c\x0d\x20\xff",
'DisableNops' => 'True',
},
さらに調べてみると、次のようになりlib/msf/base/simple/payload.rb
ます。
payload._import_extra_options(opts)
framework = payload.framework
# Generate the payload
e = EncodedPayload.create(payload,
で を見つけEncodedPayload
、それがメソッドlib/msf/core/encoded_payload.rb
を呼び出していることを確認します。generate
これは、メソッドを設定するencoded
ものです。そのファイルをもう少し調べてみると、それをencode
生成する方法が見つかります。エンコーダーは、明らかにプラットフォームから引き出された「互換性のあるエンコーダー」のリストから引き出されます ( https://github.com/rapid7/metasploit-framework/blob/f0fd2f05983083d84d635d8689237151663902e5/lib/msf/core/payload.rb#L413を参照) 。
簡単に言えば、ペイロードはBadChars
上から来て、プラットフォームに依存するエンコーダーでエンコードされます。
私は A. Wilson ほど詳細にコードを調べませんでした。しかし、ペイロードを選択せずに MetaSploit でエクスプロイトを実行すると (利用可能なペイロードはshow payloads
コマンドで確認できます)、エクスプロイトする前に、選択されているペイロードがreverse handler
(デフォルトのペイロードだと思います) であることが示されます。metasploit のフォルダーを調べると、このハンドラーのコードが次の場所にあることがわかりました。/opt/metasplot/apps/pro/msf3/lib/msf/core/handler