如何写一个Metasploit的登录扫描(LoginScanners)插件

我们不生产文章,我们只是大自然的搬运工。此扫描插件的详细生产由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的值由扫描控件是否需要这两个功能来决定。(在后面具体解释)。登录扫描控件会不断的收集证书去尝试一个主机的一个端口,所以每一个登录扫描控件都只会尝试登录到一个特定的服务。  

原文地址:https://www.cnblogs.com/gotoMars/p/8642044.html