Docker 卸载/安装
我的操作系统:ubuntu22.04
卸载
linux常规卸载命令
#方式一
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done
#方式二
sudo apt-get purge -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras
#清理残留配置文件
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
sudo rm /etc/apt/sources.list.d/docker.list
sudo rm /etc/apt/keyrings/docker.asc
其它情况:
使用相关命令(如find、whereis、which等命令)判断老版本的docker是通过什么方式安装的
很重要,因为不同的安装方式,卸载方式不同,要不然你是卸载不掉的!
我这里使用which命令发现之前是用snap安装的,所以卸载时得用 snap remove 命令,再使用rm命令清除残留数据
安装
注意几个问题:
1、网络问题,网络不通可以换不同的安装方法;
2、某些命令(docker search)网络不通,不代表docker其它命令也没法使用
3、务必配置国内源加速,记得重启docker服务
安装方式
根据自身需要选择合适的安装方式:
1、使用包管理工具,如apt、snap等,直接安装(推荐初学者使用)
2、参考各大文档:
(1)官方文档 Ubuntu | Docker Docs
(2)各大云厂商文档,如阿里云安装Docker并使用镜像仓库ACR_云服务器 ECS(ECS)-阿里云帮助中心
(3)安全项目文档,如vulhub靶场Vulhub - Docker-Compose file for vulnerability environment
(4)teamssix云知识库Docker 使用笔记 | T Wiki
我这里根据teamssix云知识库文档里的方式安装,就一条命令
curl -fsSL https://get.docker.com/ | sh
此方式需注意网络问题!还是建议初学者使用 apt install docker.io,省很多麻烦,或者根据阿里云的官方文档安装,安全从业者没必要在安装卸载、网络连接这种问题上浪费时间,没必要一棵树上吊死!
安装后验证
docker -v #查看版本
docker run hello-world #验证docker是否正常工作,如果该命令无法启动,就需要配置国内源,docker默认使用的是官方源
使用vim /etc/docker/daemon.json创建daemon.json配置文件,内容如下
{
"registry-mirrors": ["https://alzgoonw.mirror.aliyuncs.com"]
}
然后systemctl restart docker重启docker即可
安装docker-compose
也可以使用pip安装,本文是按T Wiki云知识库文档里的方式安装
sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version
Docker 初体验
在我个人的使用体验中,Docker 无疑为开发和测试带来了极大的便利。它的操作简便,几乎可以一步到位,整个过程非常顺畅,带来了极大的工作效率提升。
打开镜像库官网https://hub.docker.com/,搜索我们想要的镜像
这里以pikachu靶场镜像举例
docker pull
docker pull <镜像名> #拉取我们需要的镜像
docker images
使用docker images命令查看刚才拉取的镜像
docker run
要启动一个Docker容器,需要使用docker run
命令。下面是启动一个容器的基本语法:
docker run [选项] <镜像名> [命令]
其中,选项可以是以下几种:
-d
:后台运行容器;-p
:指定容器端口与主机端口的映射;-v
:指定容器与主机的文件或目录映射(挂载);--name
:为容器指定一个名称;--restart
:指定容器的重启策略。
镜像名是要启动的容器的镜像名称,可以是Docker Hub上的官方镜像,也可以是自己构建的镜像。命令是在容器启动后要执行的命令,可以是容器内的命令或脚本。
示例:
基于pikachu镜像,启动一个容器
docker run -d -p 8888:80 area39/pikachu
访问该容器搭建的pikachu
docker ps
查看启动中的容器
docker exec
docker exec -it <容器ID或容器名称> /bin/bash #进入容器
docker kill
docker kill <容器ID或容器名称> #强行停止容器,适用于紧急情况,如容器无响应或卡死、消耗太多资源
docker stop
docker stop <容器ID或容器名称> #停止容器,此种方式平常使用较多,该方式允许进程进行清理操作,例如关闭文件、释放资源等,较为优雅
docker start
docker start <容器ID或容器名称> #启动已停止的容器
docker commit
docker commit <容器ID或容器名称> <新镜像名称> #将停止的容器保存为新镜像
docker rm
docker rm <容器ID或容器名称> #删除容器
docker rmi
docker rmi <镜像名> #删除镜像
Docker 搭建测试环境
1、PHP漏洞环境
启动刚才拉取的pikachu靶场
通过RCE漏洞写入一句话木马
进入容器,验证,成功写入
使用哥斯拉连接,命令执行ls -al,发现存在.dockerenv文件,目标为docker容器!
拿到的容器权限为网站权限,非root权限
2、JAVA漏洞环境
WebLogic 服务器
在官方镜像hub上找一个weblogic的漏洞环境,这里以CVE-2020-2883举例
拉取镜像,以端口映射方式启动容器
访问
使用漏洞利用工具测试
命令执行ls -al,发现存在.dockerenv文件,目标为docker容器!
拿到的容器权限为oracle,非root权限
Shiro 框架
拉取和启动不再赘述,拿到的容器权限为root(uid=0 gid=0 gourps=0)
因此,不同的漏洞环境拿到的权限可能不同,当我们在做容器逃逸时需要注意自己拿到的权限,因为有的逃逸手段是建立在高权限之上的,低权限不适用,需要先做提权。
至此,Dcoker安全分析测试环境搭建完毕。以上所搭建的测试环境是为下一篇容器逃逸测试做准备的,下一篇详细探讨Docker容器逃逸的方法。