跳至內容

Metasploit/開發輔助模組

來自華夏公益教科書,自由的教科書


在 Metasploit 3 中開發和理解輔助模組

[編輯 | 編輯原始碼]

本章介紹了輔助模組背後的概念、其結構以及如何開發輔助模組的工作示例。本章的大部分討論都圍繞著輔助模組的開發展開。Metasploit 版本 3 使用 Ruby 程式語言編寫。雖然不瞭解任何 Ruby 程式設計知識也可以讓你對框架的組織和功能有很好的瞭解;但如果你瞭解 Ruby 語言並且想要編寫 Metasploit 的模組,你會發現這些材料最有幫助。


輔助模組概述

[編輯 | 編輯原始碼]

在 Metasploit 中,任何不是漏洞利用的模組都是輔助模組。漏洞利用模組始終包含有效負載。輔助模組是框架的一項迷人功能,它允許框架擴充套件以實現各種目的,而不僅僅是漏洞利用。你可以建立自己的快速漏洞掃描程式、埠掃描程式,使 MSF 充當 FTP、HTTP 或 SMTP 客戶端,以及執行很多其他很酷的事情。你可以使用現成的程式碼庫,快速開發此類工具。

在本章中,我們將研究輔助模組的各個方面和功能,並嘗試實現我們自己的輔助模組。該模組將嘗試將檔案放置到允許 HTTP 協議的 PUT 和 DELETE 方法而不進行任何身份驗證的 Web 伺服器上,或者從這些伺服器上刪除檔案。這是一個輔助模組的良好示例,因為它不是漏洞利用。它只是一個簡單的工具來檢查 Web 伺服器配置錯誤。

輔助模組的放置和結構

[編輯 | 編輯原始碼]

輔助模組駐留在框架主目錄的 modules/auxiliary/ 目錄中。下面是輔助模組的基本定義。

require 'msf/core'

p "My Auxiliary Module"

class Metasploit3 < Msf::Auxiliary

end         # for the class definition

將此程式碼放置在 '$HOME/.msf/modules/auxiliary' 資料夾下的任何位置。

所有輔助模組都繼承自它們的基類 Msf::Auxiliary。當 msf 載入時,行 p "My Auxiliary Module" 會列印一行。現在,你的模組已成為 MSF 的一部分,可以透過各種 MSF 使用者介面使用它。當然,就目前而言,此模組除了列印一行(其他任何模組都不會這樣做)之外,什麼也不做。

我們需要做的第一件事是新增一些關於此模組的資訊。這可以在類的 initialize 建構函式中完成。讓我們在類定義中包含 initialize 建構函式。

   def initialize(info = {})
       super(update_info(info,
           'Name'           => 'HTTP Put method exploiter',
           'Description'    => %q{
                   This module exploits faulty web server configurations
                   allowing HTTP PUT and DELETE methods without any user validation.
           },
           'Author'         => [ 'Kashif [at] compulife.com.pk' ],
           'License'        => BSD_LICENSE,
           'Version'        => '$Revision: 4663 $',
           'Privileged'     => false,
           'Platform'       => [  ],
           'Arch'           => [ ARCH_X86, ARCH_PPC, ARCH_SPARC, ARCH_CMD ],
           'Targets'        => [ [ 'Wildcard Target', { } ] ],
           'DefaultTarget'  => 0,
           'Actions'        => [AuxiliaryAction.new('PUT_FILE', {}),
                                AuxiliaryAction.new('DELETE_FILE', {})],
           'DefaultAction'  => [ 'PUT_FILE' ]
           ))

       register_options(
           [
               OptString.new('PATH', [ true,  "path where to store the new file", '/']),
               OptString.new('DATA', [ false,  "Data to write into the file", ' ']),
           ], self.class
           )
       
   end

建構函式首先透過呼叫 super 方法呼叫其基類的建構函式。所有模組都應該包含此呼叫。請注意對建構函式中的 update_info 方法的呼叫。此方法用於更新模組的資訊,無論是漏洞利用模組還是輔助模組。每種模組型別接受的選項略有不同,例如,漏洞利用模組包含 payload 選項,而輔助模組則沒有。

(此處將提供對 update_info 可以接受的選項的詳細描述)

register_options 方法

[編輯 | 編輯原始碼]

第二個呼叫是針對 register_options 方法的。此方法新增使用者可以在執行模組之前指定的選項。

資料儲存

[編輯 | 編輯原始碼]

使用者設定的選項可以透過名為 datastore 的預定義雜湊表使用。例如

 print_status("the contents of the DATA variable are: " + datastore['DATA'])

輔助模組 Mixin

[編輯 | 編輯原始碼]

輔助模組 Mixin 提供了有用的功能,你可以使用這些功能來增強你建立的輔助模組。

華夏公益教科書