mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-01-16 23:01:43 -08:00
Translated ['.github/pull_request_template.md', 'src/README.md', 'src/pe
This commit is contained in:
@@ -4,7 +4,7 @@
|
||||
|
||||
## Kubernetes Tokens
|
||||
|
||||
यदि आपके पास किसी मशीन तक समझौता किया गया पहुंच है, तो उपयोगकर्ता के पास कुछ Kubernetes प्लेटफ़ॉर्म तक पहुंच हो सकती है। टोकन आमतौर पर **env var `KUBECONFIG`** द्वारा इंगित फ़ाइल में या **`~/.kube`** के अंदर स्थित होता है।
|
||||
यदि आपके पास किसी मशीन तक समझौता किया गया पहुंच है, तो उपयोगकर्ता के पास कुछ Kubernetes प्लेटफ़ॉर्म तक पहुंच हो सकती है। टोकन आमतौर पर **env var `KUBECONFIG`** द्वारा इंगित की गई फ़ाइल में या **`~/.kube`** के अंदर स्थित होता है।
|
||||
|
||||
इस फ़ोल्डर में आप **API सर्वर से कनेक्ट करने के लिए टोकन और कॉन्फ़िगरेशन के साथ कॉन्फ़िग फ़ाइलें** पा सकते हैं। इस फ़ोल्डर में आपको पहले से प्राप्त जानकारी के साथ एक कैश फ़ोल्डर भी मिल सकता है।
|
||||
|
||||
@@ -16,12 +16,12 @@
|
||||
|
||||
Kubernetes [दस्तावेज़ीकरण](https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/#use-the-default-service-account-to-access-the-api-server) से लिया गया:
|
||||
|
||||
_“जब आप एक पॉड बनाते हैं, यदि आप एक सेवा खाता निर्दिष्ट नहीं करते हैं, तो इसे स्वचालित रूप से उसी नामस्थान में डिफ़ॉल्ट सेवा खाते को सौंपा जाता है।”_
|
||||
_“जब आप एक पॉड बनाते हैं, यदि आप एक सेवा खाता निर्दिष्ट नहीं करते हैं, तो इसे स्वचालित रूप से उसी namespace में डिफ़ॉल्ट सेवा खाते को सौंपा जाता है।”_
|
||||
|
||||
**ServiceAccount** एक वस्तु है जिसे Kubernetes द्वारा प्रबंधित किया जाता है और यह पॉड में चलने वाली प्रक्रियाओं के लिए एक पहचान प्रदान करने के लिए उपयोग किया जाता है।\
|
||||
प्रत्येक सेवा खाते से संबंधित एक गुप्त होता है और इस गुप्त में एक बियरर टोकन होता है। यह एक JSON वेब टोकन (JWT) है, जो दो पक्षों के बीच दावों का सुरक्षित रूप से प्रतिनिधित्व करने का एक तरीका है।
|
||||
|
||||
आमतौर पर **एक** निर्देशिका:
|
||||
आम तौर पर **एक** निर्देशिका:
|
||||
|
||||
- `/run/secrets/kubernetes.io/serviceaccount`
|
||||
- `/var/run/secrets/kubernetes.io/serviceaccount`
|
||||
@@ -30,7 +30,7 @@ _“जब आप एक पॉड बनाते हैं, यदि आप
|
||||
इन फ़ाइलों को शामिल करती हैं:
|
||||
|
||||
- **ca.crt**: यह Kubernetes संचार की जांच के लिए ca प्रमाणपत्र है
|
||||
- **namespace**: यह वर्तमान नामस्थान को इंगित करता है
|
||||
- **namespace**: यह वर्तमान namespace को इंगित करता है
|
||||
- **token**: इसमें वर्तमान पॉड का **सेवा टोकन** होता है।
|
||||
|
||||
अब जब आपके पास टोकन है, तो आप वातावरण चर **`KUBECONFIG`** के अंदर API सर्वर पा सकते हैं। अधिक जानकारी के लिए चलाएँ `(env | set) | grep -i "kuber|kube`**`"`**
|
||||
@@ -55,7 +55,7 @@ _**हॉट पॉड्स**_ ऐसे पॉड होते हैं ज
|
||||
|
||||
## GUI Applications
|
||||
|
||||
- **k9s**: एक GUI जो टर्मिनल से एक Kubernetes क्लस्टर को सूचीबद्ध करता है। [https://k9scli.io/topics/commands/](https://k9scli.io/topics/commands/) में कमांड देखें। `:namespace` लिखें और सभी का चयन करें ताकि फिर सभी नामस्थानों में संसाधनों की खोज की जा सके।
|
||||
- **k9s**: एक GUI जो टर्मिनल से एक Kubernetes क्लस्टर को सूचीबद्ध करता है। [https://k9scli.io/topics/commands/](https://k9scli.io/topics/commands/) में कमांड देखें। `:namespace` लिखें और सभी का चयन करें ताकि फिर सभी namespaces में संसाधनों की खोज की जा सके।
|
||||
- **k8slens**: यह कुछ मुफ्त परीक्षण दिनों की पेशकश करता है: [https://k8slens.dev/](https://k8slens.dev/)
|
||||
|
||||
## Enumeration CheatSheet
|
||||
@@ -63,27 +63,27 @@ _**हॉट पॉड्स**_ ऐसे पॉड होते हैं ज
|
||||
K8s वातावरण को सूचीबद्ध करने के लिए आपको इनमें से कुछ की आवश्यकता है:
|
||||
|
||||
- एक **मान्य प्रमाणीकरण टोकन**। पिछले अनुभाग में हमने उपयोगकर्ता टोकन और सेवा खाता टोकन के लिए कहाँ खोजें, देखा।
|
||||
- **Kubernetes API का **पता (**_**https://host:port**_**)**। यह आमतौर पर वातावरण चर और/या kube कॉन्फ़िग फ़ाइल में पाया जा सकता है।
|
||||
- **वैकल्पिक**: **API सर्वर को सत्यापित करने के लिए ca.crt**। यह उसी स्थानों पर पाया जा सकता है जहाँ टोकन पाया जा सकता है। यह API सर्वर प्रमाणपत्र को सत्यापित करने के लिए उपयोगी है, लेकिन `kubectl` के साथ `--insecure-skip-tls-verify` या `curl` के साथ `-k` का उपयोग करते समय आपको इसकी आवश्यकता नहीं होगी।
|
||||
- **Kubernetes API का पता** (**_**https://host:port**_**)। यह आमतौर पर वातावरण चर और/या kube कॉन्फ़िग फ़ाइल में पाया जा सकता है।
|
||||
- **वैकल्पिक**: **API सर्वर को सत्यापित करने के लिए ca.crt**। यह उसी स्थानों पर पाया जा सकता है जहाँ टोकन पाया जा सकता है। यह API सर्वर प्रमाणपत्र को सत्यापित करने के लिए उपयोगी है, लेकिन `kubectl` के साथ `--insecure-skip-tls-verify` का उपयोग करते समय या `curl` के साथ `-k` का उपयोग करते समय आपको इसकी आवश्यकता नहीं होगी।
|
||||
|
||||
इन विवरणों के साथ आप **Kubernetes को सूचीबद्ध** कर सकते हैं। यदि **API** किसी कारण से **इंटरनेट** के माध्यम से **सुलभ** है, तो आप बस उस जानकारी को डाउनलोड कर सकते हैं और अपने होस्ट से प्लेटफ़ॉर्म को सूचीबद्ध कर सकते हैं।
|
||||
|
||||
हालांकि, आमतौर पर **API सर्वर एक आंतरिक नेटवर्क के अंदर होता है**, इसलिए आपको इसे अपनी मशीन से एक्सेस करने के लिए समझौता की गई मशीन के माध्यम से **एक सुरंग** बनाने की आवश्यकता होगी, या आप **`kubectl`** बाइनरी को **अपलोड** कर सकते हैं, या **`curl/wget/anything`** का उपयोग करके API सर्वर पर कच्चे HTTP अनुरोध कर सकते हैं।
|
||||
हालांकि, आमतौर पर **API सर्वर एक आंतरिक नेटवर्क के अंदर होता है**, इसलिए आपको इसे अपनी मशीन से एक्सेस करने के लिए समझौता की गई मशीन के माध्यम से **एक सुरंग** बनाने की आवश्यकता होगी, या आप **`kubectl`** बाइनरी को **अपलोड** कर सकते हैं, या **`curl/wget/anything`** का उपयोग कर सकते हैं ताकि API सर्वर पर कच्चे HTTP अनुरोध किए जा सकें।
|
||||
|
||||
### `list` और `get` क्रियाओं के बीच अंतर
|
||||
|
||||
**`get`** अनुमतियों के साथ आप विशिष्ट संपत्तियों की जानकारी तक पहुँच सकते हैं (_`kubectl` में `describe` विकल्प_) API:
|
||||
**`get`** अनुमतियों के साथ आप विशिष्ट संपत्तियों की जानकारी तक पहुँच सकते हैं (_`describe` विकल्प `kubectl` में_) API:
|
||||
```
|
||||
GET /apis/apps/v1/namespaces/{namespace}/deployments/{name}
|
||||
```
|
||||
यदि आपके पास **`list`** अनुमति है, तो आपको एक प्रकार की संपत्ति की सूची बनाने के लिए API अनुरोध निष्पादित करने की अनुमति है (_`kubectl` में `get` विकल्प_):
|
||||
यदि आपके पास **`list`** अनुमति है, तो आप एक प्रकार की संपत्ति की सूची बनाने के लिए API अनुरोधों को निष्पादित करने की अनुमति रखते हैं (_`kubectl` में `get` विकल्प_):
|
||||
```bash
|
||||
#In a namespace
|
||||
GET /apis/apps/v1/namespaces/{namespace}/deployments
|
||||
#In all namespaces
|
||||
GET /apis/apps/v1/deployments
|
||||
```
|
||||
यदि आपके पास **`watch`** अनुमति है, तो आपको संपत्तियों की निगरानी के लिए API अनुरोध निष्पादित करने की अनुमति है:
|
||||
यदि आपके पास **`watch`** अनुमति है, तो आप संपत्तियों की निगरानी के लिए API अनुरोधों को निष्पादित करने की अनुमति है:
|
||||
```
|
||||
GET /apis/apps/v1/deployments?watch=true
|
||||
GET /apis/apps/v1/watch/namespaces/{namespace}/deployments?watch=true
|
||||
@@ -94,7 +94,7 @@ GET /apis/apps/v1/watch/deployments [DEPRECATED]
|
||||
वे एक स्ट्रीमिंग कनेक्शन खोलते हैं जो आपको एक Deployment का पूरा मैनिफेस्ट लौटाता है जब भी यह बदलता है (या जब एक नया बनाया जाता है)।
|
||||
|
||||
> [!CAUTION]
|
||||
> निम्नलिखित `kubectl` कमांड केवल यह दर्शाते हैं कि वस्तुओं को कैसे सूचीबद्ध किया जाए। यदि आप डेटा तक पहुँच प्राप्त करना चाहते हैं, तो आपको `get` के बजाय `describe` का उपयोग करना होगा।
|
||||
> निम्नलिखित `kubectl` कमांड केवल यह दर्शाते हैं कि वस्तुओं को कैसे सूचीबद्ध किया जाए। यदि आप डेटा तक पहुँच प्राप्त करना चाहते हैं तो आपको `get` के बजाय `describe` का उपयोग करना होगा।
|
||||
|
||||
### Using curl
|
||||
|
||||
@@ -109,7 +109,7 @@ 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`** में **एक्सेस** कर सकता है और आप **`/etc/resolv.config`** में kube नेटवर्क देख सकते हैं, क्योंकि यहाँ आपको kubernetes DNS सर्वर का पता मिलेगा (एक ही रेंज का ".1" kube-api एंडपॉइंट है)।
|
||||
> डिफ़ॉल्ट रूप से, पॉड **kube-api सर्वर** को डोमेन नाम **`kubernetes.default.svc`** में **एक्सेस** कर सकता है और आप **`/etc/resolv.config`** में kube नेटवर्क देख सकते हैं क्योंकि यहाँ आपको kubernetes DNS सर्वर का पता मिलेगा (एक ही रेंज का ".1" kube-api एंडपॉइंट है)।
|
||||
|
||||
### Using kubectl
|
||||
|
||||
@@ -121,9 +121,9 @@ alias k='kubectl --token=$TOKEN --server=https://$APISERVER --insecure-skip-tls-
|
||||
```
|
||||
> यदि URL में `https://` नहीं है, तो आपको Bad Request जैसी त्रुटि मिल सकती है।
|
||||
|
||||
आप [**यहां आधिकारिक kubectl चीटशीट**](https://kubernetes.io/docs/reference/kubectl/cheatsheet/) पा सकते हैं। निम्नलिखित अनुभागों का लक्ष्य विभिन्न विकल्पों को क्रमबद्ध तरीके से प्रस्तुत करना है ताकि आप उस नए K8s को सूचीबद्ध और समझ सकें, जिसे आपने एक्सेस किया है।
|
||||
आप [**यहां आधिकारिक kubectl cheatsheet**](https://kubernetes.io/docs/reference/kubectl/cheatsheet/) पा सकते हैं। निम्नलिखित अनुभागों का लक्ष्य विभिन्न विकल्पों को क्रमबद्ध तरीके से प्रस्तुत करना है ताकि आप नए K8s को सूचीबद्ध कर सकें और समझ सकें, जिसे आपने एक्सेस किया है।
|
||||
|
||||
`kubectl` द्वारा भेजे गए HTTP अनुरोध को खोजने के लिए आप पैरामीटर `-v=8` का उपयोग कर सकते हैं।
|
||||
HTTP अनुरोध को खोजने के लिए जो `kubectl` भेजता है, आप पैरामीटर `-v=8` का उपयोग कर सकते हैं।
|
||||
|
||||
#### MitM kubectl - kubectl को प्रॉक्सी करना
|
||||
```bash
|
||||
@@ -205,13 +205,13 @@ kurl -i -s -k -X $'POST' \
|
||||
kubernetes-role-based-access-control-rbac.md
|
||||
{{#endref}}
|
||||
|
||||
**एक बार जब आप जान लें कि आपके पास कौन से विशेषाधिकार हैं** तो निम्नलिखित पृष्ठ की जांच करें यह पता लगाने के लिए **क्या आप उनका दुरुपयोग कर सकते हैं** विशेषाधिकार बढ़ाने के लिए:
|
||||
**एक बार जब आप जान लें कि आपके पास कौन से विशेषाधिकार हैं** , तो विशेषाधिकारों को बढ़ाने के लिए **क्या आप उनका दुरुपयोग कर सकते हैं** यह पता लगाने के लिए निम्नलिखित पृष्ठ की जांच करें:
|
||||
|
||||
{{#ref}}
|
||||
abusing-roles-clusterroles-in-kubernetes/
|
||||
{{#endref}}
|
||||
|
||||
### दूसरों की भूमिकाएँ प्राप्त करें
|
||||
### अन्य भूमिकाएँ प्राप्त करें
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="kubectl" }}
|
||||
@@ -247,7 +247,7 @@ kurl -k -v https://$APISERVER/api/v1/namespaces/
|
||||
{{#endtab }}
|
||||
{{#endtabs }}
|
||||
|
||||
### गुप्त जानकारी प्राप्त करें
|
||||
### रहस्य प्राप्त करें
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="kubectl" }}
|
||||
@@ -328,7 +328,7 @@ kurl -v https://$APISERVER/api/v1/namespaces/<namespace>/pods/
|
||||
|
||||
### सेवाएँ प्राप्त करें
|
||||
|
||||
Kubernetes **सेवाएँ** का उपयोग **एक विशिष्ट पोर्ट और IP में एक सेवा को उजागर करने के लिए** किया जाता है (जो उन पॉड्स के लिए लोड बैलेंसर के रूप में कार्य करेगा जो वास्तव में सेवा प्रदान कर रहे हैं)। यह जानना दिलचस्प है कि आप अन्य सेवाएँ कहाँ पा सकते हैं जिन पर आप हमला करने की कोशिश कर सकते हैं।
|
||||
Kubernetes **सेवाएँ** का उपयोग **एक विशिष्ट पोर्ट और IP में एक सेवा को उजागर करने के लिए** किया जाता है (जो वास्तव में सेवा प्रदान करने वाले पॉड्स के लिए लोड बैलेंसर के रूप में कार्य करेगा)। यह जानना दिलचस्प है कि आप अन्य सेवाएँ कहाँ पा सकते हैं जिन पर आप हमला करने की कोशिश कर सकते हैं।
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="kubectl" }}
|
||||
@@ -347,7 +347,7 @@ kurl -v https://$APISERVER/api/v1/namespaces/default/services/
|
||||
|
||||
### नोड्स प्राप्त करें
|
||||
|
||||
**क्लस्टर के अंदर कॉन्फ़िगर किए गए सभी नोड्स प्राप्त करें**।
|
||||
क्लस्टर के अंदर **कॉन्फ़िगर किए गए सभी नोड्स** प्राप्त करें।
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="kubectl" }}
|
||||
@@ -363,9 +363,9 @@ kurl -v https://$APISERVER/api/v1/nodes/
|
||||
{{#endtab }}
|
||||
{{#endtabs }}
|
||||
|
||||
### Get DaemonSets
|
||||
### DaemonSets प्राप्त करें
|
||||
|
||||
**DaeamonSets** यह सुनिश्चित करने की अनुमति देता है कि **एक विशिष्ट पॉड क्लस्टर के सभी नोड्स में चल रहा है** (या चयनित नोड्स में)। यदि आप DaemonSet को हटाते हैं, तो इसके द्वारा प्रबंधित पॉड्स भी हटा दिए जाएंगे।
|
||||
**DaeamonSets** यह सुनिश्चित करने की अनुमति देता है कि **एक विशेष पोड क्लस्टर के सभी नोड्स में चल रहा है** (या चयनित नोड्स में)। यदि आप DaemonSet को हटाते हैं, तो इसके द्वारा प्रबंधित पोड भी हटा दिए जाएंगे।
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="kubectl" }}
|
||||
@@ -383,7 +383,7 @@ kurl -v https://$APISERVER/apis/extensions/v1beta1/namespaces/default/daemonsets
|
||||
|
||||
### क्रोनजॉब प्राप्त करें
|
||||
|
||||
क्रोन जॉब्स को क्रॉन्टैब जैसे सिंटैक्स का उपयोग करके एक पॉड के लॉन्च को शेड्यूल करने की अनुमति देता है जो कुछ क्रिया करेगा।
|
||||
क्रोन जॉब्स crontab जैसे सिंटैक्स का उपयोग करके एक पॉड के लॉन्च को शेड्यूल करने की अनुमति देते हैं जो कुछ क्रियाएँ करेगा।
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="kubectl" }}
|
||||
@@ -401,7 +401,7 @@ kurl -v https://$APISERVER/apis/batch/v1beta1/namespaces/<namespace>/cronjobs
|
||||
|
||||
### configMap प्राप्त करें
|
||||
|
||||
configMap हमेशा बहुत सारी जानकारी और configfile शामिल करता है जो उन ऐप्स को प्रदान करता है जो kubernetes में चलते हैं। आमतौर पर, आप बहुत सारे पासवर्ड, रहस्य, टोकन पा सकते हैं जो अन्य आंतरिक/बाहरी सेवा से कनेक्ट करने और मान्य करने के लिए उपयोग किए जाते हैं।
|
||||
configMap हमेशा बहुत सारी जानकारी और configfile शामिल करता है जो kubernetes में चलने वाले ऐप्स को प्रदान करता है। आमतौर पर, आप बहुत सारे पासवर्ड, रहस्य, टोकन पा सकते हैं जो अन्य आंतरिक/बाहरी सेवा से कनेक्ट करने और मान्य करने के लिए उपयोग किए जाते हैं।
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="kubectl" }}
|
||||
@@ -461,7 +461,7 @@ k top pod --all-namespaces
|
||||
|
||||
### पॉड से बाहर निकलना
|
||||
|
||||
यदि आप नए पॉड बनाने में सक्षम हैं, तो आप उनसे नोड में बाहर निकलने में सक्षम हो सकते हैं। ऐसा करने के लिए, आपको एक yaml फ़ाइल का उपयोग करके एक नया पॉड बनाना होगा, बनाए गए पॉड में स्विच करना होगा और फिर नोड के सिस्टम में chroot करना होगा। आप yaml फ़ाइल के लिए संदर्भ के रूप में पहले से मौजूद पॉड का उपयोग कर सकते हैं क्योंकि वे मौजूदा छवियों और पथों को प्रदर्शित करते हैं।
|
||||
यदि आप नए पॉड बनाने में सक्षम हैं, तो आप उनसे नोड में बाहर निकलने में सक्षम हो सकते हैं। ऐसा करने के लिए, आपको एक yaml फ़ाइल का उपयोग करके एक नया पॉड बनाना होगा, बनाए गए पॉड पर स्विच करना होगा और फिर नोड के सिस्टम में chroot करना होगा। आप yaml फ़ाइल के लिए संदर्भ के रूप में पहले से मौजूद पॉड का उपयोग कर सकते हैं क्योंकि वे मौजूदा छवियों और पथों को प्रदर्शित करते हैं।
|
||||
```bash
|
||||
kubectl get pod <name> [-n <namespace>] -o yaml
|
||||
```
|
||||
@@ -471,7 +471,7 @@ kubectl get pod <name> [-n <namespace>] -o yaml
|
||||
>
|
||||
> सामान्यतः, kubernetes.io/hostname और node-role.kubernetes.io/master सभी अच्छे लेबल हैं चयन के लिए।
|
||||
|
||||
फिर आप अपना attack.yaml फ़ाइल बनाते हैं
|
||||
फिर आप अपना attack.yaml फ़ाइल बनाते हैं।
|
||||
```yaml
|
||||
apiVersion: v1
|
||||
kind: Pod
|
||||
@@ -501,13 +501,11 @@ restartPolicy: Never
|
||||
# or using
|
||||
# node-role.kubernetes.io/master: ""
|
||||
```
|
||||
[original yaml source](https://gist.github.com/abhisek/1909452a8ab9b8383a2e94f95ab0ccba)
|
||||
|
||||
उसके बाद आप पॉड बनाते हैं
|
||||
```bash
|
||||
kubectl apply -f attacker.yaml [-n <namespace>]
|
||||
```
|
||||
अब आप निम्नलिखित के अनुसार बनाए गए पॉड पर स्विच कर सकते हैं
|
||||
अब आप निम्नलिखित के रूप में बनाए गए पॉड पर स्विच कर सकते हैं
|
||||
```bash
|
||||
kubectl exec -it attacker-pod [-n <namespace>] -- sh # attacker-pod is the name defined in the yaml file
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user