介绍
在本实验中,我们将重新审视 Metasploit 的模块结构和功能分析,并重点介绍扫描器(scanner)。你将学习如何开发自己的 Metasploit 扫描器。
本实验是一个动手实践的教程。为了帮助你理解一些操作,我们将包含一些信息安全理论,并推荐有价值的文章供你阅读,让你在实践的同时巩固理论基础。
在本实验中,我们将重新审视 Metasploit 的模块结构和功能分析,并重点介绍扫描器(scanner)。你将学习如何开发自己的 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 扫描器模块。
sudo virsh start Metasploitable2
等待目标机器启动,可能需要1-3分钟。
ping 192.168.122.102
按 Ctrl+C
停止 ping。
docker run -ti --network host b5b709a49cd5 bash
ping 192.168.122.102
按 Ctrl+C
停止 ping。
scanner
模块目录:cd /usr/share/metasploit-framework/modules/auxiliary/scanner
simple_tcp.rb
的新文件:sudo vi simple_tcp.rb
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
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 扫描器的动手实践,你将更好地理解该框架的功能以及如何通过自定义模块扩展它。你可以利用这些知识创建更高级的扫描器或其他类型的模块,以完成各种渗透测试任务。