## 如何開始寫一個輔助模塊
Metasploit以其免費的開源 exploit- 彈出式shell模塊而聞名。但實際上,滲透測試人員更多依賴于輔助模塊,而且通常可以在不觸發單個漏洞的情況下完成成功的滲透。他們更方便,對失敗的懲罰通常要低得多。專業人員其實更喜歡輔助模塊。
關于輔助模塊的另一個有趣的事實是,其中一些與exploit沒有太大的區別。主要區別在于它是如何在Metasploit中定義的:如果一個模塊彈出一個shell,這是一個漏洞。如果不是,即使它利用了漏洞,它仍然屬于輔助類別。
所以你看,如果你是一個輔助模塊熱愛者,你是來對了。
### 計劃你的模塊
就像編寫一個軟件一樣,在你開始寫代碼之前,你應該對你的輔助模塊有一個清晰明確的目標。在單個模塊中具有多個功能從來就不是一個好主意。你應該把它分解成多個模塊。
你也應該考慮你的模塊在不同情況下的表現。例如,如果要針對Tomcat服務器進行測試,那么如果使用Nginx,會發生什么情況?它會出錯并留下錯誤回溯?如果是這樣,你應該妥善處理。您的模塊是否需要目標機器的特定設置/條件?如果沒有,會發生什么?它會再次出錯嗎?
最重要的是,確保徹底測試你的模塊。在重要的戰斗中發現問題總是很難堪,這可能會讓你付出代價。
### 輔助模塊的主要類別
一般來說,輔助模塊是根據他們的行為分類的,但是這有點不一致,所以你只需要用最好的判斷,找出最合適的模塊。以下是一些常見的列表:
| 類別 | 描述 |
| --- | --- |
| admin | 在目標機器上修改,操作或操作某些東西的模塊 |
| analyze | 我們最初為需要分析時間的密碼破解模塊創建了這個文件夾。 |
| client | 我們最初為了社會工程目的創建了SMTP模塊的這個文件夾。 |
| dos | 不言自明 拒絕服務模塊。 |
|fuzzers | 如果你的模塊是fuzz,這就是它所屬的地方。確保根據協議將其放置在正確的子目錄中。 |
| gather | 從單個目標收集或枚舉數據的模塊。 |
| scanner | 使用Msf::Auxiliary::Scanner的模塊幾乎總是在這里。確保根據協議將其放置在的正確的子目錄。 |
| server |服務器的模塊|
|sniffer| 嗅探器的模塊。|
實際上在輔助目錄中還有幾個目錄,但這就是灰色區域的地方。是非常歡迎你來[看的](https://github.com/rapid7/metasploit-framework/tree/master/modules/auxiliary)
### The Msf::Auxiliary::Scanner mixin
這`Msf::Auxiliary::Scanner`mixin在輔助模塊大量使用。所以我們不妨說說,就在這里。mixin允許你能夠測試一系列主機,而且是多線程的。要使用它,首先你需要在你的`Metasploit3`類的范圍內包含mixin
~~~
include Msf::Auxiliary::Scanner
~~~
包含這個mixin的時候,一些新的東西會被添加到你的模塊中。您將擁有一個名為“RHOSTS”的新數據存儲選項,該選項允許用戶指定多個主機。有一個新的“THREADS”選項,它允許執行期間運行的線程數量。跟蹤掃描進度的還有“ShowProgress”和“ShowProgressPercent”
通常,輔助模塊的主方法是“def run”。但是當你使`Msf::Auxiliary::Scanenrmixin`時,你需要使用def run_host(ip)。IP參數是目標機器。
### 模板
這是一個輔助模塊的最基本的例子。我們將更多地解釋需要填充的字段:
~~~
##
# This module requires Metasploit: http://metasploit.com/download
# Current source: https://github.com/rapid7/metasploit-framework
##
require 'msf/core'
class MetasploitModule < Msf::Auxiliary
def initialize(info = {})
super(update_info(info,
'Name' => 'Module name',
'Description' => %q{
Say something that the user might want to know.
},
'Author' => [ 'Name' ],
'License' => MSF_LICENSE
))
end
def run
# Main function
end
end
~~~
該名稱字段可以以供應商的名稱開頭,但是是可選的。然后基本上描述它是什么。例如:“Dolibarr ERP/CRM Login Utility”
在Description字段應該解釋模塊做什么,什么事情要留意,具體要求,多多益善。目標是讓用戶了解他所使用的內容,而不需要實際讀取模塊的源代碼并找出結果。相信我,他們中的大多數人不會。
Author 字段是你的名字。格式應該是“名稱”。如果你想在那里有你的Twitter,留下它作為一個評論,例如:“名稱#handle”
因為`Msf::Auxiliary::Scanner`mixin非常受歡迎,所以我們覺得你也需要一個模板。在這里:
~~~
##
# This module requires Metasploit: http://metasploit.com/download
# Current source: https://github.com/rapid7/metasploit-framework
##
require 'msf/core'
class MetasploitModule < Msf::Auxiliary
include Msf::Auxiliary::Scanner
def initialize(info = {})
super(update_info(info,
'Name' => 'Module name',
'Description' => %q{
Say something that the user might want to know.
},
'Author' => [ 'Name' ],
'License' => MSF_LICENSE
))
end
def run_host(ip)
# Main method
end
end
~~~
### 基本的git命令
Metasploit不再使用svn進行源代碼管理,而是使用git,所以了解git的一些技巧會有很長的路要走。
我們不是在這里教你git是多么的棒,我們知道它有一個學習曲線,新的用戶犯錯誤并不奇怪。
每隔一段時間,你的git”怒火"就會踢過來,我們理解。不過,重要的是要利用分支
。
每次創建模塊或對現有代碼進行一些更改時,都不應該在默認主分支上這樣做。為什么?因為當你使用msfupdate更新你的Metasploit倉庫的工具時,它會在合并這些改變之前做一個git reset,你就要和你所有的代碼說再見。
人們傾向于做的另一個錯誤是在提交拉取請求之前對主分支進行了任何更改.這是個壞主意,因為很可能你提交了你不打算改變的其他垃圾,或者你可能會要求我們合并其他不必要的提交歷史.只要一次提交就行了.感謝你提交模塊到社區,但不感謝你提交其他不必要的提交歷史.
所以作為一種習慣,當你想要做出新的東西或者改變某些東西的時候,從最新的主分支分叉一個新的分支開始,首先,先確認你是master分支,如果你使用`git status`,它將會告訴你現在所在分支
~~~
$ git status
# On branch upstream-master
nothing to commit, working directory clean
~~~
好的,接下來`git pull`從metasploit下載最新更改
~~~
$ git pull
Already up-to-date.
~~~
現在,你準備開始一個新分支了.在這種情況,我們新分支的名字是"my_awesome_branch":
~~~
$ git checkout -b my_awesome_module
Switched to a new branch 'my_awesome_module'
~~~
現在你可以繼續前進 添加一個模塊.確認他在合適的路徑
~~~
$ git add [module path]
~~~
當你決定保存更改時,提交(如果只有一個模塊,你也可以這樣做,git commit -a所以你不必輸入模塊路徑,注意-a事實上意味著所有)
~~~
$ git commit [module path]
~~~
完成后,推送您的更改,將您的代碼上傳到您的遠程分支“my_awesome_branch”。您必須推送您的更改才能提交拉取請求,或與互聯網上的其他人共享。
~~~
$ git push origin my_awesome_branch
~~~
- Home
- 開始使用
- 安裝metasploit開發環境
- 使用metasploit
- 使用git
- 報告一個bug
- 貢獻代碼
- 貢獻給metasploit
- 創建一個loginscans Metasploit模塊
- 接受模塊和增強功能的指導
- 常見的Metasploit模塊代碼錯誤
- 樣式提示
- metasploit提交者
- metasploit開發
- 為什么是ruby
- 樣式提示
- 如何開始寫一個exploit
- 如何開始寫一個輔助模塊
- 如何開始寫一個post模塊
- 如何開始寫一個Meterpreter腳本
- 載入外部模塊
- exploit rank
- Metasploit模塊引用標識符
- 怎么在你的exploit中確認window補丁程序級別
- 如何使用filedropper清理文件
- 如何棄用metasploit模塊
- 如何在模塊開發中報告或儲存數據
- 在metasploit如何使用日志
- 如何在metasploit對JavaScript進行混淆
- 如何解析一個http響應
- 如何使用HTTPClient發送HTTP請求
- 如何使用命令階段
- 如何使用數據儲存選項
- 如何在window后期開發中使用railgun
- 如何在exploit中使用powershell
- 如何使用PhpEXE來利用任意文件上傳漏洞
- 如何使用FILEFORMAT mixin創建一個文件格式exploit
- 如何使用BrowserExploitServer編寫一個瀏覽器exploit
- 如何使用HttpServer編寫瀏覽器exploit
- 如何編寫一個check()方法
- 如何使用Seh mixin來利用異常處理程序
- 如何在Windows上使用WbemExec進行寫入權限攻擊
- 如何使用httpserver和httpclient編寫一個模塊
- payloads如何工作
- 如何免殺
- 如何正確使用metasploit模塊