Metasploit/使用 Mixin
Mixin 是 Ruby 語言中的一種便捷機制,用於將功能包含到模組中。雖然 Ruby 是一種單繼承語言,但 Mixin 提供了一種以某種方式實現多重繼承的方法。Metasploit 很好地利用了 Mixin。理解和有效地使用 Mixin 是 MSF 模組開發過程中的重要組成部分。本章旨在描述各種可用的 Mixin、其用途和功能。
請注意,Mixin 通常不與特定模組類別(漏洞利用、輔助等)繫結,儘管它們出現在最適合它們的類別下。這意味著你可以在輔助模組中使用漏洞利用模組的 Mixin,反之亦然。
此 Mixin 用於將主機、服務和漏洞資訊儲存到資料庫。它提供了兩種方法 report_host 和 report_service,用於指示主機的狀態(已啟動或已停止等)和服務。要使用此模組,你需要使用以下方法將其包含到你的類中:include Auxiliary::Report
包含 Mixin 後,你可以使用它的方法在 DB 中儲存資訊。
請注意,如果你沒有載入後端資料庫,呼叫這些方法將不會執行任何操作,也不會引發錯誤。
此方法接受一個雜湊引數。要儲存已啟動主機的狀態,你可以按如下方式呼叫此方法
report_host(:host => datastore['RHOST'])
要指定主機不線上(已停止),請將第二個引數傳遞給方法,該引數應該是 HostState 型別。
report_host(:host => '127.0.0.1', Msf::HostState::Dead)
與 report_host 方法類似,此方法也接受一個包含各種鍵值對的雜湊引數。雜湊可以包含以下鍵的值
- addr(主機名或地址)
- port(數字埠號)
- proto(協議可以是 'tcp' 或 'udp' )
- name(服務名稱,例如 'http'、'https' 等)
- state(Msf::ServiceState 型別的服務狀態)
以下程式碼段將 TCP 埠 80 報告為 localhost 上的開放埠。請注意,state 的預設值為 Msf::ServiceState::Up,因此我們不需要指定 state 引數。
report_service(:host => 'localhost',
:port => 80,
:name => 'HTTP'
)
Scanner Mixin 允許模組具有對多個主機執行操作的能力。實現掃描程式最簡單、最常見的方法是包含掃描程式 Mixin,程式碼如下
include Auxiliary::Scanner
然後在你的模組中實現 run_host(ip) 方法
def run_host(ip)
print_status("Processing IP #{ip}")
end
每個主機/IP 會自動傳遞給此函式,你只需要實現你的邏輯,就像在單個主機上工作一樣。
包含掃描程式 Mixin 會從模組選項中刪除 RHOST 選項,並向模組新增 RHOSTS 選項。此選項允許你指定網路地址範圍(例如:192.168.10.0/24、11.23.45.6-11.23.45.56 等)。這允許模組使用者指定要掃描的主機。
使用單個 IP 呼叫,使用 THREADS 個併發執行緒。這是針對主機特定問題對一系列地址進行大規模測試的最佳方法。
使用由 run_batch_size() 方法定義的大小的一組 IP 呼叫,使用 THREADS 個併發執行緒。這意味著它會同時處理多個批次,因此不要將其用於單主機測試(它基本上適用於一些極端情況)。
對整個主機範圍呼叫 *一次*。如果你要將此範圍傳遞給其他工具或進行一些網路範圍的測試,這將很有用。例如,呼叫 nmap 程式。
掃描程式模組現在具有使用多個執行緒並行掃描多個主機的額外功能。包含掃描程式 Mixin 現在會向你的模組新增一個額外的 THREADS 選項,其預設值為 1。模組使用者和/或開發人員可以將此值更改為大於 1 的任何值,以進行多執行緒掃描。