docker逃逸
简介
刚好做到红日4里需要进行docker 逃逸,发现不会学习一下
判断是否存在于
检查根目录
检查根目录是否存在
.dockerenv
如果有则说明存在于docker 里面
检查**/proc/1/cgroup**
检查这个文件夹里是否存在与docker 相关的字段
1
cat /proc/1/cgroup
Docker Remote API未授权访问逃逸
简介
在使用
docker swarm
的时候,管理的docker
节点上会开放一个TCP
端口2375
,默认绑定在0.0.0.0
上,造成任何人都可以访问管理端的2375
端口,任何人都可以远程控制管理的docker
环境。
漏洞判断
http://192.168.59.147:2375/version
http://192.168.59.147:2375/info
环境搭建
1 |
|
访问ip:2375/version\
漏洞利用
先查看磁盘分区是什么情况
1 |
|
发现flisk 用不了,就是用的df
发现没有可以利用的磁盘
如果发现可以利用的磁盘的话,可以尝试挂载到其他地方
1 |
|
现在就相当于得到了宿主机的所有文件
可以使用定时任务的方式获取shell
1 |
|
/hacker/etc/crontab 到这个文件夹里面
privileged特权模式启动容器逃逸
如果发现是这种方式,其实是最方便的逃逸的
docker
管理员可通过mount
命令将外部宿主机磁盘设备挂载进容器内部,获取对整个宿主机的文件读写权限,可直接通过chroot
切换根目录、写ssh
公钥和crontab
计划任何等逃逸到宿主机。
漏洞验证
1 |
|
判断是否是特权模式启动,如果是以特权模式启动的话,CapEff
对应的掩码值应该为0000003fffffffff
这个是不存在这个漏洞
漏洞利用
在docker
容器中查看系统磁盘分区情况,在新建一个目录,将宿主机所在磁盘挂载到新建的目录中。
利用方式和前面的是一样的
1 |
|
1 |
|
危险挂载导致Docker逃逸
在启动docker
容器时,将服务器中的根目录或敏感目录挂载到容器中时,可能会造成docker
逃逸。
这个都是受害者的管理者的配置问题
漏洞利用
这个方式,由于受害者已经挂载了,所以就不需要手动挂载了
找对挂载点,然后写定时任务
挂载Docker Socket逃逸
在启动docker
容器时,将宿主机/var/run/docker.sock
文件挂载到docker
容器中,在docker
容器中,也可以操作宿主机的docker
。
Docker
采用C/S
架构,我们平常使用的Docker
命令中,docker
即为client
,Server
端的角色由docker daemon
扮演,二者之间通信方式有以下3种,使用下面命令,就可以操作目标docker
,使用docker
命令,操作docker
:
1 |
|
漏洞验证
如果发现 docker.sock 文件,说明可能存在漏洞
发现没有
如果发现
漏洞利用
在docker
容器中安装docker
。
1 |
|
在容器中操控主机的docker ,在docker
容器中,使用命令查看宿主机拉取的镜像。
1 |
|
在docker
容器中,使用命令再运行一个docker
容器,将宿主机的根目录挂载到ubuntu:16.04
的test
目录中,造成docker
逃逸,在通过写计划任务方式,反弹shell
1 |
|
挂载宿主机procfs逃逸
procfs
中的/proc/sys/kernel/core_pattern
负责配置进程崩溃时内存转储数据的导出方式,如果/proc/sys/kernel/core_pattern
文件中的首个字符是管道符|
,那么该行的剩余内容将被当作用户空间程序或脚本解释并执行。当利用这种方式进行docker
逃逸时,触发条件比较苛刻,需要有进程奔溃才能触发。
漏洞验证
如果找到两个core_pattern
文件,那可能就是挂载了宿主机的procfs
发现存在
漏洞利用
当启动一个容器时,会在/var/lib/docker/overlay2
目录下生成一层容器层,容器层里面包括diff、link、lower、merged、work
目录,而docker
容器的目录保存在merged
目录中,通过命令找到当前容器在宿主机下的绝对路径,workdir
代表的是docker
容器在宿主机中的绝对路径。
1 |
|
发现存在 workdir
安装vim 和gcc
1 |
|
创建一个反弹Shell
的py
脚本。
1 |
|
我们修改/host/proc/sys/kernel/core_pattern
文件以达到修改宿主机/proc/sys/kernel/core_pattern
的目的。
创建一个崩溃的程序
1 |
|
然后运行这个
脏牛漏洞实现Docker逃逸
当宿主机存在Dirty Cow(CVE-2016-5195)
漏洞时,利用该漏洞,可实现Docker
容器逃逸,获得root
权限的shell
。