开发一个新的 Metasploit 扫描器

Beginner

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

介绍

在本实验中,我们将重新审视 Metasploit 的模块结构和功能分析,并重点介绍扫描器(scanner)。你将学习如何开发自己的 Metasploit 扫描器。

本实验是一个动手实践的教程。为了帮助你理解一些操作,我们将包含一些信息安全理论,并推荐有价值的文章供你阅读,让你在实践的同时巩固理论基础。

回顾 Metasploit 结构并创建 simple_tcp.rb 文件

首先,让我们回顾一下 Metasploit 的结构。

Metasploit 采用模块化设计理念,以提高代码复用效率。该框架使用 Ruby 开发,并包含用 Perl、C、汇编和 Python 编写的组件。它最初是为 Linux 操作系统设计的,因此其命令结构与 Linux 命令 shell 非常相似。然而,它现在支持所有主流操作系统,如 Windows、Solaris 和 Mac。

+---------------+------------------+----------------------------------------------+
| 英文名称      | 模块名称         | 描述                                         |
+---------------+------------------+----------------------------------------------+
| `Aux`         | 辅助模块         | 提供丰富的辅助模块,用于渗透过程中的信息收集,|
|               |                  | 包括扫描和指纹识别各种网络服务、构建伪造服务  |
|               |                  | 以收集登录凭证、密码猜测等。                 |
+---------------+------------------+----------------------------------------------+
| `Exploits`    | 漏洞利用模块     | 利用发现的安全漏洞或配置弱点攻击远程目标系统,|
|               |                  | 植入并运行有效载荷,获取目标系统的访问控制权。|
+---------------+------------------+----------------------------------------------+
| `Post`        | 后渗透模块       | 支持在通过漏洞利用获取远程访问控制权后,对受控|
|               |                  | 系统进行各种后渗透操作,如获取敏感信息、进一步|
|               |                  | 横向移动和发起横向攻击。                     |
+---------------+------------------+----------------------------------------------+
| `Payloads`    | 有效载荷模块     | 有效载荷是在成功利用漏洞后在目标系统上运行的代|
|               |                  | 码段,通常用于为攻击者打开控制会话连接。     |
+---------------+------------------+----------------------------------------------+
| `Encoders`    | 编码器模块       | 在将有效载荷和 NOP 指令组装成指令序列后,     |
|               |                  | Metasploit 需要在漏洞利用模块将恶意数据缓冲区|
|               |                  | 注入目标系统执行之前,进行重要的编码步骤。   |
+---------------+------------------+----------------------------------------------+
| `Nops`        | NOP 模块         | NOP(无操作)指令是对程序执行状态没有实质性影|
|               |                  | 响的操作或指令。                             |
+---------------+------------------+----------------------------------------------+

Metasploit 还集成了多个漏洞扫描组件,例如:

  • Nmap 扫描器:适用于 Windows、Linux 和 Mac OS。用于主机发现、端口扫描或枚举、服务发现以及检测操作系统、硬件地址、软件版本和漏洞。

  • NeXpose 扫描器:扫描网络以查找运行的设备,识别其操作系统和应用程序漏洞,分析扫描数据并生成漏洞扫描报告。

  • Nessus 扫描器:使用最广泛的漏洞扫描工具之一。它采用客户端/服务器模型,服务器执行安全检查,客户端配置和管理服务器。服务器还使用插件系统,允许用户添加插件以实现特定功能和更复杂的安全检查。

现在,我们将创建一个名为 simple_tcp.rb 的新 Metasploit 扫描器模块。

  1. 在 LabEx 主机上打开一个 xfce 终端,并通过运行以下命令启动 Metasploitable2 目标:
sudo virsh start Metasploitable2

等待目标机器启动,可能需要1-3分钟。

  1. 通过 ping 测试目标机器的连通性:
ping 192.168.122.102

Ctrl+C 停止 ping。

  1. 启动 Kali Linux 容器并进入 bash 环境:
docker run -ti --network host b5b709a49cd5 bash
  1. 在 Kali 容器内,测试与目标机器的网络连接:
ping 192.168.122.102

Ctrl+C 停止 ping。

  1. 然后,导航到 scanner 模块目录:
cd /usr/share/metasploit-framework/modules/auxiliary/scanner
  1. 创建一个名为 simple_tcp.rb 的新文件:
sudo vi simple_tcp.rb
  1. 将以下代码复制并粘贴到文件中:
require 'msf/core'
class MetasploitModule < Msf::Auxiliary
    include Msf::Exploit::Remote::Tcp
    include Msf::Auxiliary::Scanner

    def initialize
        super(
            'Name'        => 'Mr_Zhou Scanner',
            'Version'     => '$Revision$',
            'Description' => 'Shiyanlou TCP Scanner',
            'Author'      => 'lucat',
            'License'     => MSF_LICENSE
        )
        register_options(
            [
                Opt::RPORT(12345)
            ], self.class)
    end

    def run_host(ip)
        connect()
        sock.puts('HELLO SERVER')
        data = sock.recv(1024)
        print_status("Received: #{data} from #{ip}")
        disconnect()
    end
end
  1. 这段代码定义了一个名为 "Mr_Zhou Scanner" 的新 Metasploit 模块,用于扫描 TCP 端口并显示从服务器接收到的任何数据。让我们逐段分析代码:
def initialize
    super(
        'Name'        => 'Mr_Zhou Scanner',
        'Version'     => '$Revision$',
        'Description' => 'Shiyanlou TCP Scanner',
        'Author'      => 'lucat',
        'License'     => MSF_LICENSE
    )

此部分设置了模块的元数据,例如其名称、描述、作者和许可证。

register_options(
    [
        Opt::RPORT(12345)
    ], self.class)

此行注册了扫描端口 12345 的选项。

def run_host(ip)
    connect()
    sock.puts('HELLO SERVER')
    data = sock.recv(1024)
    print_status("Received: #{data} from #{ip}")
    disconnect()
end

此方法针对每个目标 IP 地址执行。它连接到指定端口,发送字符串 "HELLO SERVER",接收并打印来自服务器的任何数据,然后断开连接。

保存文件并退出编辑器。

设置监听服务器

为了测试我们的 simple_tcp.rb 扫描器,我们需要在目标机器上设置一个监听服务器。

在 LabEx 主机上,打开一个新的 Xfce 终端,并创建一个名为 shiyanlou.txt 的文件:

vi shiyanlou.txt

在此文件中,输入你想要的任何文本。当扫描器连接到监听端口时,此文本将被发送回扫描器。例如:

Life is short, i use Python.

保存文件并退出编辑器。

接下来,在端口 12345(我们的扫描器配置的端口)上启动一个监听服务器,并将 shiyanlou.txt 的内容发送给任何连接的客户端:

sudo nc -l 12345 < shiyanlou.txt

服务器现在将在端口 12345 上监听并等待传入的连接。

运行 simple_tcp 扫描器

现在我们已经准备好了 simple_tcp 扫描器模块并设置了监听服务器,接下来让我们运行扫描器并测试其是否正常工作。

首先,在 Kali Linux 容器中启动 Metasploit 控制台:

cd ~
sudo msfconsole

控制台加载完成后,使用我们的 simple_tcp 模块:

use auxiliary/scanner/simple_tcp

你可以使用 info 命令查看模块信息:

info

以下是你可能会看到的输出示例:

Name:          Mr_Zhou Scanner
Description:   Shiyanlou TCP Scanner
Author:        lucat
License:       Metasploit Framework License (BSD)
Version:       $Revision$

接下来,设置目标主机的 IP 地址:

set RHOSTS 192.168.122.1

注意:使用 RHOSTS(带 's'),而不是 RHOST。你可以通过 show options 命令查看应该使用哪个选项。

最后,运行扫描器:

run

如果一切设置正确,你应该会看到来自监听服务器的消息:

[+] Received: Life is short, i use Python. from 192.168.122.1

如果你没有收到该消息,请返回监听服务器并再次运行 sudo nc -l 12345 < shiyanlou.txt

恭喜!你已经成功开发并测试了自己的 Metasploit 扫描器模块。

按 Ctrl+D 退出 Metasploit 控制台,然后开始检查

总结

在本实验中,你学习了如何开发自己的 Metasploit 扫描器模块。你回顾了 Metasploit 模块的结构,创建了一个名为 simple_tcp.rb 的新 TCP 扫描器模块,设置了一个监听服务器来测试扫描器,并成功运行扫描器以接收并显示来自服务器的数据。

通过开发 Metasploit 扫描器的动手实践,你将更好地理解该框架的功能以及如何通过自定义模块扩展它。你可以利用这些知识创建更高级的扫描器或其他类型的模块,以完成各种渗透测试任务。

您可能感兴趣的其他 教程