长亭百川云 - 文章详情

搭建高效攻防靶场vulfocus与Docker仓库管理实战:从听说到入门

小羽网安

62

2024-07-04

vulfocus 简介

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基本操作

基础操作

获取当前所有的镜像

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

http://localhost:8080/

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

相关推荐
关注或联系我们
添加百川云公众号,移动管理云安全产品
咨询热线:
4000-327-707
百川公众号
百川公众号
百川云客服
百川云客服

Copyright ©2024 北京长亭科技有限公司
icon
京ICP备 2024055124号-2