有一种比较特殊的场景,当宿主机的 /var/run/docker.sock 被挂载到容器内时,容器可以通过 docker.sock 在宿主机里创建并配置任意容器。可以理解为创建任意权限的进程:
![](https://i-blog.csdnimg.cn/blog_migrate/2b222394e22b5b91c4cc191af6700a7b.png)
这种情况被称为 docker in docker 。常见于需要对当前节点进行容器管理的编排容器内。
如果你想直接尝试这种逃逸所带来的魅力,可以去试试Google自带地容器逃逸场景。你只需要科学上网再加上Google账号就可以直接使用里面的环境和代码。地址:
https://ssh.cloud.google.com/cloudshell/editor?cloudshell_git_repo=https://github.com/neargle/cloud_native_security_test_case.git
![](https://i-blog.csdnimg.cn/blog_migrate/6ec438012426239ef55ab221cb8283b8.jpeg)
然后运行:
bash try_google_cloud/host_root.sh
![](https://i-blog.csdnimg.cn/blog_migrate/9914a7c66e0a95c0f70aa1aaec7e87f6.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/8f8684726570a48895a624d3b3a77d8b.jpeg)
当然,大多数容器内一般并不支持你去安装和运行docker client,一般获取到的镜像都是受限或是不完整的。即使使用安装包也是比较困难的。这里就可以去尝试用Go编写的的程序,进行交叉编译后不需要依赖环境,可以直接运行。