Translated ['.github/pull_request_template.md', 'src/README.md', 'src/pe

This commit is contained in:
Translator
2025-01-02 00:00:35 +00:00
parent 6f74ac1a76
commit 5a62f6b0a3
229 changed files with 2195 additions and 2217 deletions

View File

@@ -8,18 +8,18 @@ Ikiwa umepata ufikiaji wa mashine, mtumiaji anaweza kuwa na ufikiaji wa jukwaa l
Katika folda hii unaweza kupata faili za usanidi zenye **tokens na usanidi wa kuungana na API server**. Katika folda hii pia unaweza kupata folda ya cache yenye taarifa zilizopatikana awali.
Ikiwa umepata ufikiaji wa pod ndani ya mazingira ya kubernetes, kuna maeneo mengine ambapo unaweza kupata tokens na taarifa kuhusu mazingira ya K8 ya sasa:
Ikiwa umepata pod ndani ya mazingira ya kubernetes, kuna maeneo mengine ambapo unaweza kupata tokens na taarifa kuhusu mazingira ya K8 ya sasa:
### Service Account Tokens
Kabla ya kuendelea, ikiwa hujui ni nini huduma katika Kubernetes ningependekeza **ufuate kiungo hiki na usome angalau taarifa kuhusu usanifu wa Kubernetes.**
Imechukuliwa kutoka kwa [nyaraka](https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/#use-the-default-service-account-to-access-the-api-server) za Kubernetes:
Imechukuliwa kutoka kwa [nyaraka za Kubernetes](https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/#use-the-default-service-account-to-access-the-api-server):
_“Unapounda pod, ikiwa hujaeleza akaunti ya huduma, inatolewa kiotomatiki akaunti ya huduma_ default _katika namespace hiyo hiyo.”_
**ServiceAccount** ni kitu kinachosimamiwa na Kubernetes na kinatumika kutoa kitambulisho kwa michakato inayofanyika katika pod.\
Kila akaunti ya huduma ina siri inayohusiana nayo na hii siri ina bearer token. Hii ni JSON Web Token (JWT), njia ya kuwakilisha madai kwa usalama kati ya pande mbili.
Kila akaunti ya huduma ina siri inayohusiana nayo na siri hii ina bearer token. Hii ni JSON Web Token (JWT), njia ya kuwakilisha madai kwa usalama kati ya pande mbili.
Kawaida **moja** ya directories:
@@ -31,17 +31,17 @@ zina faili:
- **ca.crt**: Ni cheti cha ca kuangalia mawasiliano ya kubernetes
- **namespace**: Inaonyesha namespace ya sasa
- **token**: Ina **service token** ya pod ya sasa.
- **token**: Inabeba **service token** ya pod ya sasa.
Sasa kwamba una token, unaweza kupata API server ndani ya variable ya mazingira **`KUBECONFIG`**. Kwa maelezo zaidi endesha `(env | set) | grep -i "kuber|kube`**`"`**
Token ya akaunti ya huduma inasainiwa na funguo iliyoko katika faili **sa.key** na kuthibitishwa na **sa.pub**.
Mahali pa default kwenye **Kubernetes**:
Mahali pa kawaida kwenye **Kubernetes**:
- /etc/kubernetes/pki
Mahali pa default kwenye **Minikube**:
Mahali pa kawaida kwenye **Minikube**:
- /var/lib/localkube/certs
@@ -55,20 +55,20 @@ Ikiwa hujui ni nini **RBAC**, **soma sehemu hii**.
## GUI Applications
- **k9s**: GUI inayoorodhesha klasta ya kubernetes kutoka kwa terminal. Angalia amri katika [https://k9scli.io/topics/commands/](https://k9scli.io/topics/commands/). Andika `:namespace` na uchague yote ili kisha kutafuta rasilimali katika namespaces zote.
- **k9s**: GUI inayoorodhesha klasta ya kubernetes kutoka kwenye terminal. Angalia amri katika [https://k9scli.io/topics/commands/](https://k9scli.io/topics/commands/). Andika `:namespace` na uchague yote ili kisha kutafuta rasilimali katika namespaces zote.
- **k8slens**: Inatoa siku chache za majaribio bure: [https://k8slens.dev/](https://k8slens.dev/)
## Enumeration CheatSheet
Ili kuorodhesha mazingira ya K8s unahitaji kadhaa ya haya:
- **token ya uthibitisho halali**. Katika sehemu iliyopita tuliona wapi pa kutafuta token ya mtumiaji na token ya akaunti ya huduma.
- **anwani (**_**https://host:port**_**) ya Kubernetes API**. Hii inaweza kupatikana kawaida katika variable za mazingira na/au katika faili ya kube config.
- **token halali ya uthibitishaji**. Katika sehemu iliyopita tuliona wapi pa kutafuta token ya mtumiaji na token ya akaunti ya huduma.
- **anwani (**_**https://host:port**_**) ya API ya Kubernetes**. Hii inaweza kupatikana kawaida katika variable za mazingira na/au katika faili ya kube config.
- **Hiari**: **ca.crt ili kuthibitisha API server**. Hii inaweza kupatikana katika maeneo sawa ambapo token inaweza kupatikana. Hii ni muhimu kuthibitisha cheti cha API server, lakini ukitumia `--insecure-skip-tls-verify` na `kubectl` au `-k` na `curl` hutahitaji hii.
Kwa maelezo hayo unaweza **kuorodhesha kubernetes**. Ikiwa **API** kwa sababu fulani inapatikana kupitia **Mtandao**, unaweza tu kupakua taarifa hiyo na kuorodhesha jukwaa kutoka kwa mwenyeji wako.
Hata hivyo, kawaida **API server iko ndani ya mtandao wa ndani**, kwa hivyo utahitaji **kuunda tunnel** kupitia mashine iliyovunjika ili kuweza kufikia kutoka kwa mashine yako, au unaweza **kupakia** [**kubectl**](https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/#install-kubectl-binary-with-curl-on-linux) binary, au tumia **`curl/wget/chochote`** kufanya maombi ya HTTP ya moja kwa moja kwa API server.
Hata hivyo, kawaida **API server iko ndani ya mtandao wa ndani**, kwa hivyo utahitaji **kuunda tunnel** kupitia mashine iliyovunjika ili kuweza kuifikia kutoka kwa mashine yako, au unaweza **kupakia** [**kubectl**](https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/#install-kubectl-binary-with-curl-on-linux) binary, au tumia **`curl/wget/chochote`** kufanya maombi ya HTTP ya moja kwa moja kwa API server.
### Differences between `list` and `get` verbs
@@ -91,14 +91,14 @@ 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]
```
Wanafungua muunganisho wa utiririshaji ambao unakurudishia orodha kamili ya Manifest ya Deployment kila wakati inabadilika (au wakati mpya inaundwa).
Wanafungua muunganisho wa mtiririko ambao unakurudishia orodha kamili ya Deployment kila wakati inabadilika (au wakati mpya inaundwa).
> [!CAUTION]
> Amri zifuatazo za `kubectl` zinaonyesha jinsi ya kuorodhesha vitu. Ikiwa unataka kufikia data unahitaji kutumia `describe` badala ya `get`
### Kutumia curl
Kutoka ndani ya pod unaweza kutumia mabadiliko kadhaa ya mazingira:
Kutoka ndani ya pod unaweza kutumia vigezo kadhaa vya env:
```bash
export APISERVER=${KUBERNETES_SERVICE_HOST}:${KUBERNETES_SERVICE_PORT_HTTPS}
export SERVICEACCOUNT=/var/run/secrets/kubernetes.io/serviceaccount
@@ -113,7 +113,7 @@ alias kurl="curl --cacert ${CACERT} --header \"Authorization: Bearer ${TOKEN}\""
### Kutumia kubectl
Kuwa na token na anwani ya seva ya API unatumia kubectl au curl kufikia hiyo kama ilivyoonyeshwa hapa:
Ili kuwa na token na anwani ya seva ya API unatumia kubectl au curl kufikia hiyo kama ilivyoonyeshwa hapa:
Kwa kawaida, APISERVER inawasiliana na muundo wa `https://`
```bash
@@ -121,11 +121,11 @@ alias k='kubectl --token=$TOKEN --server=https://$APISERVER --insecure-skip-tls-
```
> ikiwa hakuna `https://` katika url, unaweza kupata Kosa Kama Ombi Mbaya.
Unaweza kupata [**karatasi ya udanganyifu rasmi ya kubectl hapa**](https://kubernetes.io/docs/reference/kubectl/cheatsheet/). Lengo la sehemu zifuatazo ni kuwasilisha kwa mpangilio chaguzi tofauti za kuhesabu na kuelewa K8s mpya ambayo umepata ufikiaji.
Unaweza kupata [**cheatsheet rasmi ya kubectl hapa**](https://kubernetes.io/docs/reference/kubectl/cheatsheet/). Lengo la sehemu zifuatazo ni kuwasilisha kwa mpangilio tofauti chaguzi za kuhesabu na kuelewa K8s mpya ambayo umepata ufikiaji.
Ili kupata ombi la HTTP ambalo `kubectl` inatuma unaweza kutumia parameter `-v=8`
#### MitM kubectl - Kuweka kubectl kwenye Proxy
#### MitM kubectl - Proxyfying kubectl
```bash
# Launch burp
# Set proxy
@@ -150,7 +150,7 @@ kubectl config set-context --current --namespace=<namespace>
{{#endtab }}
{{#endtabs }}
Ikiwa umeweza kuiba akiba za watumiaji, unaweza **kuziweka kwenye mfumo wako** kwa kutumia kitu kama:
Ikiwa umeweza kuiba baadhi ya akreditivu za watumiaji unaweza **kuziunda kwa ndani** ukitumia kitu kama:
```bash
kubectl config set-credentials USER_NAME \
--auth-provider=oidc \
@@ -272,7 +272,7 @@ for token in `k describe secrets -n kube-system | grep "token:" | cut -d " " -f
```
### Pata Akaunti za Huduma
Kama ilivyojadiliwa mwanzoni mwa ukurasa huu **wakati pod inatekelezwa, akaunti ya huduma kwa kawaida inatolewa kwake**. Hivyo basi, kuorodhesha akaunti za huduma, ruhusa zao na mahali zinapotekelezwa kunaweza kumwezesha mtumiaji kupandisha mamlaka.
Kama ilivyojadiliwa mwanzoni mwa ukurasa huu **wakati pod inatekelezwa, akaunti ya huduma kwa kawaida inatolewa kwake**. Hivyo basi, kuorodhesha akaunti za huduma, ruhusa zao na mahali zinapotekelezwa kunaweza kumwezesha mtumiaji kuongeza mamlaka.
{{#tabs }}
{{#tab name="kubectl" }}
@@ -309,7 +309,7 @@ kurl -v https://$APISERVER/api/v1/namespaces/<namespace>/deployments/
### Pata Pods
Pods ni **containers** halisi ambazo zitafanya **kazi**.
Pods ni **mashine** halisi ambazo zitakuwa **zinakimbia**.
{{#tabs }}
{{#tab name="kubectl" }}
@@ -328,7 +328,7 @@ kurl -v https://$APISERVER/api/v1/namespaces/<namespace>/pods/
### Pata Huduma
Kubernetes **huduma** zinatumika ili **kuweka huduma wazi katika bandari na IP maalum** (ambayo itakuwa kama balancer ya mzigo kwa pods ambazo kwa kweli zinatoa huduma). Hii ni ya kuvutia kujua ambapo unaweza kupata huduma nyingine za kujaribu kushambulia.
Kubernetes **huduma** zinatumika ili **kuonyesha huduma katika bandari na IP maalum** (ambayo itakuwa kama balancer ya mzigo kwa pods ambazo kwa kweli zinatoa huduma). Hii ni ya kuvutia kujua ambapo unaweza kupata huduma nyingine za kujaribu kushambulia.
{{#tabs }}
{{#tab name="kubectl" }}
@@ -345,9 +345,9 @@ kurl -v https://$APISERVER/api/v1/namespaces/default/services/
{{#endtab }}
{{#endtabs }}
### Pata voz
### Pata nodi
Pata **voz zote zilizowekwa ndani ya klasta**.
Pata **nodi zote zilizowekwa ndani ya kundi**.
{{#tabs }}
{{#tab name="kubectl" }}
@@ -383,7 +383,7 @@ kurl -v https://$APISERVER/apis/extensions/v1beta1/namespaces/default/daemonsets
### Pata cronjob
Cron jobs inaruhusu kupanga kutumia sintaksia ya crontab uzinduzi wa pod ambayo itatekeleza hatua fulani.
Cron jobs inaruhusu kupanga kutumia sintaksia kama ya crontab uzinduzi wa pod ambayo itafanya kitendo chochote.
{{#tabs }}
{{#tab name="kubectl" }}
@@ -401,7 +401,7 @@ kurl -v https://$APISERVER/apis/batch/v1beta1/namespaces/<namespace>/cronjobs
### Pata configMap
configMap daima ina habari nyingi na configfile ambazo zinatolewa kwa programu zinazotembea katika kubernetes. Kawaida unaweza kupata nywila nyingi, siri, tokens ambazo zinatumika kuungana na kuthibitisha huduma nyingine za ndani/nje.
configMap daima ina habari nyingi na configfile ambazo zinatolewa kwa programu zinazotumia kubernetes. Kawaida unaweza kupata nywila nyingi, siri, tokens ambazo zinatumika kuungana na kuthibitisha huduma nyingine za ndani/nje.
{{#tabs }}
{{#tab name="kubectl" }}
@@ -465,7 +465,7 @@ Ikiwa unaweza kuunda pods mpya unaweza kuwa na uwezo wa kutoroka kutoka kwao had
```bash
kubectl get pod <name> [-n <namespace>] -o yaml
```
> ikiwa unahitaji kuunda pod kwenye nodi maalum, unaweza kutumia amri ifuatayo kupata lebo kwenye nodi
> ikiwa unahitaji kuunda pod kwenye node maalum, unaweza kutumia amri ifuatayo kupata lebo kwenye node
>
> `k get nodes --show-labels`
>
@@ -501,8 +501,6 @@ restartPolicy: Never
# or using
# node-role.kubernetes.io/master: ""
```
[original yaml source](https://gist.github.com/abhisek/1909452a8ab9b8383a2e94f95ab0ccba)
Baada ya hapo unaunda pod.
```bash
kubectl apply -f attacker.yaml [-n <namespace>]
@@ -511,13 +509,13 @@ Sasa unaweza kubadilisha kwenda kwenye pod iliyoundwa kama ifuatavyo
```bash
kubectl exec -it attacker-pod [-n <namespace>] -- sh # attacker-pod is the name defined in the yaml file
```
Na hatimaye unachora ndani ya mfumo wa node.
Na hatimaye unachora chroot ndani ya mfumo wa node.
```bash
chroot /root /bin/bash
```
Information obtained from: [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/)
Taarifa zilizopatikana kutoka: [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/)
## References
## Marejeleo
{{#ref}}
https://www.cyberark.com/resources/threat-research-blog/kubernetes-pentest-methodology-part-3