news 2026/8/15 21:14:55

从DC-1靶机入门渗透测试:Drupal漏洞利用与Linux提权实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从DC-1靶机入门渗透测试:Drupal漏洞利用与Linux提权实战

1. 项目概述:从“靶机DC-1”说起,为什么它依然是渗透测试的经典入门课

如果你刚接触网络安全,或者想从理论转向实战,那么“靶机”这个词你肯定不陌生。而DC-1,几乎可以算是这个领域的“Hello World”。它不是一个真实的、需要你负法律责任的系统,而是一个被精心设计、充满漏洞的虚拟机镜像。你的任务,就是扮演一个“白帽子”黑客,利用各种技术手段,从外部一步步突破它的防线,最终拿到最高权限(root),并找到隐藏的“Flag”(旗帜,即目标文件)。这个过程,我们称之为渗透测试。

DC-1之所以经典,是因为它完美地模拟了一个老旧但现实中仍可能存在的网站环境:一个基于Drupal内容管理系统的网站。Drupal本身功能强大,但配置不当或版本过时,就会成为攻击者的突破口。DC-1靶机将这些经典漏洞(比如著名的Drupalgeddon漏洞)集成在一个场景里,让你能在一个安全、合法的环境中,完整地走一遍“信息收集→漏洞利用→权限提升→获取目标”的标准流程。我当年就是靠着折腾DC-1,才真正把书本上的SQL注入、命令执行这些名词,变成了手指敲出的命令和屏幕上跳出的结果。对于新手而言,成功拿下DC-1带来的成就感,是看十篇理论文章都比不上的。

2. 环境搭建与初始信息收集

动手之前,你得先把战场准备好。DC-1是一个ova格式的虚拟机文件,你需要用VirtualBox或者VMware这样的虚拟化软件来运行它。这里我强烈建议使用VirtualBox,因为它免费、轻量,而且对这类靶机兼容性最好。

2.1 靶机与攻击机环境配置

首先,去 VulnHub 官网搜索并下载 DC-1 的镜像文件。下载完成后,在VirtualBox中导入这个ova文件。导入时,几乎所有设置都可以保持默认,但有一个关键点:网络设置必须选择“仅主机(Host-Only)网络”

注意:为什么是“仅主机网络”?这是为了构建一个封闭的、安全的实验环境。在这个模式下,你的物理机(宿主机)和虚拟机(靶机DC-1、你的攻击机Kali Linux)处于一个独立的虚拟网络中,它们可以互相通信,但都无法访问外部的真实互联网。这确保了你的所有攻击行为都被限制在这个沙盒里,不会意外影响到其他网络设备,这是安全测试的伦理底线。

接下来,你需要一个攻击机。Kali Linux是渗透测试的标准系统,集成了几乎所有你需要的工具。同样,在VirtualBox里安装一个Kali Linux虚拟机,网络适配器也设置为“仅主机网络”。确保它和DC-1靶机在同一个虚拟网络下(通常VirtualBox会默认创建一个名为vboxnet0的虚拟网卡,两台虚拟机都挂载上去即可)。

启动两台虚拟机。首先需要找到DC-1的IP地址。由于靶机通常不会主动告诉你它的IP,我们需要进行扫描。在Kali Linux中打开终端,使用netdiscovernmap进行存活主机发现。

# 使用 netdiscover 扫描整个网段,主动探测存活主机 sudo netdiscover -r 192.168.56.0/24 # 或者使用 nmap 进行 ping 扫描 sudo nmap -sn 192.168.56.0/24

命令中的192.168.56.0/24是VirtualBox仅主机网络的常见网段,如果你的环境不同,需要根据ip addr命令查看vboxnet0网卡的实际IP段进行调整。扫描结果中,除了你的Kali本机IP(比如192.168.56.101)之外,另一个活跃的IP很可能就是DC-1靶机(例如192.168.56.102)。记下这个IP,它就是我们要攻击的目标。

2.2 全面的服务与端口探测

知道IP后,下一步是进行详细的端口扫描,弄清楚目标开放了哪些“门”(服务)。我们使用Nmap这个“瑞士军刀”。

sudo nmap -sV -sC -O -p- 192.168.56.102

这个命令组合非常强大:

  • -sV:探测服务版本。知道运行的是Apache 2.2.22还是OpenSSH 7.4,对寻找漏洞至关重要。
  • -sC:使用默认的Nmap脚本进行扫描,能发现一些常见的安全问题或获取额外信息。
  • -O:尝试识别操作系统。
  • -p-:扫描所有65535个端口,避免遗漏像3306(MySQL)这样的非标准Web端口。

扫描完成后,你通常会看到类似这样的结果:

PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 6.0p1 Debian 4+deb7u7 (protocol 2.0) 80/tcp open http Apache httpd 2.2.22 ((Debian)) 111/tcp open rpcbind 2-4 (RPC #100000) ...

从结果中,我们立刻能提取关键信息:目标运行着Debian系统,开放了22端口(SSH)80端口(HTTP Web服务)。Web服务器是Apache 2.2.22,这是一个比较旧的版本。我们的主攻方向,毫无疑问就是80端口的Web应用。

3. Web应用渗透与漏洞利用

既然确定了Web是主要入口,我们就打开浏览器,访问http://192.168.56.102。一个标准的Drupal 7网站界面会呈现在眼前。Drupal会在页脚等处留下版本信息,或者我们可以用whatweb这样的工具快速识别。

whatweb http://192.168.56.102

确认是Drupal 7后,经验丰富的测试者脑子里应该立刻响起警报:Drupal 7.x在历史上存在过多个严重远程代码执行漏洞,其中最著名的就是Drupalgeddon (CVE-2014-3704)Drupalgeddon 2 (CVE-2018-7600)。DC-1靶机正是利用了这些漏洞。

3.1 利用Drupalgeddon 2获取初始立足点

我们使用针对CVE-2018-7600的公开利用脚本。在Kali中,可以使用searchsploit查找,或者直接从网络获取Python脚本。这里我演示使用一个经典的PoC(概念验证)脚本。

# 首先查找可用脚本 searchsploit drupal 7 # 通常会找到 Drupal 7.x (CVE-2018-7600) 的脚本,例如 44449.rb # 我们可以使用MSF(Metasploit Framework)更方便地利用 msfconsole

在Metasploit中:

use exploit/unix/webapp/drupal_drupalgeddon2 set RHOSTS 192.168.56.102 exploit

如果目标存在此漏洞,Metasploit会成功利用,并给你返回一个Meterpreter会话。这是一个功能强大的后门,让你可以在目标系统上执行命令。至此,你已经成功突破了边界,在Web服务器上获得了初始的代码执行权限。

实操心得:在实际测试中,直接使用公开的自动化工具(如MSF)虽然快,但有时会因为目标环境差异(如PHP版本、函数禁用)而失败。因此,掌握手动验证和利用的原理很重要。Drupalgeddon 2的漏洞本质是在安装表单处理过程中,未对用户输入进行充分过滤,导致攻击者可以通过精心构造的POST请求,将恶意代码注入到执行流程中。理解这一点,你就能在工具失效时,尝试调整payload或利用方式。

获得Meterpreter会话后,我们先进行基本的系统信息收集:

# 在meterpreter会话中 sysinfo # 查看系统信息 getuid # 查看当前用户权限 pwd # 查看当前目录

你会发现,当前用户可能是www-data,这是Apache服务的默认运行账户,权限很低。我们需要想办法提升权限。

3.2 权限提升:从www-data到root

在低权限下,我们无法读取系统关键文件(如/etc/shadow)或进行其他敏感操作。因此,权限提升(Privilege Escalation)是必经的一步。在Linux系统中,提权方法五花八门,但DC-1为我们设计了一条经典的路径。

首先,在目标机器上寻找具有SUID(Set User ID)特殊权限的文件。SUID文件在执行时,会以文件所有者的身份运行。如果找到一个属于root且具有SUID权限的命令,而我们又能以某种方式影响它的执行,就可能实现提权。

# 在meterpreter会话中,切换到shell模式 shell # 或者使用 meterpreter 的 `execute` 命令 # 查找SUID文件 find / -perm -u=s -type f 2>/dev/null

在返回的列表中,一个不常见的二进制文件可能会引起你的注意,比如/usr/bin/findfind命令本身很常见,但通常不应该被设置SUID位。如果它被设置了SUID且属于root,这就是一个巨大的安全隐患。

我们可以利用find命令的-exec参数来执行任意命令,并且由于SUID,这个命令会以root权限运行。

# 在靶机的shell中执行 /usr/bin/find . -exec /bin/sh \; -quit

执行后,你会发现自己获得了一个新的shell。使用whoami命令查看,如果返回root,那么恭喜你,已经成功提权到系统最高权限。

注意事项:这种利用方式非常直接,在现代稍微新一点的系统中,find命令的SUID位几乎肯定会被移除。DC-1故意保留了这个“古老”的漏洞,是为了教学目的。在实际环境中,你需要使用更复杂的提权技术,比如利用内核漏洞(如Dirty Cow)、分析以root权限运行的定时任务(cron job)、滥用错误的sudo配置等。工具如linpeaslinux-exploit-suggester可以自动化地帮你发现系统的提权弱点。

4. 信息搜集与最终目标获取

拿到root权限后,整个系统对你来说就是透明的了。但渗透测试的最终目的不仅仅是拿到root,更是达成客户设定的目标。在CTF(夺旗赛)和很多靶机中,这个目标就是找到特定的“flag”文件。

4.1 定位Flag文件

通常,flag文件会以flag.txtproof.txtroot.txt等名称存在,并放在用户目录、/root/var/www/等位置。我们可以使用find命令进行全局搜索。

# 在root shell中 find / -name *flag* 2>/dev/null find / -name *proof* 2>/dev/null find / -name *.txt -type f | xargs grep -l "flag{"

在DC-1中,你会发现不止一个flag。这是它的另一个经典之处:它设计了多个flag,引导你探索系统的不同部分。你可能会在/var/www/目录下找到第一个flag(与网站相关),在/home目录下找到第二个(与用户相关),而最终的flag往往在/root目录下。

4.2 探索与总结

读取这些flag文件,它们的内容可能是一串哈希值,也可能是一段提示文本。例如,第一个flag可能提示你“暴力破解不是唯一的方式”,这或许在暗示你之前不应该在登录表单上浪费时间尝试爆破,而应该直接寻找RCE漏洞。第二个flag可能提示你“检查配置文件”,引导你去查看Drupal的settings.php文件,里面可能包含数据库密码。

通过数据库密码,你可以连接到MySQL数据库,查看drupal数据库中的users表,尝试破解或修改管理员哈希密码,这又是另一种攻击路径。DC-1通过这种方式,将一次简单的漏洞利用,扩展成了一个涵盖信息收集、漏洞利用、权限提升、密码破解、数据库操作的完整知识链。

5. 常见问题与排查技巧实录

在实际操作DC-1或类似靶机时,你肯定会遇到各种问题。下面是我和学员们常遇到的一些坑及解决办法。

5.1 网络连通性问题

问题:Kali能ping通自己,但ping不通靶机IP,或者反过来。排查:

  1. 检查虚拟机网络设置:确保两台虚拟机(Kali和DC-1)的网卡都连接到同一个“仅主机(Host-Only)”网络适配器上。在VirtualBox全局设置中,查看“主机网络管理器”,确保只有一个活跃的vboxnet网卡,并且两台虚拟机都勾选了它。
  2. 检查防火墙:确保Kali的防火墙没有阻止扫描(sudo ufw disable可以临时关闭,仅用于实验)。靶机DC-1的防火墙默认是关闭的,一般无需处理。
  3. 重启网络服务:在Kali中,尝试sudo systemctl restart networking。有时VirtualBox的虚拟网卡需要重新获取IP。
  4. 终极方法:关闭所有虚拟机,在VirtualBox中彻底删除那个虚拟网卡(vboxnet0),然后启动任意一台虚拟机,VirtualBox会自动创建一个新的,通常能解决问题。

5.2 漏洞利用失败

问题:使用Metasploit的drupal_drupalgeddon2模块攻击后,没有返回会话。排查:

  1. 确认目标版本:再次用whatweb或浏览网站确认绝对是Drupal 7。Drupal 8也存在CVE-2018-7600,但利用方式可能有细微差别。
  2. 检查Payload和LHOST:在MSF中,确保PAYLOAD选择的是兼容的(如php/meterpreter/reverse_tcp),并且LHOST设置为你Kali在仅主机网络中的IP地址。
  3. 尝试手动利用:搜索引擎寻找“CVE-2018-7600 manual exploit”,会有一些简单的curl命令PoC。手动执行可以更清晰地看到错误信息(如403 Forbidden,可能是某些路径被限制)。
  4. 靶机服务状态:确认靶机的Apache服务正在运行(在靶机里你暂时还做不到,但可以看Kali的nmap扫描结果,80端口是否开放)。

5.3 SUID提权失败

问题:执行/usr/bin/find . -exec /bin/sh \; -quit后,新的shell用户还是www-data,不是root排查:

  1. 确认SUID位:再次执行ls -la /usr/bin/find,确认权限中确实有-rwsr-xr-x(注意那个s),并且所有者是root
  2. 命令路径问题:有时/bin/sh可能是指向/bin/dash的链接,而dash在启动时会自动降低权限。尝试使用/bin/bash/usr/bin/find . -exec /bin/bash -p \; -quit-p参数告诉bash保留特权模式。
  3. 当前目录权限:确保你在一个www-data用户有权限读写的目录下执行该命令,比如/tmp

5.4 找不到Flag文件

问题:用find命令搜遍了也找不到flag文件。排查:

  1. 文件名变体:不要只搜“flag”,试试“Flag”、“FLAG”、“proof”、“secret”、“key”、“.txt”、“.md”、“.php”。
  2. 内容搜索:Flag可能藏在文件内容里。使用grep -r "flag{" / 2>/dev/nullgrep -r "FLAG" / 2>/dev/null进行递归内容搜索。
  3. 非常规位置:检查Web目录下的配置文件(config.phpsettings.php)、数据库备份文件(.sql)、历史命令文件(~/.bash_history)、计划任务文件(/etc/crontab)等。
  4. 权限问题:你可能已经在一个flag所在的目录里,但因为它是其他用户的文件且没有读权限,所以ls看不到?用ls -la查看隐藏文件,并用cat尝试读取你怀疑的文件,即使ls显示你没有权限。

6. 靶机之外的思考与技能延伸

成功拿下DC-1,只是一个开始。它像一本编排好的入门教程,而真实的网络环境要复杂和混乱得多。基于DC-1的经验,你可以从以下几个方面深化你的技能:

1. 手动漏洞利用深度练习:

  • 不要满足于MSF一键getshell。尝试手动复现Drupalgeddon 2漏洞。在网上找到漏洞原理分析文章和原始的PHP PoC代码,自己编写一个简单的Python脚本,通过Requests库发送恶意的POST请求,理解每一个参数的意义。这会让你对漏洞本质有飞跃性的认识。

2. 多样化提权手法收集:

  • 建立一个你自己的“提权检查清单”。除了SUID,还有: *内核漏洞:使用uname -a查看内核版本,搜索对应的公开漏洞(如Dirty Cow, CVE-2016-5195)。 *sudo权限滥用:运行sudo -l查看当前用户能以root身份无需密码运行哪些命令。如果包含vifindpython等,都可能用来提权。 *环境变量劫持:如果SUID程序调用了未指定绝对路径的命令,可以通过操纵PATH环境变量来劫持。 *定时任务:检查/etc/crontab/var/spool/cron/crontabs/,看是否有全局可写的脚本被root定时执行。
  • 使用自动化脚本如LinEnumlinpeas进行全面的信息收集,它们能帮你快速发现这些弱点。

3. 横向移动与持久化:

  • DC-1是一个单机靶场。在真实网络中,拿下Web服务器往往只是跳板。你需要学习如何横向移动——利用已控机器上的信息(如密码哈希、SSH密钥、配置文件中的数据库密码)去攻击网络内的其他机器。
  • 学习持久化技术:如何在目标机器上安装后门,确保即使被发现、漏洞被修补,你仍然能维持访问权限。例如,添加SSH密钥、创建隐藏的后门账户、安装Webshell、设置计划任务反弹shell等。

4. 尝试其他经典靶机:

  • DC系列本身就有DC-2, DC-3, DC-4等,难度递增,涉及的技术点也不同(比如DC-2需要破解SSH,DC-3涉及另一个CMS漏洞)。
  • VulnHubHackTheBox上有数百个难度各异的靶机。从“Beginner”或“Easy”级别开始,逐步挑战。每个靶机都有其侧重点,有的考察逻辑漏洞,有的考察Windows系统渗透,有的则模拟一个复杂的内部网络。

我个人最深的体会是,渗透测试是一门“动手的艺术”。看再多的视频和文章,都不如自己亲手在靶机上敲一次命令、报一次错、解决一个问题来得实在。DC-1的价值,就在于它用最低的入门门槛,给了你一个完整的、正向的反馈循环:发现问题→研究原理→利用漏洞→获得权限→达成目标。这个循环,是驱动你在这个领域不断深入的最核心动力。当你对DC-1的每一步都了然于胸后,不妨关掉攻略,从头再来一遍,尝试用不同的方法、走不同的路径达到同样的目标,这才是真正内化知识的开始。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/15 21:13:33

Claude Code ReAct主循环源码解析:从代码生成到执行的AI编程范式跃迁

1. 项目概述:从“代码生成”到“代码执行”的范式跃迁如果你用过 Claude Code 或者 GitHub Copilot,肯定对它们“写代码”的能力印象深刻。你写个注释,它就能给你生成一段看起来不错的函数。但不知道你有没有遇到过这种情况:生成的…

作者头像 李华
网站建设 2026/8/15 21:09:29

从只读到可写:Nigate 让 Mac 用户轻松管理 NTFS 磁盘

从只读到可写:Nigate 让 Mac 用户轻松管理 NTFS 磁盘 【免费下载链接】Free-NTFS-for-Mac Nigate: An open-source NTFS utility for Mac. It supports all Mac models (Intel and Apple Silicon), providing full read-write access, mounting, and management for…

作者头像 李华
网站建设 2026/8/15 21:02:59

WinForm应用实战开发指南 - 复选框控件复制小技巧分享

本人在开发Winform程序中,有一个给复选框赋值和获取值的小技巧,分享讨论一下。 PS:给大家推荐一个C#开发可以用到的界面组件——DevExpress WinForms ,它能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的…

作者头像 李华
网站建设 2026/8/15 21:02:18

【使用者手册】手动改善IntelliJ IDEA和Scala插件性能

IntelliJ IDEA,是java编程语言开发的集成环境。IntelliJ在业界被公认为最好的java开发工具,尤其在智能代码助手、代码自动提示、重构、JavaEE支持、各类版本工具(git、svn等)、JUnit、CVS整合、代码分析、 创新的GUI设计等方面的功能可以说是超常的。 在…

作者头像 李华
网站建设 2026/8/15 20:52:32

flask-apispec核心组件解析:webargs、marshmallow与Swagger无缝集成

flask-apispec核心组件解析:webargs、marshmallow与Swagger无缝集成 【免费下载链接】flask-apispec 项目地址: https://gitcode.com/gh_mirrors/fl/flask-apispec flask-apispec是一个轻量级的Flask REST API构建工具,它巧妙整合了webargs请求解…

作者头像 李华