AWS API Gateway एक व्यापक सेवा है जो Amazon Web Services (AWS) द्वारा पेश की गई है, जो डेवलपर्स को बड़े पैमाने पर APIs बनाने, प्रकाशित करने और देखरेख करने के लिए डिज़ाइन की गई है। यह एक एप्लिकेशन के लिए एक प्रवेश बिंदु के रूप में कार्य करता है, जिससे डेवलपर्स को नियमों और प्रक्रियाओं का एक ढांचा स्थापित करने की अनुमति मिलती है। यह ढांचा बाहरी उपयोगकर्ताओं को एप्लिकेशन के भीतर कुछ डेटा या कार्यक्षमताओं तक पहुंच को नियंत्रित करता है।
API Gateway आपको यह परिभाषित करने की अनुमति देता है कि आपके APIs के लिए अनुरोधों को कैसे संभाला जाना चाहिए, और यह विशिष्ट विधियों (जैसे, GET, POST, PUT, DELETE) और संसाधनों के साथ कस्टम API एंडपॉइंट बनाने में सक्षम है। यह डेवलपर्स के लिए अपने एप्लिकेशन से आपके APIs को कॉल करना आसान बनाने के लिए क्लाइंट SDKs (सॉफ़्टवेयर विकास किट) भी उत्पन्न कर सकता है।
API Gateways के प्रकार
HTTP API: OIDC और OAuth2 जैसी अंतर्निहित सुविधाओं और मूल CORS समर्थन के साथ कम-लेटेंसी और लागत-कुशल REST APIs बनाएं। निम्नलिखित के साथ काम करता है: Lambda, HTTP बैकएंड।
WebSocket API: चैट एप्लिकेशन या डैशबोर्ड जैसे वास्तविक समय के उपयोग के मामलों के लिए स्थायी कनेक्शनों का उपयोग करके एक WebSocket API बनाएं। निम्नलिखित के साथ काम करता है: Lambda, HTTP, AWS सेवाएँ।
REST API: एक REST API विकसित करें जहाँ आप अनुरोध और प्रतिक्रिया पर पूर्ण नियंत्रण प्राप्त करते हैं साथ ही API प्रबंधन क्षमताएँ। निम्नलिखित के साथ काम करता है: Lambda, HTTP, AWS सेवाएँ।
REST API प्राइवेट: एक REST API बनाएं जो केवल एक VPC के भीतर से सुलभ हो।
API Gateway के मुख्य घटक
संसाधन: API Gateway में, संसाधन वे घटक हैं जो आपके API की संरचना बनाते हैं। वे आपके API के विभिन्न पथों या एंडपॉइंट्स का प्रतिनिधित्व करते हैं और आपके API द्वारा समर्थित विभिन्न क्रियाओं के अनुरूप होते हैं। एक संसाधन प्रत्येक विधि है (जैसे, GET, POST, PUT, DELETE) प्रत्येक पथ के भीतर (/, या /users, या /user/{id}).
स्टेज: API Gateway में स्टेज आपके API के विभिन्न संस्करणों या वातावरणों का प्रतिनिधित्व करते हैं, जैसे विकास, स्टेजिंग, या उत्पादन। आप स्टेज का उपयोग करके एक साथ कई संस्करणों का प्रबंधन और तैनात कर सकते हैं, जिससे आप नए फीचर्स या बग फिक्स का परीक्षण कर सकते हैं बिना उत्पादन वातावरण को प्रभावित किए। स्टेज स्टेज वेरिएबल्स का भी समर्थन करते हैं, जो कुंजी-मूल्य जोड़े होते हैं जिन्हें आपके API के व्यवहार को वर्तमान स्टेज के आधार पर कॉन्फ़िगर करने के लिए उपयोग किया जा सकता है। उदाहरण के लिए, आप स्टेज वेरिएबल्स का उपयोग API अनुरोधों को विभिन्न Lambda कार्यों या अन्य बैकएंड सेवाओं की ओर निर्देशित करने के लिए कर सकते हैं।
स्टेज API Gateway एंडपॉइंट के URL की शुरुआत में संकेतित होता है।
ऑथराइज़र: API Gateway में ऑथराइज़र आपके API तक पहुँच को नियंत्रित करने के लिए जिम्मेदार होते हैं, कॉलर की पहचान को सत्यापित करके अनुरोध को आगे बढ़ाने की अनुमति देने से पहले। आप AWS Lambda कार्यों का उपयोग कस्टम ऑथराइज़र के रूप में कर सकते हैं, जो आपको अपनी स्वयं की प्रमाणीकरण और प्राधिकरण लॉजिक लागू करने की अनुमति देता है। जब एक अनुरोध आता है, तो API Gateway अनुरोध के प्रमाणीकरण टोकन को Lambda ऑथराइज़र को पास करता है, जो टोकन को संसाधित करता है और एक IAM नीति लौटाता है जो निर्धारित करती है कि कॉलर को कौन सी क्रियाएँ करने की अनुमति है। API Gateway बिल्ट-इन ऑथराइज़र का भी समर्थन करता है, जैसे AWS पहचान और पहुंच प्रबंधन (IAM) और Amazon Cognito।
संसाधन नीति: API Gateway में एक संसाधन नीति एक JSON दस्तावेज़ है जो आपके API तक पहुँचने के लिए अनुमतियों को परिभाषित करता है। यह एक IAM नीति के समान है लेकिन विशेष रूप से API Gateway के लिए तैयार की गई है। आप संसाधन नीति का उपयोग यह नियंत्रित करने के लिए कर सकते हैं कि कौन आपके API तक पहुँच सकता है, वे कौन सी विधियाँ कॉल कर सकते हैं, और वे किन IP पतों या VPCs से कनेक्ट कर सकते हैं। संसाधन नीतियों का उपयोग ऑथराइज़र के साथ मिलकर आपके API के लिए बारीक पहुँच नियंत्रण प्रदान करने के लिए किया जा सकता है।
प्रभाव डालने के लिए API को संसाधन नीति में संशोधन के बाद फिर से तैनात करने की आवश्यकता है।
लॉगिंग
डिफ़ॉल्ट रूप से, CloudWatch Logsबंद हैं, एक्सेस लॉगिंगबंद है, और X-Ray ट्रेसिंग भी बंद है।
एनुमरेशन
ध्यान दें कि संसाधनों को एनुमरेट करने के लिए AWS APIs (apigateway और apigatewayv2) में आपको केवल एक अनुमति की आवश्यकता है और केवल पढ़ने की अनुमति जो दी जा सकती है वह है apigateway:GET, इसके साथ आप सब कुछ एनुमरेट कर सकते हैं।
# Generic infoawsapigatewayget-accountawsapigatewayget-domain-namesawsapigatewayget-usage-plansawsapigatewayget-vpc-linksawsapigatewayget-client-certificates# Enumerate APIsawsapigatewayget-rest-apis# This will also show the resource policy (if any)## Get stagesawsapigatewayget-stages--rest-api-id<id>## Get resourcesawsapigatewayget-resources--rest-api-id<id>## Get API resource action per HTTP verb (check authorizers and api key required)awsapigatewayget-method--http-methodGET--rest-api-id<api-id>--resource-id<resource-id>## Call APIhttps://<api-id>.execute-api.<region>.amazonaws.com/<stage>/<resource>## API authorizersawsapigatewayget-authorizers--rest-api-id<id>## Modelsawsapigatewayget-models--rest-api-id<id>## More infoawsapigatewayget-gateway-responses--rest-api-id<id>awsapigatewayget-request-validators--rest-api-id<id>awsapigatewayget-deployments--rest-api-id<id># Get api keys generatedawsapigatewayget-api-keys--include-valueawsapigatewayget-api-key--api-key<id>--include-value# Get just 1## Example use API keycurl-XGET-H"x-api-key: AJE&Ygenu4[..]"https://e83uuftdi8.execute-api.us-east-1.amazonaws.com/dev/test## Usage plansawsapigatewayget-usage-plans#Get limit use infoawsapigatewayget-usage-plan-keys--usage-plan-id<plan_id>#Get clear text values of api keysawsapigatewayget-usage-plan-key--usage-plan-id<plan_id>--key-id<key_id>###Already consumedawsapigatewayget-usage--usage-plan-id<plan_id>--start-date2023-07-01--end-date2023-07-12
# Generic infoawsapigatewayv2get-domain-namesawsapigatewayv2get-domain-name--domain-name<name>awsapigatewayv2get-vpc-links# Enumerate APIsawsapigatewayv2get-apis# This will also show the resource policy (if any)awsapigatewayv2get-api--api-id<id>## Get all the info from an api at onceawsapigatewayv2export-api--api-id<id>--output-typeYAML--specificationOAS30/tmp/api.yaml## Get stagesawsapigatewayv2get-stages--api-id<id>## Get routesawsapigatewayv2get-routes--api-id<id>awsapigatewayv2get-route--api-id<id>--route-id<route-id>## Get deploymentsawsapigatewayv2get-deployments--api-id<id>awsapigatewayv2get-deployment--api-id<id>--deployment-id<dep-id>## Get integrationsawsapigatewayv2get-integrations--api-id<id>## Get authorizersawsapigatewayv2get-authorizers--api-id<id>awsapigatewayv2get-authorizer--api-id<id>--authorizer-id<uth-id>## Get domain mappingsawsapigatewayv2get-api-mappings--api-id<id>--domain-name<dom-name>awsapigatewayv2get-api-mapping--api-id<id>--api-mapping-id<map-id>--domain-name<dom-name>## Get modelsawsapigatewayv2get-models--api-id<id>## Call APIhttps://<api-id>.execute-api.<region>.amazonaws.com/<stage>/<resource>
API गेटवे एंडपॉइंट्स तक पहुँचने के लिए विभिन्न प्राधिकरण
संसाधन नीति
यह संभव है कि संसाधन नीतियों का उपयोग करके यह परिभाषित किया जा सके कि कौन API एंडपॉइंट्स को कॉल कर सकता है।
निम्नलिखित उदाहरण में आप देख सकते हैं कि निर्दिष्ट IP एंडपॉइंट/resource_policy को GET के माध्यम से कॉल नहीं कर सकता।
IAM प्राधिकर्ता
यह संभव है कि एक पथ (एक संसाधन) के अंदर एक विधि को कॉल करने के लिए IAM प्रमाणीकरण की आवश्यकता हो।
जब यह सेट किया जाता है, तो आप जब किसी भी प्राधिकरण के बिना एंडपॉइंट तक पहुँचने की कोशिश करते हैं, तो आपको त्रुटि {"message":"Missing Authentication Token"} प्राप्त होगी।
ऐप द्वारा अपेक्षित टोकन उत्पन्न करने का एक आसान तरीका Postman के अंदर Authorization प्रकार AWS Signature का उपयोग करना है।
आप जिस खाते का उपयोग करना चाहते हैं, उसके accessKey और SecretKey सेट करें और आप API एंडपॉइंट के खिलाफ प्रमाणीकरण कर सकते हैं।
ध्यान दें कि अन्य मामलों में Authorizer को खराब कोडित किया गया हो सकता है और Authorization header के अंदर कुछ भी भेजने से छिपी हुई सामग्री को देखने की अनुमति मिलेगी।
यह संभव है कि एक लैम्ब्डा का उपयोग किया जाए जो एक दिए गए टोकन के आधार पर IAM नीति लौटाएगा जो यह दर्शाती है कि क्या उपयोगकर्ता API एंडपॉइंट को कॉल करने के लिए अधिकृत है।
आप प्रत्येक संसाधन विधि को सेट कर सकते हैं जो लेखक का उपयोग करेगी।
</details>
इसे कुछ इस तरह से कॉल करें:
<pre class="language-bash" data-overflow="wrap"><code class="lang-bash"><strong>curl "https://jhhqafgh6f.execute-api.eu-west-1.amazonaws.com/prod/custom_auth" -H 'Authorization: your-secret-token'
</strong></code></pre>
<div data-gb-custom-block data-tag="hint" data-style='warning'>
Lambda कोड के आधार पर, यह प्राधिकरण कमजोर हो सकता है
</div>
ध्यान दें कि यदि एक **deny policy उत्पन्न और लौटाई जाती है** तो API Gateway द्वारा लौटाया गया त्रुटि संदेश है: `{"Message":"User is not authorized to access this resource with an explicit deny"}`
इस तरह आप **इस प्राधिकरण** की पहचान कर सकते हैं।
### आवश्यक API कुंजी
यह संभव है कि API एंडपॉइंट सेट करें जो **एक मान्य API कुंजी** की आवश्यकता हो।
<figure><img src="../../../.gitbook/assets/image (88).png" alt=""><figcaption></figcaption></figure>
API Gateway पोर्टल में API कुंजी उत्पन्न करना संभव है और यहां तक कि यह भी सेट करना कि इसे कितनी बार उपयोग किया जा सकता है (प्रति सेकंड अनुरोधों और प्रति माह अनुरोधों के संदर्भ में)।
API कुंजी को कार्य करने के लिए, आपको इसे **Usage Plan** में जोड़ना होगा, यह उपयोग योजना **API Stage** में जोड़ी जानी चाहिए और संबंधित API स्टेज को **endpoint** के लिए एक **method throttling** कॉन्फ़िगर किया जाना चाहिए जो API कुंजी की आवश्यकता करता है:
<figure><img src="../../../.gitbook/assets/image (198).png" alt=""><figcaption></figcaption></figure>
## अनधिकृत पहुंच
<div data-gb-custom-block data-tag="content-ref" data-url='../aws-unauthenticated-enum-access/aws-api-gateway-unauthenticated-enum.md'>
[aws-api-gateway-unauthenticated-enum.md](../aws-unauthenticated-enum-access/aws-api-gateway-unauthenticated-enum.md)
</div>
## प्रिवेस्क
<div data-gb-custom-block data-tag="content-ref" data-url='../aws-privilege-escalation/aws-apigateway-privesc.md'>
[aws-apigateway-privesc.md](../aws-privilege-escalation/aws-apigateway-privesc.md)
</div>
## पोस्ट एक्सप्लोइटेशन
<div data-gb-custom-block data-tag="content-ref" data-url='../aws-post-exploitation/aws-api-gateway-post-exploitation.md'>
[aws-api-gateway-post-exploitation.md](../aws-post-exploitation/aws-api-gateway-post-exploitation.md)
</div>
## स्थिरता
<div data-gb-custom-block data-tag="content-ref" data-url='../aws-persistence/aws-api-gateway-persistence.md'>
[aws-api-gateway-persistence.md](../aws-persistence/aws-api-gateway-persistence.md)
</div>
<div data-gb-custom-block data-tag="hint" data-style='success'>
AWS हैकिंग सीखें और अभ्यास करें:<img src="/.gitbook/assets/image.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/image.png" alt="" data-size="line">\
GCP हैकिंग सीखें और अभ्यास करें: <img src="/.gitbook/assets/image (2).png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/image (2).png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>HackTricks का समर्थन करें</summary>
* [**सदस्यता योजनाओं**](https://github.com/sponsors/carlospolop) की जांच करें!
* **हमारे** 💬 [**Discord समूह**](https://discord.gg/hRep4RUj7f) या [**telegram समूह**](https://t.me/peass) में शामिल हों या **Twitter** 🐦 पर हमें **फॉलो करें** [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **हैकिंग ट्रिक्स साझा करें और** [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) गिटहब रिपोजिटरी में PR सबमिट करें।
</details>
</div>