0x00 docker简介
docker是一个开源的应用容器引擎,开发者可以打包自己的应用到容器里面,然后迁移到其他机器的docker应用中,可以实现快速部署。如果出现的故障,可以通过镜像,快速恢复服务。dockerde 原理是利用Linux内核虚拟机化技术(LXC),提供轻量级的虚拟化,以便隔离进程和资源。LXC不是硬件的虚拟化,而是Linux内核的级别的虚拟机化,相对于传统的虚拟机,节省了很多硬件资源。
0x01 docker的安装
安装的相关的文档可以在https://docs.docker.com/进行查找里面有各种系统版本的安装方法,这里以debian为例,其他的类似。
- 更新apt索引
apt-get update

2.更新所需组件
apt-get install
apt-transport-https
ca-certificates
curl
gnupg2
software-properties-common

3.增加官方 GPG key:
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -

4.增加官方稳定源
add-apt-repository
"deb [arch=amd64] https://download.docker.com/linux/debian
$(lsb_release -cs) stable"

5.再次更新一下apt索引,因为你刚才加入了新的源,需要更新后才能生效。
apt-get update

6.安装docker
apt-get install docker-ce docker-ce-cli containerd.io

7.测试安装是否成功
docker run hello-world

0x02 docker的基本操作命令
docker的相关的命令一般会在命令的开始加上docker这个词。
1.docker search 镜像名
可以以关键字的方式在docker hub上进行检索


2.docker pull 获取相关的镜像

3.docker images查看相关的镜像
其中TAG是容器的标签,用来区分不同的容器,如果不填写的话默认是latest,如果本地不存在latest版本则会自行下载。
IMAGE ID是镜像的16位短ID

4.容器启动 docker run
docker run -itd –-name 容器名称 -p 主机端口:容器端口 镜像名称:标签 /bin/bash,下面这一长串是容器的完整ID。

5.查看进程 docker ps 列出当前正在运行的容器。

6.容器的启停
docker stop/start 容器名/ID
停止或启动容器,若是填写容器名则要全写上去,如果用的是ID,这里的ID并不需要写完整的ID或者16位短ID,只需要能与其他容器区分开即可,就算你只写第一个字符都是可以的,只要能区分开。



7.进入容器
docker attach 容器名/ID


8.文件拷贝
docker cp 主机中的文件目录 容器名:容器中的目录。将文件从主机拷贝到容器中


这些docker的基本命令足够可以进行漏洞环境的搭建了。
0x03 漏洞复现环境搭建
建立一个漏洞复现的环境,其实和建立一个应用的步骤是类似的。只是漏洞复现环境是存在漏洞的应用而已。
对环境的搭建比较方便的方式是通过dockerfile结合docker-compose
Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于拉取的基础镜像并最终创建一个新的镜像,通过Dockerfile我们可以创建一个你需要的镜像,里面是包含了你要安装的软件,相当于是提前定制好要安装的拓展,执行的命令等,然后一键执行,极大地简化操作流程。Dockerfile由4部分组成:基础镜像信息、维护者信息、镜像操作指令和容器启动指令。
Compose是用来定义和运行一个或多个容器应用的工具。Compose是使用YML文件来定义多容器应用的,它还会用docker-compose up命令把完整的应用运行起来。
这里以前几天刚刚公布的CVE-2020-1938为例,简单编写,dockerfile如下:
FROM vulhub/tomcat:8.5.19
MAINTAINER test
RUN chmod a+x /usr/local/tomcat/bin/*.sh
COPY info.war /usr/local/tomcat/webapps/info.war
EXPOSE 8080
EXPOSE 8009
FROM vulhub/tomcat:8.5.19
MAINTAINER test
RUN chmod a+x /usr/local/tomcat/bin/*.sh
COPY info.war /usr/local/tomcat/webapps/info.war
EXPOSE 8080
EXPOSE 8009
docker-comfile.yml
webapp:
build: .
ports:
- "80:8080"
-"8009:8009"
webapp:
build: .
ports:
- "80:8080"
-"8009:8009"
执行docker-compose up -d

通过映射的80,可以直接访问搭建的docker应用

利用相关的poc进行漏洞验证

docker在漏洞复现的环境搭建上,真的是特别方便。更多的命令细节,可以使用help及官方文档:
https://docs.docker.com/
欢迎关注我的公众号,等你
