如果你正在学习网络安全或者从事渗透测试工作,那么Kali Linux和Vulhub这对组合绝对值得你拥有。Kali Linux作为最流行的渗透测试操作系统,预装了数百种安全工具;而Vulhub则是一个基于Docker的漏洞靶场集合,让你可以快速搭建各种漏洞环境进行实战演练。
我第一次接触Vulhub是在一次内部安全培训中,当时我们需要模拟一个真实的Web应用漏洞场景。传统的方式是从零开始搭建环境,不仅耗时耗力,而且很难保证环境的纯净性。Vulhub的出现彻底改变了这种情况——只需要几条简单的Docker命令,一个完整的漏洞环境就能在几分钟内准备就绪。
在开始之前,确保你的Kali Linux系统是最新的。打开终端,执行以下命令:
bash复制sudo apt-get update && sudo apt-get upgrade -y
这个命令会更新软件包列表并升级所有已安装的软件包。我建议在安装任何新软件前都先执行这个操作,可以避免很多潜在的依赖问题。
接下来安装Docker运行所需的依赖:
bash复制sudo apt-get install -y apt-transport-https ca-certificates curl gnupg lsb-release
这些组件包括HTTPS传输支持、CA证书等基础依赖。我曾经遇到过因为缺少这些基础组件导致Docker安装失败的情况,所以这一步千万别跳过。
现在可以正式安装Docker了。Kali Linux的官方仓库中已经包含了Docker,所以安装非常简单:
bash复制sudo apt-get install -y docker.io
安装完成后,验证Docker是否安装成功:
bash复制docker --version
如果看到类似"Docker version 20.10.5, build 55c4c88"的输出,说明安装成功。为了确保Docker服务正常运行,执行:
bash复制sudo systemctl enable --now docker
这个命令会启动Docker服务并设置为开机自启。我习惯在安装后立即检查服务状态:
bash复制sudo systemctl status docker
如果看到"active (running)"的状态,说明一切正常。
Vulhub使用Docker-compose来管理多个容器的编排,所以我们也需要安装它:
bash复制sudo apt-get install -y docker-compose
验证安装:
bash复制docker-compose --version
正常情况下会显示类似"docker-compose version 1.25.0"的版本信息。
Vulhub的官方仓库托管在GitHub上,我们可以直接克隆到本地:
bash复制git clone https://github.com/vulhub/vulhub.git
这个命令会将整个Vulhub项目下载到当前目录下的vulhub文件夹中。根据你的网络状况,这个过程可能需要几分钟时间。
我曾经遇到过克隆速度极慢的问题,后来发现可以通过修改Git的配置来使用更快的镜像源:
bash复制git config --global url."https://hub.fastgit.org".insteadOf https://github.com
这个技巧可以将GitHub的请求重定向到国内的镜像站点,显著提升下载速度。
下载完成后,建议检查一下项目结构:
bash复制cd vulhub && ls -l
你应该能看到多个以漏洞名称命名的文件夹,每个文件夹对应一个特定的漏洞环境。常见的如struts2、thinkphp、flask等框架的漏洞环境都在其中。
让我们以Flask SSTI(服务器端模板注入)漏洞为例。首先进入对应的目录:
bash复制cd flask/ssti
每个Vulhub环境目录下都有一个README.md文件,详细说明了该漏洞的背景信息和利用方法。我强烈建议在启动环境前先阅读这个文件:
bash复制cat README.md
现在可以启动环境了:
bash复制docker-compose up -d
这个命令会执行以下操作:
第一次运行时会下载基础镜像,可能需要一些时间。完成后,你可以检查容器状态:
bash复制docker-compose ps
如果看到状态为"Up",说明环境已经成功启动。
根据README的说明,这个Flask SSTI环境通常运行在8000端口。打开浏览器访问:
code复制http://localhost:8000
你应该能看到一个简单的Web界面,这就是我们要测试的漏洞环境了。
有时候执行docker-compose up会报错,最常见的原因是端口冲突。比如:
code复制ERROR: for ssti Cannot start service web: driver failed programming external connectivity on endpoint... Bind for 0.0.0.0:8000 failed: port is already allocated
这表示8000端口已经被其他程序占用。解决方法有两种:
由于网络原因,拉取Docker镜像可能会非常缓慢。可以通过配置国内镜像源来加速:
bash复制sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
这个配置使用了中国科学技术大学的镜像源,可以显著提升下载速度。
如果你在执行docker命令时遇到权限错误:
code复制Got permission denied while trying to connect to the Docker daemon socket...
这是因为当前用户不在docker组中。解决方法:
bash复制sudo usermod -aG docker $USER
newgrp docker
然后重新登录即可。
测试完成后,记得停止并清理环境。首先确保你在正确的目录下(即包含docker-compose.yml的目录),然后执行:
bash复制docker-compose down
这个命令会停止并移除所有相关的容器、网络等资源。
长期使用后,Docker可能会占用大量磁盘空间。可以定期清理无用的镜像和容器:
bash复制docker system prune -a
这个命令会删除所有停止的容器、未被任何容器使用的网络、悬空的镜像和构建缓存。执行前请确保没有重要的容器在运行。
如果你同时测试多个Vulhub环境,可以使用以下命令查看所有运行中的容器:
bash复制docker ps
要停止所有容器:
bash复制docker stop $(docker ps -q)
删除所有容器:
bash复制docker rm $(docker ps -aq)
这些命令在需要快速清理环境时非常有用。
有时候你可能需要修改默认的漏洞环境配置。比如想改变服务端口、调整漏洞难度等。Vulhub的每个环境目录下都有docker-compose.yml文件,你可以根据需要修改这个文件。
以Flask SSTI为例,如果你想修改Web服务的端口,可以编辑docker-compose.yml:
yaml复制version: '2'
services:
web:
image: vulhub/flask:1.0
ports:
- "8080:8000" # 将左边的8000改为你想要的端口
修改后需要重建容器:
bash复制docker-compose up -d --build
当漏洞利用不成功时,可能需要进入容器内部进行调试:
bash复制docker-compose exec web /bin/bash
这个命令会进入web服务的容器内部,你可以查看日志、检查配置文件等。
如果你在测试过程中做了重要修改,可以提交为新的镜像:
bash复制docker commit <容器ID> my-custom-image
这样下次可以直接从你的自定义镜像启动,保留所有修改。
虽然Vulhub是用于学习和测试的靶场环境,但仍需注意以下安全事项:
我曾在一次内部测试中忘记关闭一个Struts2漏洞环境,结果被扫描器发现并利用。虽然是有惊无险,但这个教训让我养成了测试后立即清理环境的习惯。