3

ここでmetasploit のエクスプロイトを分析しており、358 行目のどこからpayloadinが来ているのかを突き止めようとしていpayload.encodedます。エクスプロイト開発の初心者ですが、基本的なプログラミング ルールではpayload、関数を呼び出す前に初期化する必要があります。payloadどの値にも初期化されていません。56 行目に a がありますがPayload、最初のアルファベットが大文字なので、何か違います (Ruby は大文字と小文字を区別します)。つまりpayload、おそらく何らかのクラスから継承されています。しかし、それが何らかのクラスから継承されている場合、なぜそれをエンコードするのでしょうか? そこに新しい価値を埋めてみませんか?payload特に、エンコーディングに使用されている値を探しています。誰かが私がそれを理解するのを手伝ってくれれば、それは大きな助けになるでしょう. ありがとうございます!

4

2 に答える 2

3

つまり、これは 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上から来て、プラットフォームに依存するエンコーダーでエンコードされます。

于 2014-02-16T20:08:37.203 に答える
0

私は A. Wilson ほど詳細にコードを調べませんでした。しかし、ペイロードを選択せず​​に MetaSploit でエクスプロイトを実行すると (利用可能なペイロードはshow payloadsコマンドで確認できます)、エクスプロイトする前に、選択されているペイロードがreverse handler(デフォルトのペイロードだと思います) であることが示されます。metasploit のフォルダーを調べると、このハンドラーのコードが次の場所にあることがわかりました。/opt/metasplot/apps/pro/msf3/lib/msf/core/handler

于 2014-02-18T19:16:31.160 に答える