文章目录
云服务器与Docker
云服务器
云服务器介绍
一台通过公网访问的虚拟服务器,可以是Windows、Linux系统。
在云计算还没进行普及的时候,个人或企业站点往往都是托管在IDC机房内,每一台物理服务器都需要一台机柜,每次购买物理服务器或者对服务器进行升级,我们的运维人员都需要跑老远去机房,然后在机房进行操作的,比如升级内存,添加新设备等操作。
Docker
Docker简介
-
Docker是什么
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows 机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。
-
Docker组成部分
Docker Client客户端
Docker Daemon守护进程
Docker Image镜像
Docker Container 容器
Docker环境安装
-
安装Docker
-
安装必要的一些系统工具
sudo apt update sudo apt -y install apt-transport-https ca-certificates curl software-properties-common
-
添加 Docker PGP key
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/docker-ce-archive-keyring.gpg
-
写入软件源信息
printf '%s\n' "deb https://download.docker.com/linux/debian bullseye stable" | sudo tee /etc/apt/sources.list.d/docker-ce.list
-
更新APT
sudo apt update
-
卸载旧版本Docker
sudo apt remove docker docker-engine docker.io
-
安装 Docker
apt install docker-ce docker-ce-cli containerd.io
-
查看 Docker 状态
systemctl status docker
-
启动 Docker
systemctl start docker
-
开机自动启动
systemctl enable docker
-
-
安装 docker-compose
curl -L https://get.daocloud.io/docker/compose/releases/download/v2.1.0/docker- compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose
Docker基础操作
Docker镜像操作
-
列出镜像
docker image ls -a docker images REPOSITORY:镜像所在的仓库名称 TAG:镜像标签 IMAGEID:镜像ID CREATED:镜像的创建日期(不是获取该镜像的日期) SIZE:镜像大小
-
拉取镜像
docker image pull library/hello-world docker image pull:抓取 image 文件的命令 library/hello-world:image 文件在仓库里面的位置 library:是 image 文件所在的组 hello-world:是 image 文件的名字
-
删除镜像
docker image rm 镜像名或镜像id docker rmi 镜像名或镜像id 如: docker image rm hello-world docker rmi feb5d9fea6a5
Docker容器操作
-
创建容器
docker run [option] 镜像名 [向启动容器中传入的命令]
常用可选参数说明:
-i 表示以“交互模式”运行容器 -t 表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即 分配一个伪终端。 --name 为创建的容器命名 -v 表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录,即 宿主机目录:容器中目录),可 以使 用多个-v 做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后 共享到容器上。 -d 在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不 会自动登录容器,如果只 加-i -t 两个参数,创建后就会自动进去容器)。 -p 表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p 做多个端口映射 -e 为容器设置环境变量 --network=host 表示将主机的网络环境映射到容器中,容器的网络与主机相同
-
交互式容器
创建一个交互式容器,并命名为mycentos docker run -it --name=mycentos centos /bin/bash 在容器中可以随意执行linux命令,就是一个ubuntu的环境,当执行exit命令退出时,该容器也随之停止。
-
守护式容器
创建一个守护式容器,并命名为mycentos2 docker run -dit --name=mycentos2 centos 如果对于一个需要长期运行的容器来说,我们可以创建一个守护式容器。在容器内部exit退出时,容器也不会停止。
-
进入运行容器
docker exec -it 容器名或容器id 进入后执行的第一个命令 例如: docker exec -it mycentos2 /bin/bash
-
查看容器
列出本机正在运行的容器 docker container ls 列出本机所有容器,包括已经终止运行的 docker container ls --all
-
停止与启动容器
停止一个已经在运行的容器 docker container stop 容器名或容器id docker stop 容器名或容器id 启动一个已经停止的容器 docker container start 容器名或容器id docker start 容器名或容器id kill掉一个已经在运行的容器 docker container kill 容器名或容器id docker kill 容器名或容器id
-
删除容器
docker container rm 容器名或容器id docker rm 容器名或容器id
容器保存为镜像
# docker commit 容器名 镜像名
docker commit mycentos3 mycentos3
镜像备份与迁移
可以通过save命令将镜像打包成文件,拷贝给别人使用
# docker save -o 保存的文件名 镜像名
docker save -o ./mycentos3.tar mycentos3
对方在拿到镜像文件后,可以通过load方法,将镜像加载到本地
docker load -i ./centos.tar
Docker搭建漏洞靶场
Docker网络代理设置
在执行docker pull
时,是由守护进程dockerd
来执行。因此,代理需要配在dockerd
的环境中。而这个环境,则是受systemd
所管控,因此实际是systemd
的配置。
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo touch /etc/systemd/system/docker.service.d/proxy.conf
在proxy.conf
文件中,添加以下内容:
[Service]
Environment="HTTP_PROXY=http://proxy.example.com:8080/"
Environment="HTTPS_PROXY=http://proxy.example.com:8080/"
Environment="NO_PROXY=localhost,127.0.0.1,.example.com"
其中,proxy.example.com:8080
要换成可用的免密代理.
proxy.example.com
更改为自己的代理地址,`8080``更改为自己的代理端口。
vulhub
https://github.com/vulhub/vulhub
https://hub.docker.com/u/vulhub
-
通过浏览器访问
https://github.com/vulhub/vulhub
下载到本地。可以选择在kali终端复制如下命令,克隆项目到本地:
git clone https://github.com/vulhub/vulhub.git
也可以选择点击
Download ZIP
下载压缩包,然后拖到kali中,并通过unzip解压:unzip vulhub-master.zip
-
进入目录选定自己需要使用到的靶场,使用命令拉取镜像并开启容器。
cd vulhub-master cd thinkphp/5.0.23-rce docker-compose up -d
vulnapp
https://github.com/Medicean/VulApps
https://hub.docker.com/r/medicean/vulapps
-
打开浏览器访问
https://github.com/Medicean/VulApps
-
查看漏洞所对应的目录下的
README.md
文件 -
按照文档给的环境启动命令依次复制粘贴到服务器上执行即可
# 以启动thinkphp漏洞环境为例 docker pull medicean/vulapps:t_thinkphp_2 docker run -d -p 80:80 medicean/vulapps:t_thinkphp_2 # -p 80:80 前面的 80 代表物理机的端口,可随意指定;后面的 80 为docker容器中的web服务端口,默认端口80。
vulfocus
# Vulfocus 官网
https://github.com/fofapro/vulfocus
# 在线 Vulfocus
https://vulfocus.cn/
# Vulfocus 镜像仓库
https://hub.docker.com/u/vulfocus
-
通过
docker
拉取镜像vulfocus/vulfocus
docker pull vulfocus/vulfocus:latest
-
开启靶场
docker create -p 88:80 -v /var/run/docker.sock:/var/run/docker.sock -eVUL_IP=xx.xx.xx.xx vulfocus/vulfocus 这里的88端口代表物理机的端口,80端口代表docker的端口。 IP为docker的服务器IP,不能是127.0.0.1
-
上述步骤只是添加了docker容器,并未进行启动,需要通过命令启动
docker container start 容器ID
-
此时靶场已经开启,打开浏览器访问服务器ip加88端口即可打开
http://192.168.81.57:88 默认账号密码为 admin admin
-
添加漏洞,注意搭建好后是没有漏洞的,需要自行添加,存在三种方式
第一种:镜像管理->添加->点击镜像会弹出漏洞编号和名字,选择好后进行提交即可自动进行下载。 第二种:选择本地导入,打开会自动读取服务器上存在的docker镜像,进行导入即可。