1. 程式人生 > >如何寫一個Metasploit的登錄掃描(LoginScanners)插件

如何寫一個Metasploit的登錄掃描(LoginScanners)插件

發送 user spl ast 設定 相互 語法 lec 文章

我們不生產文章,我們只是大自然的搬運工。此掃描插件的詳細生產由rapid團隊在github發布,詳情在博客最下端。

在寫插件之前,我們需要了解一些基本的概念:

證書(Credential Objects)

數字證書目前采用公鑰體制,即利用一對相互匹配的密鑰進行加密和解密。每個用戶自己設定一把加密的私鑰和一把用於解密的公鑰。當發送保密文件時,發送方使用接收方的公鑰加密,接收方使用自己的私鑰解密,這是一個不可逆的過程,理論上只有自己的私鑰解密。

而用戶可以用自己的私鑰加密信息,而生成的文件只有自己的公鑰才能解密,這就是對文件進行數字簽名,其目的有兩點:

1)保證信息是由簽名者自己簽名發送的。

2)保證信息自簽發後到收到為止未曾做過任何修改。

證書在ruby項目中的引用:Metasploit::Framework::Credential ,在Metasploit中具體的位置為/usr/share/metasploit-framework/lib/metasploit/framework/credential.rb。

結果(Result Objects)

由掃描生成的結果,其中包括:

1)接入等級,用於描述嘗試登錄的訪問級別。

2)證書,掃描完成後獲取的證書。

3)證明,一個可選的證明可以用來展示為什麽結果是有用的。

4)狀態,嘗試登錄的狀態。狀態的值來自Metasploit::model::login::Status。

結果在ruby項目中的引用:Metasploit::Framework::LoginScanner::Result,在Metasploit的具體位置為/usr/share/metasploit-framework/lib/metasploit/framework/login_scanner/result.rb。

證書收集(CredentialCollection)

該類用於從模塊中獲取數據存儲選項,並從每個方法中生成證書對象。不僅使用wordlist文件,還將用戶名的選項設置成密碼和空白密碼兩種模式。它能作為登錄掃描控件的cred_details上傳,並響應#each同時生成證書。

ftp_login的例子(文件地址:modules/auxiliary/scanner/ftp/ftp_login.rb):

cred_collection = Metasploit::Framework::CredentialCollection.new(
        blank_passwords: datastore[‘BLANK_PASSWORDS‘],
        pass_file: datastore[‘PASS_FILE‘],
        password: datastore[‘PASSWORD‘],
        user_file: datastore[‘USER_FILE‘],
        userpass_file: datastore[‘USERPASS_FILE‘],
        username: datastore[‘USERNAME‘],
        user_as_pass: datastore[‘USER_AS_PASS‘],
        prepended_creds: anonymous_creds
    )

證書收集在ruby項目中的引用:Metasploit::Framework::CredentialConllection,在Metasploit的具體位置為/usr/share/metasploit-framework/lib/metasploit/framework/credential_collection.rb。

登錄掃描基類(LoginScanner Base)

這個Ruby模塊包含了所有的登錄掃描的基本行為,所有的登錄掃描類都應該包含這個模塊。這些行為的說明被存放在一個共享的例組裏。而我們的登錄掃描控件規範說明應當遵循以下的語法來引入這些測試:

it_behaves_like ‘Metasploit::Framework::LoginScanner::Base‘, has_realm_key: false, has_default_realm: false

去has_realm_key和has_default_realm的值由掃描控件是否需要這兩個功能來決定。(在後面具體解釋)。登錄掃描控件會不斷的收集證書去嘗試一個主機的一個端口,所以每一個登錄掃描控件都只會嘗試登錄到一個特定的服務。  

如何寫一個Metasploit的登錄掃描(LoginScanners)插件