AWS - API Gateway Enum

जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS रेड टीम एक्सपर्ट) के साथ!

HackTricks का समर्थन करने के अन्य तरीके:

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 गेटवे मुख्य घटक

  1. संसाधन: API गेटवे में, संसाधन वे घटक हैं जो आपकी API की संरचना का निर्माण करते हैं। वे आपकी API के विभिन्न पथ या एंडपॉइंट का प्रतिनिधित्व करते हैं और आपकी API द्वारा समर्थित विभिन्न क्रियाएं का प्रतिनिधित्व करते हैं। एक संसाधन है प्रत्येक पथ (जैसे, GET, POST, PUT, DELETE) के भीतर प्रत्येक विधि (/, या /users, या /user/{id}।

  2. स्टेज: API गेटवे में स्टेज आपकी API के विभिन्न संस्करण या वातावरण का प्रतिनिधित्व करते हैं, जैसे विकास, स्टेजिंग, या उत्पादन। आप स्टेज का उपयोग करके अपनी API के एक साथ कई संस्करणों का प्रबंधन और डिप्लॉय कर सकते हैं, जिससे आप नए सुविधाएं या बग ठीक करने का परीक्षण कर सकते हैं बिना उत्पादन वातावरण को प्रभावित किए। स्टेज भी स्टेज चरण का समर्थन करते हैं, जो कुंजी-मूल्य जोड़ी हैं जो आपकी API के वर्तमान स्टेज के आधार पर उसके व्यवहार को कॉन्फ़िगर करने के लिए उपयोग किया जा सकता है। उदाहरण के लिए, आप स्टेज चरणों का उपयोग करके सक्षम हो सकते हैं कि API अनुरोधों को विभिन्न लैम्बडा फ़ंक्शन या अन्य बैकएंड सेवाओं पर निर्देशित करने के लिए।

  • स्टेज को API गेटवे एंडपॉइंट के URL की शुरुआत में दिखाया जाता है।

  1. ऑथराइज़र्स: API गेटवे में ऑथराइज़र्स जिम्मेदार हैं आपकी API तक पहुंच को नियंत्रित करने के लिए जिम्मेदार हैं जो अनुरोध को आगे बढ़ने से पहले कॉलर की पहचान सत्यापित करते हैं। आप AWS लैम्बडा फ़ंक्शन का उपयोग करके कस्टम ऑथराइज़र्स का उपयोग कर सकते हैं, जिससे आप अपनी खुद की प्रमाणीकरण और अधिकृति तर्क को लागू कर सकते हैं। जब एक अनुरोध आता है, API गेटवे अनुरोध की ऑथराइज़ेशन टोकन को लैम्बडा ऑथराइज़र को पास करता है, जो टोकन को प्रसंस्करण करता है और एक IAM नीति लौटाता है जो निर्धारित करती है कि कॉलर को कौन-कौन से कार्रवाई करने की अनुमति है। API गेटवे अधिकारियों का समर्थन भी करता है, जैसे कि AWS आइडेंटिटी और एक्सेस प्रबंधन (IAM) और अमेज़न कोग्निटो

  2. संसाधन नीति: API गेटवे में एक संसाधन नीति एक JSON दस्तावेज़ है जो आपकी API तक पहुंच के लिए अनुमतियों को परिभाषित करता है। यह एक IAM नीति के लिए समान है लेकिन विशेष रूप से API गेटवे के लिए तैयार किया गया है। आप एक संसाधन नीति का उपयोग करके नियंत्रित कर सकते हैं कि कौन आपकी API तक पहुंच सकता है, वे कौन-कौन सी विधियाँ कॉल कर सकते हैं, और किस IP पतों या VPC से वे कनेक्ट कर सकते हैं। संसाधन नीतियों का उपयोग ऑथराइज़र्स के साथ किया जा सकता है ताकि आपकी API के लिए फाइन-ग्रेन्ड पहुंच नियंत्रण प्रदान किया जा सके।

  • इसे प्रभावी बनाने के लिए API को संसाधन नीति संशोधित करने के बाद फिर से डिप्लॉय किया जाना चाहिए

लॉगिंग

डिफ़ॉल्ट रूप से, CloudWatch लॉग बंद हैं, एक्सेस लॉगिंग बंद है, और X-रे ट्रेसिंग

# Generic info
aws apigateway get-account
aws apigateway get-domain-names
aws apigateway get-usage-plans
aws apigateway get-vpc-links
aws apigateway get-client-certificates

# Enumerate APIs
aws apigateway get-rest-apis # This will also show the resource policy (if any)
## Get stages
aws apigateway get-stages --rest-api-id <id>
## Get resources
aws apigateway get-resources --rest-api-id <id>
## Get API resource action per HTTP verb (check authorizers and api key required)
aws apigateway get-method --http-method GET --rest-api-id <api-id> --resource-id <resource-id>

## Call API
https://<api-id>.execute-api.<region>.amazonaws.com/<stage>/<resource>
## API authorizers
aws apigateway get-authorizers --rest-api-id <id>
## Models
aws apigateway get-models --rest-api-id <id>
## More info
aws apigateway get-gateway-responses --rest-api-id <id>
aws apigateway get-request-validators --rest-api-id <id>
aws apigateway get-deployments --rest-api-id <id>

# Get api keys generated
aws apigateway get-api-keys --include-value
aws apigateway get-api-key --api-key <id> --include-value # Get just 1
## Example use API key
curl -X GET -H "x-api-key: AJE&Ygenu4[..]" https://e83uuftdi8.execute-api.us-east-1.amazonaws.com/dev/test
## Usage plans
aws apigateway get-usage-plans #Get limit use info
aws apigateway get-usage-plan-keys --usage-plan-id <plan_id> #Get clear text values of api keys
aws apigateway get-usage-plan-key --usage-plan-id <plan_id> --key-id <key_id>
###Already consumed
aws apigateway get-usage --usage-plan-id <plan_id> --start-date 2023-07-01 --end-date 2023-07-12

हमें एपीआई गेटवे वर्जन 2 के लिए निम्नलिखित विवरण प्राप्त हो सकता है:

# Generic info
aws apigatewayv2 get-account --
aws apigatewayv2 get-domain-names
aws apigatewayv2 get-domain-name --domain-name <name>
aws apigatewayv2 get-usage-plans --
aws apigatewayv2 get-vpc-links
aws apigatewayv2 get-client-certificates --

# Enumerate APIs
aws apigatewayv2 get-apis # This will also show the resource policy (if any)
aws apigatewayv2 get-api --api-id <id>

## Get all the info from an api at once
aws apigatewayv2 export-api --api-id <id> --output-type YAML --specification OAS30 /tmp/api.yaml

## Get stages
aws apigatewayv2 get-stages --api-id <id>

## Get routes
aws apigatewayv2 get-routes --api-id <id>
aws apigatewayv2 get-route --api-id <id> --route-id <route-id>

## Get deployments
aws apigatewayv2 get-deployments --api-id <id>
aws apigatewayv2 get-deployment --api-id <id> --deployment-id <dep-id>

## Get integrations
aws apigatewayv2 get-integrations --api-id <id>

## Get authorizers
aws apigatewayv2 get-authorizers --api-id <id>
aws apigatewayv2 get-authorizer --api-id <id> --authorizer-id <uth-id>

## Get domain mappings
aws apigatewayv2 get-api-mappings --api-id <id> --domain-name <dom-name>
aws apigatewayv2 get-api-mapping --api-id <id> --api-mapping-id <map-id> --domain-name <dom-name>

## Get models
aws apigatewayv2 get-models --api-id <id>

## Call API
https://<api-id>.execute-api.<region>.amazonaws.com/<stage>/<resource>

API Gateway एंडपॉइंट तक पहुंचने के लिए विभिन्न अधिकारण

संसाधन नीति

एपीआई एंडपॉइंट को कौन कॉल कर सकता है, इसे परिभाषित करने के लिए संसाधन नीतियों का उपयोग करना संभव है। निम्नलिखित उदाहरण में आप देख सकते हैं कि इंडिकेटेड आईपी कॉल नहीं कर सकता है एंडपॉइंट /resource_policy को GET के माध्यम से।

IAM ऑथराइज़र

एक पथ (एक संसाधन) के भीतर एक विधि को यह सेट करना संभव है कि उसे कॉल करने के लिए IAM प्रमाणीकरण की आवश्यकता है।

जब यह सेट होता है, तो जब आप अधिकारण के बिना एंडपॉइंट तक पहुंचने का प्रयास करते हैं, तो आपको त्रुटि मिलेगी {"message":"Missing Authentication Token"}

अपेक्षित टोकन को उत्पन्न करने का एक सरल तरीका एप्लिकेशन द्वारा Postman के अंदर Authorization प्रकार AWS Signature का उपयोग करना है।

उस खाते की एक्सेस की और सीक्रेट की कुंजी सेट करें जिसका आप उपयोग करना चाहते हैं और आप एपीआई एंडपॉइंट के खिलाफ प्रमाणीकरण कर सकते हैं।

यह एक Authorization हेडर उत्पन्न करेगा जैसे:

AWS4-HMAC-SHA256 Credential=AKIAYY7XU6ECUDOTWB7W/20220726/us-east-1/execute-api/aws4_request, SignedHeaders=host;x-amz-date, Signature=9f35579fa85c0d089c5a939e3d711362e92641e8c14cc571df8c71b4bc62a5c2

Python का उपयोग करके अनुरोध हस्ताक्षरित करना


pip install requests
pip install requests-aws4auth
pip install boto3

import boto3
import requests
from requests_aws4auth import AWS4Auth

region = 'us-east-1'  # Region
service = 'execute-api'
access_key = 'YOUR_ACCESS_KEY'
secret_key = 'YOUR_SECRET_KEY'

url = 'https://<apiid>.execute-api.us-east-1.amazonaws.com/<stage>/<resource>'

session = boto3.Session(aws_access_key_id=access_key, aws_secret_access_key=secret_key)
credentials = session.get_credentials()
awsauth = AWS4Auth(credentials.access_key, credentials.secret_key, region, service, session_token=credentials.token)

response = requests.get(url, auth=awsauth)

print(response.text)

कस्टम लैम्बडा ऑथराइज़र

एक लैम्बडा का उपयोग करना संभव है जो दिए गए टोकन पर आधारित होगा और यह बताएगा कि क्या उपयोगकर्ता API एंडपॉइंट को कॉल करने की अधिकारी हैं। आप प्रत्येक संसाधन विधि को सेट कर सकते हैं जो ऑथराइज़र का उपयोग कर रही होगी।

लैम्बडा ऑथराइज़र कोड उदाहरण

```python import json

def lambda_handler(event, context): token = event['authorizationToken'] method_arn = event['methodArn']

if not token: return { 'statusCode': 401, 'body': 'Unauthorized' }

try:

Replace this with your own token validation logic

if token == "your-secret-token": return generate_policy('user', 'Allow', method_arn) else: return generate_policy('user', 'Deny', method_arn) except Exception as e: print(e) return { 'statusCode': 500, 'body': 'Internal Server Error' }

def generate_policy(principal_id, effect, resource): policy = { 'principalId': principal_id, 'policyDocument': { 'Version': '2012-10-17', 'Statement': [ { 'Action': 'execute-api:Invoke', 'Effect': effect, 'Resource': resource } ] } } return policy

</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>

Last updated