# AWS - Lambda Enum {{#include ../../../banners/hacktricks-training.md}} ## Lambda Amazon Web Services (AWS) Lambda को एक **compute service** के रूप में वर्णित किया गया है जो कोड को निष्पादित करने की अनुमति देता है बिना सर्वर प्रावधान या प्रबंधन की आवश्यकता के। इसकी विशेषता यह है कि यह **कोड निष्पादन के लिए आवश्यक संसाधन आवंटन को स्वचालित रूप से संभालता है**, उच्च उपलब्धता, स्केलेबिलिटी और सुरक्षा जैसी सुविधाओं को सुनिश्चित करता है। Lambda का एक महत्वपूर्ण पहलू इसका मूल्य निर्धारण मॉडल है, जहां **शुल्क केवल उपयोग किए गए कंप्यूट समय पर आधारित होते हैं**, प्रारंभिक निवेश या दीर्घकालिक प्रतिबद्धताओं की आवश्यकता को समाप्त करता है। एक लैम्ब्डा को कॉल करने के लिए इसे **जितनी बार चाहें** (Cloudwatch के साथ) कॉल करना संभव है, **एक URL** एंडपॉइंट को **एक्सपोज** करना और इसे कॉल करना, **API Gateway** के माध्यम से कॉल करना या यहां तक कि **S3** बकेट में डेटा में **परिवर्तनों** या **DynamoDB** तालिका में अपडेट के आधार पर कॉल करना। एक लैम्ब्डा का **कोड** **`/var/task`** में संग्रहीत होता है। ### Lambda Aliases Weights एक Lambda के पास **कई संस्करण** हो सकते हैं।\ और इसके पास **एक से अधिक** संस्करण हो सकते हैं जो **aliases** के माध्यम से एक्सपोज़ किए जाते हैं। **हर** **संस्करण** के **वजन** जो एक एलियास के अंदर एक्सपोज़ किए जाते हैं, यह तय करेंगे कि **कौन सा एलियास कॉल प्राप्त करता है** (यह 90%-10% हो सकता है, उदाहरण के लिए)।\ यदि **एक** एलियास का कोड **कमजोर** है, तो आप **अनुरोध भेज सकते हैं जब तक कमजोर** संस्करण को एक्सप्लॉइट प्राप्त नहीं होता। ![](<../../../images/image (223).png>) ### Resource Policies Lambda संसाधन नीतियाँ अन्य सेवाओं/खातों को लैम्ब्डा को कॉल करने की **अनुमति देने** की अनुमति देती हैं।\ उदाहरण के लिए, यह नीति है जो **किसी को भी URL के माध्यम से एक्सपोज़ किए गए लैम्ब्डा तक पहुँचने की अनुमति देती है**:
या यह नीति API Gateway को इसे कॉल करने की अनुमति देने के लिए:
### Lambda Database Proxies जब **सैकड़ों** **समानांतर लैम्ब्डा अनुरोध** होते हैं, यदि प्रत्येक को **डेटाबेस से कनेक्ट और कनेक्शन बंद करने** की आवश्यकता होती है, तो यह काम नहीं करेगा (लैम्ब्डा स्टेटलेस होते हैं, कनेक्शन को खुला नहीं रख सकते)।\ फिर, यदि आपके **Lambda कार्य RDS Proxy के साथ इंटरैक्ट करते हैं** आपके डेटाबेस इंस्टेंस के बजाय। यह कई समानांतर Lambda कार्यों द्वारा बनाए गए कई समवर्ती कनेक्शनों के लिए आवश्यक कनेक्शन पूलिंग को संभालता है। यह आपके Lambda अनुप्रयोगों को **मौजूदा कनेक्शनों का पुन: उपयोग** करने की अनुमति देता है, बजाय इसके कि हर कार्य कॉल के लिए नए कनेक्शन बनाए। ### Lambda EFS Filesystems डेटा को संरक्षित करने और यहां तक कि साझा करने के लिए **Lambdas EFS तक पहुँच सकते हैं और उन्हें माउंट कर सकते हैं**, ताकि Lambda इसे पढ़ और लिख सके। ### Lambda Layers एक Lambda _लेयर_ एक .zip फ़ाइल संग्रह है जो **अतिरिक्त कोड** या अन्य सामग्री को **शामिल कर सकता है**। एक लेयर में पुस्तकालय, एक [कस्टम रनटाइम](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-custom.html), डेटा, या कॉन्फ़िगरेशन फ़ाइलें हो सकती हैं। प्रत्येक फ़ंक्शन में **पाँच लेयर** तक शामिल करना संभव है। जब आप किसी फ़ंक्शन में एक लेयर शामिल करते हैं, तो **सामग्री को `/opt`** निर्देशिका में निष्पादन वातावरण में निकाला जाता है। **डिफ़ॉल्ट** रूप से, आप जो **लेयर** बनाते हैं वे आपके AWS खाते के लिए **निजी** होती हैं। आप एक लेयर को अन्य खातों के साथ **साझा** करने या लेयर को **सार्वजनिक** बनाने का विकल्प चुन सकते हैं। यदि आपके फ़ंक्शन एक लेयर का उपभोग करते हैं जो किसी अन्य खाते द्वारा प्रकाशित की गई है, तो आपके फ़ंक्शन **लेयर संस्करण का उपयोग जारी रख सकते हैं** जब इसे हटा दिया गया हो, या जब आपकी लेयर तक पहुँचने की अनुमति रद्द कर दी गई हो। हालाँकि, आप एक नई फ़ंक्शन नहीं बना सकते या हटाए गए लेयर संस्करण का उपयोग करते हुए फ़ंक्शंस को अपडेट नहीं कर सकते। कंटेनर छवि के रूप में तैनात फ़ंक्शन लेयर का उपयोग नहीं करते हैं। इसके बजाय, आप छवि बनाने के समय अपनी पसंद का रनटाइम, पुस्तकालय और अन्य निर्भरताएँ कंटेनर छवि में पैकेज करते हैं। ### Lambda Extensions Lambda एक्सटेंशन कार्यों को विभिन्न **निगरानी, अवलोकन, सुरक्षा, और शासन उपकरणों** के साथ एकीकृत करके बढ़ाते हैं। ये एक्सटेंशन, [.zip संग्रह का उपयोग करके Lambda लेयर्स](https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html) के माध्यम से जोड़े जाते हैं या [कंटेनर छवि तैनाती में शामिल होते हैं](https://aws.amazon.com/blogs/compute/working-with-lambda-layers-and-extensions-in-container-images/), दो मोड में कार्य करते हैं: **आंतरिक** और **बाहरी**। - **आंतरिक एक्सटेंशन** रनटाइम प्रक्रिया के साथ विलीन होते हैं, इसके स्टार्टअप को **भाषा-विशिष्ट पर्यावरण चर** और **रैपर स्क्रिप्ट** का उपयोग करके संशोधित करते हैं। यह अनुकूलन कई रनटाइम्स पर लागू होता है, जिसमें **Java Correto 8 और 11, Node.js 10 और 12, और .NET Core 3.1** शामिल हैं। - **बाहरी एक्सटेंशन** अलग प्रक्रियाओं के रूप में चलते हैं, Lambda फ़ंक्शन के जीवन चक्र के साथ संचालन संरेखण बनाए रखते हैं। वे विभिन्न रनटाइम्स के साथ संगत होते हैं जैसे **Node.js 10 और 12, Python 3.7 और 3.8, Ruby 2.5 और 2.7, Java Corretto 8 और 11, .NET Core 3.1**, और **कस्टम रनटाइम**। ### Enumeration ```bash aws lambda get-account-settings # List functions and get extra config info aws lambda list-functions aws lambda get-function --function-name aws lambda get-function-configuration --function-name aws lambda list-function-event-invoke-configs --function-name ## Check for creds in env vars aws lambda list-functions | jq '.Functions[].Environment' ## Download & check the source code aws lambda get-function --function-name "" --query 'Code.Location' wget -O lambda-function.zip # Get Lambda URL (if any) aws lambda list-function-url-configs --function-name aws lambda get-function-url-config --function-name # Get who has permissions to invoke the Lambda aws lambda get-policy --function-name # Versions and Aliases aws lambda list-versions-by-function --function-name aws lambda list-aliases --function-name # List layers aws lambda list-layers aws lambda list-layer-versions --layer-name aws lambda get-layer-version --layer-name --version-number aws lambda get-layer-version-by-arn --arn #Get external ARNs # List other metadata aws lambda list-event-source-mappings aws lambda list-code-signing-configs aws lambda list-functions-by-code-signing-config --code-signing-config-arn ``` ### एक लैम्ब्डा को सक्रिय करें #### मैनुअल ```bash # Invoke function aws lambda invoke --function-name FUNCTION_NAME /tmp/out ## Some functions will expect parameters, they will access them with something like: ## target_policys = event['policy_names'] ## user_name = event['user_name'] aws lambda invoke --function-name --cli-binary-format raw-in-base64-out --payload '{"policy_names": ["AdministratorAccess], "user_name": "sdf"}' out.txt ``` #### उजागर URL के माध्यम से ```bash aws lambda list-function-url-configs --function-name #Get lambda URL aws lambda get-function-url-config --function-name #Get lambda URL ``` #### URL के माध्यम से Lambda फ़ंक्शन कॉल करें अब संभावित lambda फ़ंक्शंस को निष्पादित करने का समय है: ``` aws --region us-west-2 --profile level6 lambda list-functions ``` ![](<../../../images/image (262).png>) एक लम्ब्डा फ़ंक्शन "Level6" उपलब्ध है। चलिए पता करते हैं कि इसे कैसे कॉल किया जाए: ```bash aws --region us-west-2 --profile level6 lambda get-policy --function-name Level6 ``` ![](<../../../images/image (102).png>) अब, जब आप नाम और ID जानते हैं, तो आप नाम प्राप्त कर सकते हैं: ```bash aws --profile level6 --region us-west-2 apigateway get-stages --rest-api-id "s33ppypa75" ``` ![](<../../../images/image (237).png>) और अंत में फ़ंक्शन को कॉल करें (ध्यान दें कि ID, Name और function-name URL में दिखाई देते हैं): [https://s33ppypa75.execute-api.us-west-2.amazonaws.com/Prod/level6](https://s33ppypa75.execute-api.us-west-2.amazonaws.com/Prod/level6) `URL:`**`https://.execute-api..amazonaws.com//`** #### अन्य ट्रिगर्स कई अन्य स्रोत हैं जो एक लैम्ब्डा को ट्रिगर कर सकते हैं
### प्रिवेस्क अगली पृष्ठ पर आप देख सकते हैं कि **Lambda अनुमतियों का दुरुपयोग करके विशेषाधिकार कैसे बढ़ाएं**: {{#ref}} ../aws-privilege-escalation/aws-lambda-privesc.md {{#endref}} ### अनधिकृत पहुंच {{#ref}} ../aws-unauthenticated-enum-access/aws-lambda-unauthenticated-access.md {{#endref}} ### पोस्ट एक्सप्लोइटेशन {{#ref}} ../aws-post-exploitation/aws-lambda-post-exploitation/ {{#endref}} ### स्थिरता {{#ref}} ../aws-persistence/aws-lambda-persistence/ {{#endref}} ## संदर्भ - [https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-concepts.html#gettingstarted-concepts-layer](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-concepts.html#gettingstarted-concepts-layer) - [https://aws.amazon.com/blogs/compute/building-extensions-for-aws-lambda-in-preview/](https://aws.amazon.com/blogs/compute/building-extensions-for-aws-lambda-in-preview/) {{#include ../../../banners/hacktricks-training.md}}