vulfocus,作为一款前沿的漏洞集成平台,它巧妙地将多种最新的CVE漏洞环境封装于Docker容器之中,便于部署与操作,成为提升安全实战技能的理想靶场。用户既可选择在本地VMware环境中亲手搭建,享受从零到一的实践乐趣,亦可直接接入云端环境,快速启动测试。
谈及同类工具,vulhub同样以其丰富的漏洞环境著称,但侧重点略有不同,它汇聚了更多历史老漏洞,为回顾与学习经典案例提供了宝贵资源。相比之下,vulfocus虽在数量上略显精简,却专注于收录最新威胁,紧贴安全前沿。因此,在追求实战时效性的考量下,选择vulfocus无疑是一个明智之举。
此次尝试部署vulfocus,不仅是对该平台的初次探索,也是个人Docker技能的一次实战复习。在VMware虚拟机的支持下,我将一步步搭建起这个强大的漏洞靶场,期待在实战中深化对Docker技术的理解与应用。
拉取vulfocus镜像
docker pull vulfocus/vulfocus:latest
image-20240704215421795
拉取完成
image-20240704221050504
创建容器
docker create -p 80:80 -v /var/run/docker.sock:/var/run/docker.sock -e VUL_IP=xxx.xxx.xxx.xxx -e EMAIL_HOST="xxx.xxx.xxx" -e EMAIL_HOST_USER="xxx@xxx.com" -e EMAIL_HOST_PASSWORD="xxxxxxxx" vulfocus/vulfocus
-v /var/run/docker.sock:/var/run/docker.sock
为 docker 交互连接。-e DOCKER_URL
为 Docker 连接方式,默认通过unix://var/run/docker.sock
进行连接,也可以通过 tcp://xxx.xxx.xxx.xxx:2375
进行连接(必须开放 2375 端口)。
-v /vulfocus-api/db.sqlite3:db.sqlite3 映射数据库为本地文件。
-e VUL_IP=xxx.xxx.xxx.xxx 为 Docker 服务器 IP ,不能为 127.0.0.1。
-e EMAIL_HOST="xxx.xxx.xxx" 为邮箱SMTP服务器
-e EMAIL_HOST_USER="xxx@xxx.com" 为邮箱账号
-e EMAIL_HOST_PASSWORD="xxxxxxxx 为邮箱密码
默认账户密码为 admin/admin。
网上教程纷繁,往往直接复制步骤,但关键细节不容忽视。在部署vulfocus时,除必设的端口映射(80:80)及VUL_IP外,其余环境变量可按需省略。VUL_IP设定尤为关键,需通过宿主机执行ifconfig查找docker0网桥IP并正确配置。执行命令后,将生成专属容器ID,标志着容器创建成功。,如
image-20240704222606783
docker ps -a # 查看容器进程
docker start 容器id # 启动服务
image-20240704221841141
浏览器访问你自己配置的端口,我的配置是127.0.0.1:9999,输入账号密码,admin/admin
image-20240704222033890
一键同步即可,这里有往年很多已经泄露的漏洞复现题目,拉取镜像之后就可以直接本地访问了,不需要联网也可以进行渗透测试
image-20240704222021416
获取当前所有的镜像
docker image ls
# 或者
docker images
拉取镜像
# 官方镜像
docker image pull 镜像名称
# 简写
docker pull 镜像名称
# 比如
docker pull ubuntu
# 指定版本
docker pull ubuntu:16.04
# 个人镜像
docker pull 仓库名称/镜像名称
#第三方仓库拉取
docker pull 第三方仓库地址/仓库名称/镜像名称
docker pull hub.c.163.com/libray/mysql:latest
(默认仓库名称为library,所有从官方获取镜像相当于·sudo docker image pull library/镜像名称·)
删除镜像
docker image rm 镜像名称或者镜像ID
docker rmi 镜像名称或者镜像ID
image-20240704162210232
可以启动一个系统docker run -i -d -t --name=kali-test kalilinux/kali-rolling
(这里我使用linux的一个发行版kali作为介绍) 或可以简写为docker run -idt --name=kali-test kalilinux/kali-rolling
PS: 如果加载一个我们没有的镜像,docker会自动从官方仓库中进行拉去。
docker run [可选参数] 镜像名 [向启动容器中传入的命令]
image-20240704165205873
或者我们可以启动一个网站docker run -dp 8080:80 --name docker-test docker/getting-started
image-20240704165120843
image-20240704165253130
上面我们成功将镜像变成了容器,但上述命令中我们加入了-d,让容器在后台运行了。下面我们就来讲如何和正在运行的容器进行交互。
# 查看当前所有正在运行的容器
docker ps
# 查看当前所有容器
docker ps -a
# 使用过滤器
docker ps -f name=指定的名字
# 显示两个上次创建的容器
docker ps -n 2
# 显示最新创建的容器(包括所有状态)
docker ps -l
# 仅显示IP
docker ps -q
# 显示容器大小
docker ps -s
image-20240704170025573
启动和关闭容器
# 停止容器
docker container stop 容器名/容器id
# 可简写为
docker stop 容器名/容器id
# 强制关闭容器
docker container kill 容器名称/容器id
#简写
docker kill 容器名称/容器id
# 启动容器
docker container start 容器名称/容器id
#简写
docker start 容器名称/容器id
如果我们成功启动或者关闭一个容器的话,会返回容器名或者容器id
image-20240704170655784
Tips:stop和kill的区别::stop是比较优雅的关掉一个容器,类似我们正常退出一个软件,而kill是当一个进程出现意外无法正常关闭的时候,我们强行进行关闭,有点像我们使用任务管理器进行结束进程操作
# 如果我只需要执行简单的一两条命令可以使用docker exec
# 执行单条命令 (-i: 启动并且保留交互式命令行; -t:作用是分配一个虚拟的终端; docker run )
docker exec -it 容器名或容器id 执行的命令
# 比如
docker exec -it kali-test whoami
# 用这种方法,我们还可以启动命令行,根据Linux的特性,系统程序会在/bin中,linux中常用的Shell有多个,其中大部分用的Linux默认的为bash
# 所以我们启动命令可以自行如下命令(除了/bin/bash外,linux一般还会带/bin/sh、/bin/rbash、/bin/dash等,具体区别可以自行百度)
docker exec -it 容器名或容器id /bin/bash
# 比如
docker exec -it kali-test /bin/bash
# 除了exec外还有attach可以使用,但它有个弊端,多终端启动attach后,都会会同步显示。如果有一个窗口阻塞了,那么其他窗口也无法再进行操作。
docker attach 容器名或容器id
# 比如
docker attach kali-test
image-20240704171757644
image-20240704171916332
image-20240704172315242
image-20240704172329629
删除容器
docker rm 容器名/容器id
# 例如
docker rm hellow-world
如果报错Error response from daemon: You cannot remove a running container 容器ID. Stop the container before attempting removal or force remove则代表这个容器已经启动,需要执行 docker stop 容器id,停止此容器。
容器制作成镜像
# 将容器制作成镜像
docker commit 容器名 镜像名
# 镜像打包备份(打包备份的文件会自动存放在当前命令行的路径下,如果想让保存的文件可以打开,可以加.tar后缀)
docker save -o 保存的文件名 镜像名
# 镜像解压
docker load -i 文件路径/备份文件
我们将打包备份的镜像可以通过网络发送到其他设备上,使用docker镜像解压即可直接使用你的环境
docker commit 容器id 上传的容器名称
本地终端登录hub帐号
docker login
image-20240704203343921
查看自己打包的镜像
docker images
image-20240704203420969
推送到docker hub
image-20240704203458788
推送格式:docker push 注册名称 / 镜像名称 : 标签
docker push xiaoyuss/my-demo:latest
等待上传完成,末尾latest其实就是一个tagname,用于区分不同版本的镜像,重复会有提示,如下图所示:
image-20240704203551110
「注意」: 如果遇到push超时,可重复执行尝试。
验证一下
docker inspect xiaoyuss/my-demo:latest
image-20240704203918618
「docker hub检查是否push成功」
image-20240704203729629
如出现上图,说明push成功了!
使用tag命令对最新镜像打tag
docker tag local-image:tagname new-repo:tagname
docker push new-repo:tagname
举例
docker tag xiaoyus/my-demo 注册账号/镜像名称:newtag
image-20240704204830242
搜索镜像
docker search xiaoyuss/my-demo
拉取镜像
docker pull xiaoyuss/my-demo:latest
image-20240704203958908
启动镜像
docker run -d --name my-demo -p 8006:8006 xiaoyuss/my-demo
docker ps -a #找到刚刚启动的容器id
docker start 84efffc1658e # 启动即可,如果是web应用程序,此时应该就可以直接本地访问刚刚的配置的8006端口了
image-20240704204339550
自学网络安全,互相交流的同时还能交朋友,和博主一起来交流学习吧,简历:https://xiaoyus.cc/index.php/sample-page/
文章参考:https://blog.csdn.net/csd\_ct/article/details/121158165
https://blog.csdn.net/u013302168/article/details/121092209
https://blog.csdn.net/qq\_39611230/article/details/108641842