अपने हैकिंग ट्रिक्स साझा करें, HackTricks और HackTricks Cloud github repos में PRs सबमिट करके।
API गेटवे
मौलिक जानकारी
AWS API गेटवे एक व्यापक सेवा है जो डेवलपरों के लिए डिज़ाइन की गई है ताकि वे बड़े पैमाने पर API बना सकें, प्रकाशित कर सकें, और पर्यवेक्षण कर सकें। यह एक एप्लिकेशन का प्रवेश बिंदु के रूप में कार्य करता है, जो डेवलपरों को नियम और प्रक्रियाओं का एक ढांचा स्थापित करने की अनुमति देता है। यह ढांचा निर्दिष्ट करता है कि बाह्य उपयोगकर्ताओं को एप्लिकेशन के भीतर किसी विशेष डेटा या कार्यक्षमताओं तक कैसे पहुंचने की अनुमति है।
API गेटवे आपको परिभाषित करता है कि आपकी API के लिए अनुरोध कैसे संभाले जाने चाहिए, और यह विशेष विधियों (जैसे कि GET, POST, PUT, DELETE) और संसाधनों के साथ कस्टम API इंडपॉइंट बना सकता है। यह डेवलपरों को अपने एप्लिकेशन से अपनी API को कॉल करने के लिए सहज बनाने के लिए क्लाइंट SDKs (सॉफ्टवेयर डेवलपमेंट किट्स) भी उत्पन्न कर सकता है।
API गेटवे प्रकार
HTTP API: OIDC और OAuth2 जैसी सुविधाओं के साथ लो-लैटेंसी और लागत-कुशल REST API बनाएं, और मूलिक CORS समर्थन के साथ। निम्नलिखित के साथ काम करता है: Lambda, HTTP बैकएंड।
WebSocket API: चैट एप्लिकेशन या डैशबोर्ड जैसे वास्तविक समय के मामलों के लिए स्थायी कनेक्शन का उपयोग करके वेबसॉकेट API बनाएं। निम्नलिखित के साथ काम करता है: Lambda, HTTP, AWS सेवाएं।
REST API: REST API विकसित करें जहां आपको अनुरोध और प्रतिक्रिया पर पूरा नियंत्रण मिलता है साथ ही API प्रबंधन क्षमताएं। निम्नलिखित के साथ काम करता है: Lambda, HTTP, AWS सेवाएं।
REST API निजी: एक REST API बनाएं जिसका केवल एक VPC के भीतर से ही पहुंच होती है।
API गेटवे मुख्य घटक
संसाधन: API गेटवे में, संसाधन वे घटक हैं जो आपकी API की संरचना का निर्माण करते हैं। वे आपकी API के विभिन्न पथ या एंडपॉइंट का प्रतिनिधित्व करते हैं और आपकी API द्वारा समर्थित विभिन्न क्रियाएं का प्रतिनिधित्व करते हैं। एक संसाधन है प्रत्येक पथ (जैसे, GET, POST, PUT, DELETE) के भीतर प्रत्येक विधि (/, या /users, या /user/{id}।
स्टेज: API गेटवे में स्टेज आपकी API के विभिन्न संस्करण या वातावरण का प्रतिनिधित्व करते हैं, जैसे विकास, स्टेजिंग, या उत्पादन। आप स्टेज का उपयोग करके अपनी API के एक साथ कई संस्करणों का प्रबंधन और डिप्लॉय कर सकते हैं, जिससे आप नए सुविधाएं या बग ठीक करने का परीक्षण कर सकते हैं बिना उत्पादन वातावरण को प्रभावित किए। स्टेज भी स्टेज चरण का समर्थन करते हैं, जो कुंजी-मूल्य जोड़ी हैं जो आपकी API के वर्तमान स्टेज के आधार पर उसके व्यवहार को कॉन्फ़िगर करने के लिए उपयोग किया जा सकता है। उदाहरण के लिए, आप स्टेज चरणों का उपयोग करके सक्षम हो सकते हैं कि API अनुरोधों को विभिन्न लैम्बडा फ़ंक्शन या अन्य बैकएंड सेवाओं पर निर्देशित करने के लिए।
स्टेज को API गेटवे एंडपॉइंट के URL की शुरुआत में दिखाया जाता है।
ऑथराइज़र्स: API गेटवे में ऑथराइज़र्स जिम्मेदार हैं आपकी API तक पहुंच को नियंत्रित करने के लिए जिम्मेदार हैं जो अनुरोध को आगे बढ़ने से पहले कॉलर की पहचान सत्यापित करते हैं। आप AWS लैम्बडा फ़ंक्शन का उपयोग करके कस्टम ऑथराइज़र्स का उपयोग कर सकते हैं, जिससे आप अपनी खुद की प्रमाणीकरण और अधिकृति तर्क को लागू कर सकते हैं। जब एक अनुरोध आता है, API गेटवे अनुरोध की ऑथराइज़ेशन टोकन को लैम्बडा ऑथराइज़र को पास करता है, जो टोकन को प्रसंस्करण करता है और एक IAM नीति लौटाता है जो निर्धारित करती है कि कॉलर को कौन-कौन से कार्रवाई करने की अनुमति है। API गेटवे अधिकारियों का समर्थन भी करता है, जैसे कि AWS आइडेंटिटी और एक्सेस प्रबंधन (IAM) और अमेज़न कोग्निटो।
संसाधन नीति: API गेटवे में एक संसाधन नीति एक JSON दस्तावेज़ है जो आपकी API तक पहुंच के लिए अनुमतियों को परिभाषित करता है। यह एक IAM नीति के लिए समान है लेकिन विशेष रूप से API गेटवे के लिए तैयार किया गया है। आप एक संसाधन नीति का उपयोग करके नियंत्रित कर सकते हैं कि कौन आपकी API तक पहुंच सकता है, वे कौन-कौन सी विधियाँ कॉल कर सकते हैं, और किस IP पतों या VPC से वे कनेक्ट कर सकते हैं। संसाधन नीतियों का उपयोग ऑथराइज़र्स के साथ किया जा सकता है ताकि आपकी API के लिए फाइन-ग्रेन्ड पहुंच नियंत्रण प्रदान किया जा सके।
इसे प्रभावी बनाने के लिए API को संसाधन नीति संशोधित करने के बाद फिर से डिप्लॉय किया जाना चाहिए।
लॉगिंग
डिफ़ॉल्ट रूप से, CloudWatch लॉग बंद हैं, एक्सेस लॉगिंग बंद है, और X-रे ट्रेसिंग भ
# 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
हमें एपीआई गेटवे वर्जन 2 के लिए निम्नलिखित विवरण प्राप्त हो सकता है:
# Generic infoawsapigatewayv2get-account--awsapigatewayv2get-domain-namesawsapigatewayv2get-domain-name--domain-name<name>awsapigatewayv2get-usage-plans--awsapigatewayv2get-vpc-linksawsapigatewayv2get-client-certificates--# 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 Gateway एंडपॉइंट तक पहुंचने के लिए विभिन्न अधिकारण
संसाधन नीति
एपीआई एंडपॉइंट को कौन कॉल कर सकता है, इसे परिभाषित करने के लिए संसाधन नीतियों का उपयोग करना संभव है। निम्नलिखित उदाहरण में आप देख सकते हैं कि इंडिकेटेड आईपी कॉल नहीं कर सकता है एंडपॉइंट /resource_policy को GET के माध्यम से।
IAM ऑथराइज़र
एक पथ (एक संसाधन) के भीतर एक विधि को यह सेट करना संभव है कि उसे कॉल करने के लिए IAM प्रमाणीकरण की आवश्यकता है।
जब यह सेट होता है, तो जब आप अधिकारण के बिना एंडपॉइंट तक पहुंचने का प्रयास करते हैं, तो आपको त्रुटि मिलेगी {"message":"Missing Authentication Token"}।
अपेक्षित टोकन को उत्पन्न करने का एक सरल तरीका एप्लिकेशन द्वारा Postman के अंदर Authorization प्रकार AWS Signature का उपयोग करना है।
उस खाते की एक्सेस की और सीक्रेट की कुंजी सेट करें जिसका आप उपयोग करना चाहते हैं और आप एपीआई एंडपॉइंट के खिलाफ प्रमाणीकरण कर सकते हैं।
एक लैम्बडा का उपयोग करना संभव है जो दिए गए टोकन पर आधारित होगा और यह बताएगा कि क्या उपयोगकर्ता 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'>
लैम्बडा कोड के आधार पर यह अधिकृति विकल्प संवेदनशील हो सकती है
</div>
ध्यान दें कि यदि **एक इनकार नीति उत्पन्न और वापस भेजी जाती है** तो API गेटवे द्वारा वापस दिया गया त्रुटि है: `{"Message":"User is not authorized to access this resource with an explicit deny"}`
इस तरह आप **इस अधिकृति** को पहचान सकते हैं।
### आवश्यक API कुंजी
यह संभव है कि API इंडपॉइंट्स को सेट करना **आवश्यक API कुंजी** को संपर्क करने के लिए।
<figure><img src="../../../.gitbook/assets/image (92) (1).png" alt=""><figcaption></figcaption></figure>
API गेटवे पोर्टल में API कुंजी उत्पन्न करना संभव है और यह भी सेट करना संभव है कि यह कितनी बार उपयोग किया जा सकता है (प्रति सेकंड और प्रति माह के अनुसार अनुरोधों में)।
एक API कुंजी को काम करने के लिए, आपको इसे एक **उपयोग योजना** में जोड़ना होगा, इस उपयोग योजना को **API स्टेज** में जोड़ना होगा और संबंधित API स्टेज को एक **विधि धीमा** कॉन्फ़िगर करना होगा जो **एंडपॉइंट** को आवश्यक API कुंजी की आवश्यकता है:
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).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>
## Privesc
<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>
## Post Exploitation
<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>
### Persistence
<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>
<details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong> के साथ जीरो से हीरो तक AWS हैकिंग सीखें!</summary>
HackTricks का समर्थन करने के अन्य तरीके:
* यदि आप अपनी कंपनी का विज्ञापन देखना चाहते हैं **HackTricks** या **HackTricks को PDF में डाउनलोड** करना चाहते हैं तो [**सब्सक्रिप्शन प्लान्स**](https://github.com/sponsors/carlospolop) देखें!
* [**आधिकारिक PEASS & HackTricks swag**](https://peass.creator-spring.com) प्राप्त करें
* हमारे विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) कलेक्शन [**The PEASS Family**](https://opensea.io/collection/the-peass-family) खोजें
* **शामिल हों** 💬 [**डिस्कॉर्ड समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या हमें **ट्विटर** पर **फॉलो** करें 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **अपने हैकिंग ट्रिक्स साझा करें** [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos को PR जमा करके।
</details>