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

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://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

原文:https://mp.weixin.qq.com/s/q2PozEUwfWtywqyyn7i0bw

搭建高效攻防靶场vulfocus与Docker仓库管理实战:从听说到入门系列的更多相关文章

  1. 【Microsoft Azure 的1024种玩法】二.基于Azure云平台的安全攻防靶场系统构建

    简介 本篇文章将基于在Microsoft Azure云平台上使用Pikachu去构建安全攻防靶场,Pikachu使用世界上最好的语言PHP进行开发,数据库使用的是mysql,因此运行Pikachu需要 ...

  2. Docker 仓库管理

    仓库 ( registry ) 是一个用来存放镜像的地方,当我们执行 docker pull centos 去拉取 centos 镜像时,默认是从 Docker Hub 这个公共仓库来拉取的: 对于企 ...

  3. Android群英传神兵利器读书笔记——第一章:程序员小窝——搭建高效的开发环境

    1.1 搭建高效的开发环境之操作系统 1.2 搭建开发环境之高效配置 基本环境配置 基本开发工具 1.3 搭建程序员的博客平台 开发者为什么要写作 写作平台 第三方博客平台 自建博客平台 开发论坛 1 ...

  4. [第十一篇]——Docker 仓库管理之Spring Cloud直播商城 b2b2c电子商务技术总结

    Docker 仓库管理 仓库(Repository)是集中存放镜像的地方.以下介绍一下 Docker Hub.当然不止 docker hub,只是远程的服务商不一样,操作都是一样的. Docker H ...

  5. Docker学习(五)——Docker仓库管理

    Docker仓库管理     仓库(Repository)是集中存放镜像的地方. 1.Docker Hub       目前Docker官方维护了一个公共仓库Docker Hub.大部分需求都可以通过 ...

  6. Docker虚拟化实战学习——基础篇(转)

    Docker虚拟化实战学习——基础篇 2018年05月26日 02:17:24 北纬34度停留 阅读数:773更多 个人分类: Docker   Docker虚拟化实战和企业案例演练 深入剖析虚拟化技 ...

  7. s11 Docker+DevOps实战--过程和工具

    开发人员本地提交代码,本地使用容器模拟生产环境测试,测试通过提交到git master 分支,就会触发pipeline执行集成构建.集成工具: gitlab-vi,travis,或Jenkins.自动 ...

  8. Docker下实战zabbix三部曲之一:极速体验

    对于想学习和实践zabbix的读者来说,在真实环境搭建一套zabbix系统是件费时费力的事情,本文内容就是用docker来缩减搭建时间,目标是让读者们尽快投入zabbix系统的体验和实践: 环境信息 ...

  9. 搭建一个免费的,无限流量的Blog----github Pages和Jekyll入门

    喜欢写Blog的人,会经历三个阶段. 第一阶段,刚接触Blog,觉得很新鲜,试着选择一个免费空间来写. 第二阶段,发现免费空间限制太多,就自己购买域名和空间,搭建独立博客. 第三阶段,觉得独立博客的管 ...

  10. Docker 监控实战

    如今,越来越多的公司开始使用 Docker 了,现在来给大家看几组数据: 2 / 3 的公司在尝试了 Docker 后最终使用了它 也就是说 Docker 的转化率达到了 67%,而转化市场也控制在 ...

随机推荐

  1. OpenFileDialog的使用实例

    'Dim excelFolderPath As String = "" 'Dim openFileDialog1 As New OpenFileDialog() 'openFile ...

  2. oeasy 教您玩转linux 010303文件管理器 nautilus

    我们来回顾一下 上一部分我们都讲了什么? 讲了火狐 火狐的位置 用命令行打开多个网址 火狐的升级 火狐桌面建立快捷方式 我们可以知道桌面快捷方式文件的名称么? 从文件管理器到命令行 按住文件 拖动到t ...

  3. SQL Server 锁(LOCK)大全

    一.锁(LOCK)知识及应用 1.1 锁的基础知识 在任何多用户的数据库中,必须有一套用于数据修改的一致的规则.对于真正的事务处理型数据库,当两个不同的进程试图同时修改同一份数据时,数据库管理系统(D ...

  4. 基础-数组_C语言

    C 语言支持数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合.数组是用来存储一系列数据,但它往往被认为是一系列相同类型的变量. 数组的声明并不是声明一个个单独的变量,比如 runoob0. ...

  5. WordPress基础之基本SEO设置

    基础内容,不会涉及过深,在谷歌SEO教程中会做详细的介绍,我这里只简单讲下. 1. SEO介绍 SEO,又名搜索引擎优化(Search Engine Optimization,缩写为SEO)是透过了解 ...

  6. Python 在PDF中添加、替换、或删除图片

    PDF文件中的图片可以丰富文档内容,提升用户的阅读体验.除了在PDF中添加图片外,有时也需要替换或删除其中的图片,以改进视觉效果或更新信息.本文将提供以下三个示例,介绍如何使用Python 操作PDF ...

  7. 【Uni-App】组件笔记

    官网文档地址: https://uniapp.dcloud.io/component/README 组件是视图层的基本组成单元. 组件是一个单独且可复用的功能模块的封装. 每个组件,包括如下几个部分: ...

  8. 【Node】下载安装(Linux)

    不要使用源码包安装!!!编译时间太长!! 不要使用源码包安装!!!编译时间太长!! 不要使用源码包安装!!!编译时间太长!! 使用Node源码包安装 这里使用的是源码包安装 Node官网地址:也不是官 ...

  9. 【Layui】02 图标 Icon

    官网下载地址: https://www.layui.com/ 学习参考: https://www.bilibili.com/video/BV1ct411n7SN [Layui的文件结构] 我们只需要这 ...

  10. Google的TPU的Pallas扩展无法使用jax的随机数生成

    Google的TPU的Pallas无法使用jax的随机数生成 地址: https://jax.readthedocs.io/en/latest/pallas/tpu.html