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

This commit is contained in:
Translator
2025-01-02 00:00:08 +00:00
parent 931ae54e5f
commit 5dd38218dd
206 changed files with 1236 additions and 1254 deletions

View File

@@ -1,8 +1,8 @@
# Kubernetes Enumeration
# Enumerazione di Kubernetes
{{#include ../../banners/hacktricks-training.md}}
## Kubernetes Tokens
## Token di Kubernetes
Se hai compromesso l'accesso a una macchina, l'utente potrebbe avere accesso a qualche piattaforma Kubernetes. Il token si trova solitamente in un file indicato dalla **variabile d'ambiente `KUBECONFIG`** o **all'interno di `~/.kube`**.
@@ -10,16 +10,16 @@ In questa cartella potresti trovare file di configurazione con **token e configu
Se hai compromesso un pod all'interno di un ambiente kubernetes, ci sono altri luoghi dove puoi trovare token e informazioni sull'attuale ambiente K8:
### Service Account Tokens
### Token dell'Account di Servizio
Prima di continuare, se non sai cosa sia un servizio in Kubernetes, ti consiglio di **seguire questo link e leggere almeno le informazioni sull'architettura di Kubernetes.**
Preso dalla [documentazione](https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/#use-the-default-service-account-to-access-the-api-server) di Kubernetes:
_“Quando crei un pod, se non specifichi un service account, viene automaticamente assegnato il_ service account _predefinito nello stesso namespace.”_
_“Quando crei un pod, se non specifichi un account di servizio, viene automaticamente assegnato l'account di servizio_ predefinito _nello stesso namespace.”_
**ServiceAccount** è un oggetto gestito da Kubernetes e utilizzato per fornire un'identità per i processi che vengono eseguiti in un pod.\
Ogni service account ha un segreto ad esso correlato e questo segreto contiene un bearer token. Questo è un JSON Web Token (JWT), un metodo per rappresentare in modo sicuro le affermazioni tra due parti.
Ogni account di servizio ha un segreto ad esso correlato e questo segreto contiene un token bearer. Questo è un JSON Web Token (JWT), un metodo per rappresentare in modo sicuro le affermazioni tra due parti.
Di solito **uno** delle directory:
@@ -29,13 +29,13 @@ Di solito **uno** delle directory:
contiene i file:
- **ca.crt**: È il certificato ca per controllare le comunicazioni kubernetes
- **ca.crt**: È il certificato ca per controllare le comunicazioni di kubernetes
- **namespace**: Indica l'attuale namespace
- **token**: Contiene il **token di servizio** dell'attuale pod.
Ora che hai il token, puoi trovare il server API all'interno della variabile d'ambiente **`KUBECONFIG`**. Per ulteriori informazioni esegui `(env | set) | grep -i "kuber|kube`**`"`**
Il token del service account viene firmato dalla chiave presente nel file **sa.key** e convalidato da **sa.pub**.
Il token dell'account di servizio è firmato dalla chiave presente nel file **sa.key** e convalidato da **sa.pub**.
Posizione predefinita su **Kubernetes**:
@@ -47,36 +47,36 @@ Posizione predefinita su **Minikube**:
### Hot Pods
_**Hot pods sono**_ pods che contengono un token di service account privilegiato. Un token di service account privilegiato è un token che ha il permesso di eseguire compiti privilegiati come elencare segreti, creare pod, ecc.
_**Hot pods sono**_ pods che contengono un token di account di servizio privilegiato. Un token di account di servizio privilegiato è un token che ha il permesso di eseguire compiti privilegiati come elencare segreti, creare pod, ecc.
## RBAC
Se non sai cosa sia **RBAC**, **leggi questa sezione**.
## GUI Applications
## Applicazioni GUI
- **k9s**: Un'interfaccia grafica che enumera un cluster kubernetes dal terminale. Controlla i comandi in [https://k9scli.io/topics/commands/](https://k9scli.io/topics/commands/). Scrivi `:namespace` e seleziona tutto per poi cercare risorse in tutti i namespace.
- **k8slens**: Offre alcuni giorni di prova gratuita: [https://k8slens.dev/](https://k8slens.dev/)
## Enumeration CheatSheet
## CheatSheet di Enumerazione
Per enumerare un ambiente K8s hai bisogno di un paio di queste:
- Un **token di autenticazione valido**. Nella sezione precedente abbiamo visto dove cercare un token utente e un token di service account.
- L'**indirizzo (**_**https://host:port**_**) dell'API Kubernetes**. Questo può essere solitamente trovato nelle variabili d'ambiente e/o nel file di configurazione kube.
- Un **token di autenticazione valido**. Nella sezione precedente abbiamo visto dove cercare un token utente e un token di account di servizio.
- L'**indirizzo (**_**https://host:port**_**) dell'API di Kubernetes**. Questo può essere solitamente trovato nelle variabili d'ambiente e/o nel file di configurazione kube.
- **Opzionale**: Il **ca.crt per verificare il server API**. Questo può essere trovato negli stessi luoghi in cui può essere trovato il token. Questo è utile per verificare il certificato del server API, ma utilizzando `--insecure-skip-tls-verify` con `kubectl` o `-k` con `curl` non avrai bisogno di questo.
Con questi dettagli puoi **enumerare kubernetes**. Se l'**API** per qualche motivo è **accessibile** attraverso l'**Internet**, puoi semplicemente scaricare quelle informazioni e enumerare la piattaforma dal tuo host.
Con questi dettagli puoi **enumerare kubernetes**. Se l'**API** per qualche motivo è **accessibile** tramite **Internet**, puoi semplicemente scaricare quelle informazioni e enumerare la piattaforma dal tuo host.
Tuttavia, di solito il **server API è all'interno di una rete interna**, quindi dovrai **creare un tunnel** attraverso la macchina compromessa per accedervi dalla tua macchina, oppure puoi **caricare il** [**kubectl**](https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/#install-kubectl-binary-with-curl-on-linux) binario, o usare **`curl/wget/anything`** per eseguire richieste HTTP raw al server API.
### Differences between `list` and `get` verbs
### Differenze tra i verbi `list` e `get`
Con i permessi **`get`** puoi accedere alle informazioni di asset specifici (_opzione `describe` in `kubectl`_) API:
```
GET /apis/apps/v1/namespaces/{namespace}/deployments/{name}
```
Se hai il permesso **`list`**, ti è consentito eseguire richieste API per elencare un tipo di risorsa (_`get` opzione in `kubectl`_):
Se hai il permesso **`list`**, ti è consentito eseguire richieste API per elencare un tipo di risorsa (_opzione `get` in `kubectl`_):
```bash
#In a namespace
GET /apis/apps/v1/namespaces/{namespace}/deployments
@@ -91,10 +91,10 @@ 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]
```
Aprono una connessione streaming che ti restituisce il manifesto completo di un Deployment ogni volta che cambia (o quando ne viene creato uno nuovo).
Aprono una connessione di streaming che ti restituisce il manifesto completo di un Deployment ogni volta che cambia (o quando ne viene creato uno nuovo).
> [!CAUTION]
> I seguenti comandi `kubectl` indicano solo come elencare gli oggetti. Se vuoi accedere ai dati, devi usare `describe` invece di `get`.
> I seguenti comandi `kubectl` indicano solo come elencare gli oggetti. Se desideri accedere ai dati, devi usare `describe` invece di `get`
### Utilizzando curl
@@ -111,9 +111,9 @@ alias kurl="curl --cacert ${CACERT} --header \"Authorization: Bearer ${TOKEN}\""
> [!WARNING]
> Per impostazione predefinita, il pod può **accedere** al **kube-api server** nel nome di dominio **`kubernetes.default.svc`** e puoi vedere la rete kube in **`/etc/resolv.config`** poiché qui troverai l'indirizzo del server DNS di kubernetes (il ".1" della stessa gamma è l'endpoint kube-api).
### Utilizzando kubectl
### Usando kubectl
Avendo il token e l'indirizzo del server API, utilizzi kubectl o curl per accedervi come indicato qui:
Avendo il token e l'indirizzo del server API, puoi utilizzare kubectl o curl per accedervi come indicato qui:
Per impostazione predefinita, l'APISERVER comunica con lo schema `https://`
```bash
@@ -134,7 +134,7 @@ export HTTPS_PROXY=http://localhost:8080
# Launch kubectl
kubectl get namespace --insecure-skip-tls-verify=true
```
### Configurazione Attuale
### Configurazione Corrente
{{#tabs }}
{{#tab name="Kubectl" }}
@@ -174,7 +174,7 @@ k api-resources --namespaced=false #Resources NOT specific to a namespace
{{#endtab }}
{{#endtabs }}
### Ottieni Privilegi Correnti
### Ottieni i privilegi correnti
{{#tabs }}
{{#tab name="kubectl" }}
@@ -288,9 +288,9 @@ kurl -k -v https://$APISERVER/api/v1/namespaces/{namespace}/serviceaccounts
{{#endtab }}
{{#endtabs }}
### Ottieni i Deployment
### Ottieni Deployments
I deployment specificano i **componenti** che devono essere **eseguiti**.
I deployments specificano i **componenti** che devono essere **eseguiti**.
{{#tabs }}
{{#tab name="kubectl" }}
@@ -417,7 +417,7 @@ kurl -v https://$APISERVER/api/v1/namespaces/${NAMESPACE}/configmaps
{{#endtab }}
{{#endtabs }}
### Ottieni Politiche di Rete / Politiche di Rete Cilium
### Ottieni le Politiche di Rete / Politiche di Rete Cilium
{{#tabs }}
{{#tab name="Primo Tab" }}
@@ -429,7 +429,7 @@ k get CiliumClusterwideNetworkPolicies
{{#endtab }}
{{#endtabs }}
### Ottieni Tutto / Tutto
### Ottieni tutto / Tutto
{{#tabs }}
{{#tab name="kubectl" }}
@@ -449,7 +449,7 @@ k get all --all-namespaces -l='app.kubernetes.io/managed-by=Helm'
{{#endtab }}
{{#endtabs }}
### **Ottieni i consumi dei Pod**
### **Ottieni i consumi dei Pods**
{{#tabs }}
{{#tab name="kubectl" }}
@@ -459,7 +459,7 @@ k top pod --all-namespaces
{{#endtab }}
{{#endtabs }}
### Uscire dal pod
### Uscita dal pod
Se sei in grado di creare nuovi pod, potresti essere in grado di uscire da essi verso il nodo. Per farlo, devi creare un nuovo pod utilizzando un file yaml, passare al pod creato e poi chroot nel sistema del nodo. Puoi utilizzare pod già esistenti come riferimento per il file yaml poiché mostrano immagini e percorsi esistenti.
```bash
@@ -501,8 +501,6 @@ restartPolicy: Never
# or using
# node-role.kubernetes.io/master: ""
```
[original yaml source](https://gist.github.com/abhisek/1909452a8ab9b8383a2e94f95ab0ccba)
Dopo di che crei il pod
```bash
kubectl apply -f attacker.yaml [-n <namespace>]