docker逃逸
docker逃逸
宸极实验室—『杂项』Docker 逃逸方法汇总 - 知乎 (zhihu.com)
什么是docker逃逸:
攻防中,拿到webshell
后,发现自己是在docker
容器中,拿到的并不是宿主机的权限,那我们就需要进一步渗透,就必须逃逸到宿主机中,拿到宿主机的权限。
docker逃逸流程:
目前的 Docker 逃逸的原因可以划分为三种:
由内核漏洞引起:
Dirty COW(CVE-2016-5195)
在容器中利用VDSO内存空间中的“clock_gettime() ”函数可对脏牛漏洞发起攻击,令系统崩溃并获得root权限的shell,且浏览容器之外主机上的文件。docker和宿主机共享内核
软件设计引起:
CVE-2019-5736、CVE-2019-14271
Docker、containerd或者其他基于runc的容器在运行时存在安全漏洞,攻击者可以通过特定的容器镜像或者exec操作获取到宿主机runc执行时的文件句柄并修改掉runc的二进制文件,从而获取到宿主机的root执行权限。
由配置不当引起:
开启privileged(特权模式)+宿主机目录挂载(文件挂载)、功能(capabilities)机制、sock通信方式
使用特权模式启动容器,可以获取大量设备文件访问权限。因为当管理员执行docker run —privileged时,Docker容器将被允许访问主机上的所有设备。docker
管理员可通过mount
命令将外部宿主机磁盘设备挂载进容器内部,获取对整个宿主机的文件读写权限,可直接通过chroot
切换根目录、写ssh
公钥和crontab
计划任何等逃逸到宿主机。
docker逃逸环境判断:
判断docker方法:
- 1、使用下面命令,查看是否存在 dockerrnv 文件 ls -alh /.dockerenv
- 2、查看系统进程的cgroup信息 cat /proc/1/cgroup
docker特权模式逃逸流程:
漏洞验证:
判断是否是特权模式启动,如果是以特权模式启动的话,CapEff
对应的掩码值应该为0000003fffffffff
。
1 | cat /proc/self/status |grep Cap |
漏洞利用:
红日四靶场—docker特权模式逃逸:
crontab
计划任务逃逸:
在docker
容器中查看系统磁盘分区情况,在新建一个目录,将宿主机所在磁盘挂载到新建的目录中。
1 | fdisk -l |
首先在kali
中使用nc
监听,进入到hacker
目录,通过touch
创建一个sh
文件,
再将bash
反弹命令写入到创建的sh
文件里面,在编写计划任务到/hacker/etc/crontab
文件中。
1 | touch /hacker/hacker.sh |
返回到kali
中进行查看,已成功接收到shell
写入ssh公钥进行逃逸: