从零搭建Kali Linux与DC-1靶场:完整渗透测试实战指南 📅 2026/6/26 10:48:45 1. 项目概述与核心价值最近在整理渗透测试的学习笔记发现很多朋友对如何从零开始搭建一个实战环境感到迷茫。网上的教程要么过于零散要么直接跳到复杂的漏洞利用缺少一个能串联起“环境搭建、工具使用、渗透流程、思路分析”的完整闭环。这让我想起了经典的DC-1靶场它简直是为新手量身定做的“一站式”实战演练场。DC-1不是一个孤立的漏洞而是一个精心设计的、模拟真实老旧内容管理系统CMS的靶机里面层层嵌套了从信息收集到权限提升的多个关卡非常适合用来巩固Web渗透的基础技能链。今天我就把自己搭建DC-1靶场并进行完整渗透的详细过程记录下来同时会附上Kali Linux在VMware虚拟机中的安装教程。我的目标不是让你“照抄命令拿到flag”而是带你理解每一个步骤背后的意图掌握遇到问题时的排查思路。无论你是刚刚接触安全的新手还是想系统梳理一下基础流程的朋友跟着这篇记录走一遍你收获的将不仅仅是一个靶场的通关更是一套可复用的渗透测试方法论和问题解决能力。整个过程我们会用到Kali Linux作为攻击机在VMware中搭建虚拟网络去攻克那台充满“古典”漏洞的DC-1靶机。2. 环境准备构建攻防演练的基石任何实战开始前稳固且隔离的环境是第一步。我们需要两台虚拟机一台作为攻击机Kali Linux另一台作为靶机DC-1。使用VMware或VirtualBox等虚拟化软件可以完美地将它们隔离在你的物理机中避免对真实系统造成任何影响。2.1 Kali Linux攻击机安装与优化Kali Linux是渗透测试的标准工具集我们首先安装它。我强烈建议使用VMware Workstation Pro或Player版本其对虚拟化的支持更成熟。2.1.1 获取与创建虚拟机首先从Kali官网下载最新的ISO镜像文件。在VMware中新建虚拟机选择“典型”配置即可。关键步骤在于客户机操作系统选择“Linux”版本选择“Debian 10.x 64位”或更高Kali基于Debian。虚拟机名称与位置建议命名为“Kali-Pentest”位置放在一个有足够空间的磁盘分区。磁盘容量默认20GB足够选择“将虚拟磁盘拆分成多个文件”这样迁移和备份更方便。自定义硬件这是重点。内存至少分配4GB2048MB是底线但4GB运行更流畅处理器数量建议给2个网络适配器模式必须选择“NAT模式”这能让虚拟机和物理机共享同一个IP出口方便上网下载工具和更新。注意初次安装时如果遇到“无法安装GRUB”的错误通常是因为虚拟机磁盘设置问题。在自定义硬件时确保“硬盘”的类型是SCSI或SATA而不是IDE。如果仍报错可以在安装过程中在“选择软件”环节只勾选“SSH server”和“标准系统工具”暂时不选“Kali工具集”等安装完成进入系统后再执行sudo apt update sudo apt install kali-linux-default来安装全套工具。安装过程中设置好root密码和一个普通用户。安装完成后先别急着开始测试有几个优化操作能让后续体验大幅提升。2.1.2 初始配置与“换源”加速刚安装好的Kali需要更新软件源但默认的国外源速度可能很慢。替换为国内镜像源是必做操作。# 备份原始源列表 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak # 使用编辑器如nano打开源列表文件 sudo nano /etc/apt/sources.list将文件内容全部删除替换为阿里云或清华大学的Kali镜像源例如阿里云deb https://mirrors.aliyun.com/kali kali-rolling main non-free contrib deb-src https://mirrors.aliyun.com/kali kali-rolling main non-free contrib保存退出后更新软件列表并升级系统sudo apt update sudo apt upgrade -y这个过程可能会花点时间但能确保所有工具都是最新的避免因版本问题导致工具运行异常。2.1.3 安装VMware Tools增强功能安装VMware Tools能实现物理机和虚拟机之间的文件拖拽、剪贴板共享和更好的屏幕分辨率适配极大提升操作效率。 在VMware菜单栏点击“虚拟机” - “安装VMware Tools”。这时虚拟机会加载一个光盘镜像。在Kali桌面或文件管理器中找到这个光盘将其中的VMwareTools-*.tar.gz压缩包复制到用户目录下如/home/kali/。 打开终端执行以下命令cd ~ tar -xzvf VMwareTools-*.tar.gz # 解压注意替换*为实际版本号 cd vmware-tools-distrib/ sudo ./vmware-install.pl安装过程中对所有提示都按回车选择默认选项即可。安装完成后重启虚拟机生效。2.2 DC-1靶机下载与网络配置DC-1靶机可以从Vulnhub官网免费下载它是一个预配置好的虚拟机镜像OVA格式。2.2.1 导入与网络设置下载完成后在VMware中点击“文件”-“打开”选择下载的DC-1的OVA文件导入。导入时虚拟机名称可以改为“DC-1-Target”。导入成功后不要立即启动DC-1先进行关键的网络设置。选中DC-1虚拟机点击“编辑虚拟机设置”-“网络适配器”。将其网络连接模式也设置为“NAT模式”。这一步至关重要它确保Kali和DC-1处于同一个虚拟NAT网络下能够互相通信同时又与你的物理主机网络隔离。2.2.2 启动与初始发现现在先启动Kali Linux再启动DC-1靶机。DC-1启动后会显示一个登录界面但我们不知道密码这很正常我们的任务就是通过渗透找到它。此时我们需要知道DC-1在虚拟网络中的IP地址。在Kali终端中使用netdiscover或nmap进行同网段扫描sudo netdiscover -r 192.168.xxx.0/24这里的192.168.xxx是你的VMware NAT网络的网段。更简单的方法是先查看Kali自己的IPip addr show假设Kali的IP是192.168.88.128那么网段就是192.168.88.0/24。使用nmap进行快速存活主机扫描sudo nmap -sn 192.168.88.0/24扫描结果中除了你的Kali主机另一个活跃的IP很可能就是DC-1靶机。记下这个IP地址例如192.168.88.129我们所有的攻击都将指向它。3. 渗透实战步步为营的攻防推演环境就绪目标IP明确真正的渗透之旅开始。我们将遵循标准的渗透测试流程信息收集 - 漏洞扫描与利用 - 权限提升 - 信息获取Flag。请记住思路远比工具命令重要。3.1 第一阶段信息收集 - 知己知彼信息收集是渗透的“眼睛”目标是尽可能多地了解目标系统。3.1.1 端口与服务探测使用Nmap进行全面的端口扫描识别开放的服务及其版本。sudo nmap -sV -sC -O -p- 192.168.88.129-sV: 探测服务版本。-sC: 使用默认脚本进行扫描能发现一些常见漏洞提示。-O: 尝试识别操作系统。-p-: 扫描所有65535个端口。扫描结果可能会显示如下关键信息端口 22/tcp: OpenSSH SSH服务可能是一个入口点。端口 80/tcp: Apache httpd Web服务这是我们的主攻方向。可能还有端口111rpcbind等。3.1.2 Web应用初步侦察在浏览器中访问http://192.168.88.129。打开后一个Drupal网站的页面赫然在目。Drupal是一个著名的开源CMS历史上存在过许多严重漏洞。页面底部通常会有Drupal的版本号信息比如“Drupal 7.x”。记下这个版本号。使用whatweb或nikto工具可以获取更详细的Web应用信息whatweb http://192.168.88.129 nikto -h http://192.168.88.129nikto可能会提示一些常见的目录或潜在风险文件如robots.txt。3.1.3 目录与敏感文件枚举使用dirb或gobuster进行目录爆破寻找隐藏的管理后台、配置文件或备份文件。dirb http://192.168.88.129 /usr/share/wordlists/dirb/common.txt或者使用更快的gobustergobuster dir -u http://192.168.88.129 -w /usr/share/wordlists/dirb/common.txt这个步骤可能会发现诸如/admin、/user、/CHANGELOG.txt等路径。/CHANGELOG.txt对于确认Drupal精确版本非常有帮助。实操心得信息收集阶段不要急于求成。把每个工具的输出都仔细看一遍特别是Nmap的脚本扫描结果和Nikto的提示里面常常包含着下一步攻击方向的直接线索。例如Nmap扫描Drupal时可能会提示“Drupal 7.x版本”结合历史漏洞库你的攻击面就清晰了很多。3.2 第二阶段漏洞扫描与利用 - 见缝插针确认目标是Drupal 7.x后我们可以利用其已知漏洞。Drupal 7.x有一个著名的远程代码执行漏洞DrupalgeddonCVE-2014-3704 CVE-2018-7600等。我们使用Metasploit框架来自动化利用这个过程。3.2.1 利用Metasploit进行攻击启动Metasploit控制台msfconsole搜索Drupal相关漏洞利用模块search drupal你会看到一系列模块。对于老版本的Drupal 7exploit/unix/webapp/drupal_drupalgeddon2对应CVE-2018-7600通常是有效的选择。使用该模块并设置参数use exploit/unix/webapp/drupal_drupalgeddon2 set RHOSTS 192.168.88.129 set RPORT 80 exploit如果目标存在该漏洞且利用成功Metasploit会返回一个Meterpreter会话。这是一个功能强大的反向Shell意味着我们已经成功在目标Web服务器上执行了代码并获得了初始立足点。3.2.2 手动利用验证备用方案除了Metasploit了解手动利用原理也很有价值。对于CVE-2018-7600可以利用公开的Python脚本如drupa7-CVE-2018-7600.py进行攻击获取一个反向Shell。这要求你在Kali上使用ncNetcat监听一个端口然后在脚本中设置你的Kali IP和监听端口。这种方式能让你更清楚地理解漏洞利用的Payload是如何构造和发送的。注意事项在实际渗透测试中自动化工具和手动利用需要结合。Metasploit快速高效但可能被防御设备检测。手动利用更隐蔽但需要对漏洞有更深理解。在靶场练习时建议两种方式都尝试一遍。3.3 第三阶段权限提升与横向移动 - 登堂入室拿到Meterpreter会话后我们通常只是一个低权限的Web服务用户如www-data。目标是提升到最高权限root并寻找最终的Flag。3.3.1 系统信息枚举首先让我们看看自己在哪系统是什么样。# 在Meterpreter会话中执行 shell # 获取一个系统命令行shell whoami # 查看当前用户通常是www-data pwd # 查看当前目录通常在/var/www下 uname -a # 查看内核版本 cat /etc/passwd # 查看系统用户 cat /etc/issue # 查看系统发行版信息3.3.2 寻找Flag和敏感文件DC-1靶场的标志Flag通常以flag文件的形式分布在系统的不同位置需要逐级提权才能获取。第一个Flag往往就在Web目录下。find / -name *flag* 2/dev/null # 在全盘搜索包含flag关键词的文件 find / -type f -name flag*.txt 2/dev/null # 更精确的搜索你很可能在/var/www目录下找到flag1.txt。查看它cat /var/www/flag1.txtflag1.txt的内容通常会给你一个提示引导你进行下一步比如去查找配置文件或进行提权。3.3.3 利用SUID提权提权的方法很多在Linux中检查具有SUID权限的可执行文件是经典方法。SUID文件在执行时会以文件所有者的身份运行。find / -perm -us -type f 2/dev/null在结果中寻找那些不常见的、属于root且具有SUID权限的程序。一个经典的提权目标是/usr/bin/find。如果它具备SUID权限我们可以利用它来执行任意命令。# 利用find命令提权 touch pentest /usr/bin/find pentest -exec whoami \; /usr/bin/find pentest -exec /bin/bash -p \;如果成功最后一条命令会给你一个root权限的bash shell。输入whoami确认现在你应该是root了。3.3.4 探索与获取最终Flag成为root后你就可以畅游整个系统了。继续寻找其他的flag文件。find / -name flag*.txt 2/dev/null你可能会在/root、/home等目录下找到flag2.txtflag3.txtflag4.txt。每个flag文件都可能包含一个提示或一段名言最终引导你找到最后的final-flag.txt或类似命名的文件。此外检查一下数据库。Drupal的配置文件sites/default/settings.php中通常包含数据库连接密码。cat /var/www/sites/default/settings.php | grep password使用找到的密码可以登录MySQL数据库mysql -u dbuser -p在Drupal的数据库里users表可能存储着管理员的密码哈希。你可以尝试用john或hashcat破解或者直接利用Drupal的特性修改管理员密码从而获得一个Web后台的管理权限这是一种“横向移动”从系统权限又回到了应用权限丰富了攻击路径。4. 核心工具使用详解与避坑指南在整个过程中我们依赖了几款核心工具。理解它们的常见用法和坑点能让你在未来的测试中更加得心应手。4.1 Nmap不只是端口扫描Nmap是信息收集的瑞士军刀但它的功能远不止-sSSYN扫描。服务版本探测 (-sV) 的深度-sV的强度可以调节--version-intensity级别从0到9级别越高探测越详细也越慢。对于初步扫描默认即可。当怀疑服务伪装时可以尝试更高强度。NSE脚本引擎的妙用-sC使用默认脚本但Nmap拥有庞大的脚本库。针对特定服务可以加载专用脚本。例如扫描MySQL时可以使用nmap -p 3306 --script mysql-* 目标IP来检测空密码、版本信息等。防火墙/IDS规避 在可能存在防护的环境可以尝试-f分片、--mtu指定偏移、--scan-delay延迟扫描等选项来降低被发现的概率。常见问题扫描速度太慢-p-扫描全端口确实慢可以先用-p 1-1000或--top-ports 100扫描常见端口。无主机存活 检查虚拟网络配置是否在同一网段、NAT/桥接模式是否正确、目标主机防火墙是否关闭靶场通常关闭。4.2 Metasploit从利用到后渗透Metasploit的强大在于其完整的攻击链支持。模块选择search命令支持模糊查找。例如search drupal 2018能更快定位到目标漏洞模块。查看模块信息用info 模块路径。参数设置show options查看必填和可选参数。除了RHOSTS经常需要设置LHOST监听IP和LPORT监听端口用于反向Shell。Payload选择 不同的场景需要不同的Payload。payload/linux/x86/meterpreter/reverse_tcp是常见的Linux反向Meterpreter。如果网络限制严格可以尝试bind_tcp绑定Shell或reverse_http/https利用HTTP/HTTPS协议隧道。会话管理 获得多个会话后用sessions查看用sessions -i 编号交互。在Meterpreter中background将会话放到后台run post/multi/manage/shell_to_meterpreter可以将一个普通Shell升级为Meterpreter会话。常见问题Exploit失败 首先检查所有参数是否设置正确特别是RHOSTS和RPORT。其次检查目标服务版本是否与漏洞匹配。最后考虑网络连通性防火墙、杀软模拟。Meterpreter会话不稳定 网络波动可能导致会话中断。使用AutoRunScript或exploit -j -z后台作业化可以在会话建立后自动执行迁移进程等稳定化操作。4.3 权限提升技巧汇编Linux提权是一门艺术思路远比单一命令重要。信息收集是前提 提权前务必收集内核版本uname -a、发行版cat /etc/*-release、所有用户cat /etc/passwd、运行进程ps aux、计划任务crontab -lls -la /etc/cron*、具有SUID/SGID的文件之前提到的find命令、可写的敏感文件或目录find / -writable -type d 2/dev/null。内核漏洞提权 根据收集到的内核版本搜索公开的本地提权漏洞如DirtyCow, CVE-2021-4034等。Kali自带linux-exploit-suggester脚本可以自动检测可能适用的内核漏洞。# 在目标机器上下载或上传该脚本并运行 ./linux-exploit-suggester.sh利用环境变量提权 如果发现一个具有SUID权限的程序调用了系统命令如ls、cat但没有使用绝对路径可以通过劫持环境变量PATH来提权。利用配置错误 检查/etc/sudoers文件看当前用户是否可以用sudo以root身份运行某些特定命令而无需密码NOPASSWD。例如如果允许sudo vi那么可以在vi中执行:!bash来获得root shell。数据库提权 如果以root身份运行MySQL等服务并且能登录有时可以通过写入特定文件如/var/www/html/shell.php或调用系统命令的函数如sys_exec来提权。避坑指南在真实环境或某些加固的靶场中常见的SUID程序如find、vim、nmap可能被移除SUID位。此时需要更耐心地进行信息收集关注计划任务、系统服务、可写的脚本文件等。另外任何提权操作都可能触发系统审计或告警在获得shell后优先考虑建立持久化后门再进行大动作的枚举和提权尝试。5. 问题排查与实战心得记录即使按照教程步骤你也可能会遇到各种问题。这里记录一些典型问题的排查思路和我个人的实战心得。问题1Nmap扫描不到DC-1靶机的IP。排查思路确认网络模式 确保Kali和DC-1的虚拟机网络适配器都设置为“NAT模式”或同属一个“仅主机模式”网络。这是最常见的原因。检查防火墙 确保Kali的防火墙没有阻止扫描sudo ufw status如果是inactive则没问题。DC-1靶机通常关闭防火墙。确认网段 用ip addr在Kali上查看自己的IP确保扫描的网段正确。VMware NAT模式的网段通常是192.168.xxx.0/24。重启网络 在Kali中尝试sudo systemctl restart networking。或者直接重启两台虚拟机。问题2Metasploit的Drupal模块利用失败返回“Exploit aborted due to failure: not-vulnerable”。排查思路确认版本 再次通过Web页面底部、CHANGELOG.txt或whatweb确认Drupal版本。Drupalgeddon2 (CVE-2018-7600) 影响Drupal 6,7,8的特定版本。可能靶场版本不对或已打补丁但DC-1通常保留漏洞。尝试其他模块 用search drupal列出所有模块尝试其他的如exploit/unix/webapp/drupal_drupalgeddon(CVE-2014-3704)。手动验证 使用公开的Python脚本手动尝试利用看是否能收到反向Shell。这能排除Metasploit模块本身配置或兼容性问题。检查Payload 尝试更换Payload类型例如从reverse_tcp换成reverse_http。问题3获得Shell后执行命令没反应或立即断开。排查思路Shell稳定性 使用python或script命令来获取一个更稳定的TTY Shell。python -c import pty; pty.spawn(/bin/bash) # 或者 /usr/bin/script -qc /bin/bash /dev/null后台与会话保持 在Metasploit中使用exploit -j将攻击作为后台作业运行会话会更稳定。在Meterpreter中使用run post/multi/manage/shell_to_meterpreter升级Shell。网络问题 可能是网络不稳定。检查虚拟机资源是否充足内存、CPU或者尝试使用bind shell替代reverse shell。问题4SUID提权方法如find执行失败提示“Permission denied”或没有效果。排查思路确认SUID位 再次用find / -perm -us -type f 2/dev/null确认/usr/bin/find确实有SUID权限-rwsr-xr-x中的s。语法正确性 确保命令语法正确。-exec参数后的命令需要以\;结束。注意空格。# 正确示例 /usr/bin/find /etc/passwd -exec whoami \;目标文件存在 确保-exec前面指定的搜索目标如pentest文件存在于当前目录。尝试其他SUID程序 如果find不行检查列表中的其他程序如vim、nmap旧版本、bash罕见等搜索对应的提权方法。个人实战心得记录与复盘 渗透过程中随时用keepnote、cherrytree或简单的文本文件记录你的IP、命令、输出结果、找到的凭证和下一步思路。这不仅是报告需要更是思路不中断的关键。思维发散 不要被教程局限。DC-1除了Drupalgeddon可能还有其他入口。比如SSH端口22是否可以用收集到的密码尝试爆破robots.txt里有没有泄露敏感路径每一个发现都值得深挖一下。理解原理 每用一个工具都花点时间看看它的帮助文档man、-h。知道Nmap某个参数背后的扫描原理知道Metasploit Payload的编码过程这能让你在工具失效时自己动手解决问题。耐心是美德 渗透测试很少是一帆风顺的。扫描可能无果利用可能失败提权可能受阻。这时需要回到信息收集阶段换个角度看看有没有遗漏的细节。那种经过反复尝试最终突破的感觉才是这个领域最大的乐趣所在。通过这样一套完整的流程下来你搭建的不仅仅是一个靶场环境更是在脑海中构建起一个清晰的渗透测试思维框架。从环境配置、信息收集、漏洞利用到权限提升和问题排查每一个环节的深入理解都能让你在面对更复杂、更真实的环境时多一份从容和自信。