AWS - API Gateway Enum
Reading time: 12 minutes
tip
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
Azure हैकिंग सीखें और अभ्यास करें:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाओं की जांच करें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमें Twitter 🐦 @hacktricks_live** पर फॉलो करें।**
- हैकिंग ट्रिक्स साझा करें, PRs को HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में सबमिट करके।
API Gateway
Basic Information
AWS API Gateway एक व्यापक सेवा है जो Amazon Web Services (AWS) द्वारा पेश की गई है, जिसे डेवलपर्स को बड़े पैमाने पर APIs बनाने, प्रकाशित करने और देखरेख करने के लिए डिज़ाइन किया गया है। यह एक एप्लिकेशन के लिए एक प्रवेश बिंदु के रूप में कार्य करता है, जिससे डेवलपर्स को नियमों और प्रक्रियाओं का एक ढांचा स्थापित करने की अनुमति मिलती है। यह ढांचा बाहरी उपयोगकर्ताओं को एप्लिकेशन के भीतर कुछ डेटा या कार्यक्षमताओं तक पहुँचने को नियंत्रित करता है।
API Gateway आपको यह परिभाषित करने की अनुमति देता है कि आपके APIs के लिए अनुरोधों को कैसे संभाला जाना चाहिए, और यह विशिष्ट विधियों (जैसे, GET, POST, PUT, DELETE) और संसाधनों के साथ कस्टम API एंडपॉइंट बनाने में सक्षम है। यह डेवलपर्स के लिए अपने एप्लिकेशनों से आपके APIs को कॉल करना आसान बनाने के लिए क्लाइंट SDKs (सॉफ़्टवेयर विकास किट) भी उत्पन्न कर सकता है।
API Gateways Types
- HTTP API: OIDC और OAuth2 जैसी अंतर्निहित सुविधाओं के साथ कम विलंबता और लागत प्रभावी REST APIs बनाएं, और मूल CORS समर्थन। निम्नलिखित के साथ काम करता है: Lambda, HTTP बैकएंड।
- WebSocket API: चैट एप्लिकेशन या डैशबोर्ड जैसे वास्तविक समय के उपयोग के मामलों के लिए स्थायी कनेक्शनों का उपयोग करके एक WebSocket API बनाएं। निम्नलिखित के साथ काम करता है: Lambda, HTTP, AWS सेवाएँ।
- REST API: एक REST API विकसित करें जहाँ आप अनुरोध और प्रतिक्रिया पर पूर्ण नियंत्रण प्राप्त करते हैं साथ ही API प्रबंधन क्षमताएँ। निम्नलिखित के साथ काम करता है: Lambda, HTTP, AWS सेवाएँ।
- REST API Private: एक REST API बनाएं जो केवल एक VPC के भीतर से सुलभ हो।
API Gateway Main Components
- Resources: API Gateway में, संसाधन वे घटक हैं जो आपके API की संरचना बनाते हैं। वे आपके API के विभिन्न पथों या एंडपॉइंट्स का प्रतिनिधित्व करते हैं और आपके API द्वारा समर्थित विभिन्न क्रियाओं के अनुरूप होते हैं। एक संसाधन प्रत्येक विधि है (जैसे, GET, POST, PUT, DELETE) प्रत्येक पथ के भीतर (/, या /users, या /user/{id}).
- Stages: API Gateway में स्टेज आपके API के विभिन्न संस्करणों या वातावरणों का प्रतिनिधित्व करते हैं, जैसे विकास, स्टेजिंग, या उत्पादन। आप स्टेज का उपयोग एक साथ कई संस्करणों के प्रबंधन और तैनाती के लिए कर सकते हैं, जिससे आप नए फीचर्स या बग फिक्स का परीक्षण कर सकते हैं बिना उत्पादन वातावरण को प्रभावित किए। स्टेज स्टेज वेरिएबल्स का भी समर्थन करते हैं, जो कुंजी-मूल्य जोड़े होते हैं जिन्हें आपके API के व्यवहार को वर्तमान स्टेज के आधार पर कॉन्फ़िगर करने के लिए उपयोग किया जा सकता है। उदाहरण के लिए, आप स्टेज वेरिएबल्स का उपयोग API अनुरोधों को विभिन्न Lambda कार्यों या अन्य बैकएंड सेवाओं की ओर निर्देशित करने के लिए कर सकते हैं।
- स्टेज API Gateway एंडपॉइंट के URL की शुरुआत में संकेतित होता है।
- Authorizers: API Gateway में ऑथराइज़र आपके API तक पहुँच को नियंत्रित करने के लिए जिम्मेदार होते हैं, कॉलर की पहचान को सत्यापित करके अनुरोध को आगे बढ़ाने की अनुमति देने से पहले। आप AWS Lambda कार्यों का उपयोग कस्टम ऑथराइज़र के रूप में कर सकते हैं, जिससे आप अपनी स्वयं की प्रमाणीकरण और प्राधिकरण लॉजिक लागू कर सकते हैं। जब एक अनुरोध आता है, API Gateway अनुरोध के प्रमाणीकरण टोकन को Lambda ऑथराइज़र को पास करता है, जो टोकन को संसाधित करता है और एक IAM नीति लौटाता है जो निर्धारित करती है कि कॉलर को कौन सी क्रियाएँ करने की अनुमति है। API Gateway निर्मित ऑथराइज़र का भी समर्थन करता है, जैसे AWS पहचान और पहुँच प्रबंधन (IAM) और Amazon Cognito।
- Resource Policy: API Gateway में एक संसाधन नीति एक JSON दस्तावेज़ है जो आपके API तक पहुँचने के लिए अनुमतियों को परिभाषित करता है। यह एक IAM नीति के समान है लेकिन विशेष रूप से API Gateway के लिए तैयार की गई है। आप एक संसाधन नीति का उपयोग यह नियंत्रित करने के लिए कर सकते हैं कि कौन आपके API तक पहुँच सकता है, वे कौन सी विधियाँ कॉल कर सकते हैं, और वे किन IP पते या VPCs से कनेक्ट कर सकते हैं। संसाधन नीतियों का उपयोग ऑथराइज़र्स के साथ संयोजन में किया जा सकता है ताकि आपके API के लिए बारीक पहुँच नियंत्रण प्रदान किया जा सके।
- प्रभाव डालने के लिए API को संसाधन नीति में संशोधन के बाद फिर से तैनात करने की आवश्यकता होती है।
Logging
डिफ़ॉल्ट रूप से, CloudWatch Logs बंद हैं, Access Logging बंद है, और X-Ray ट्रेसिंग भी बंद है।
Enumeration
tip
ध्यान दें कि संसाधनों को सूचीबद्ध करने के लिए AWS APIs (apigateway
और apigatewayv2
) में आपको केवल एक अनुमति की आवश्यकता है और केवल पढ़ने की अनुमति जो दी जा सकती है वह है apigateway:GET
, इसके साथ आप सब कुछ सूचीबद्ध कर सकते हैं।
# 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
API गेटवे एंडपॉइंट्स तक पहुँचने के लिए विभिन्न प्राधिकरण
संसाधन नीति
यह संभव है कि संसाधन नीतियों का उपयोग यह परिभाषित करने के लिए किया जाए कि कौन API एंडपॉइंट्स को कॉल कर सकता है।
निम्नलिखित उदाहरण में आप देख सकते हैं कि संकेतित IP एंडपॉइंट /resource_policy
को GET के माध्यम से कॉल नहीं कर सकता।
.png)
IAM प्राधिकर्ता
यह संभव है कि एक पथ (एक संसाधन) के अंदर एक विधि को कॉल करने के लिए IAM प्रमाणीकरण की आवश्यकता हो।
जब यह सेट किया जाता है, तो आप बिना किसी प्राधिकरण के एंडपॉइंट तक पहुँचने की कोशिश करते समय त्रुटि {"message":"Missing Authentication Token"}
प्राप्त करेंगे।
ऐप्लिकेशन द्वारा अपेक्षित टोकन उत्पन्न करने का एक आसान तरीका curl का उपयोग करना है।
$ curl -X <method> https://<api-id>.execute-api.<region>.amazonaws.com/<stage>/<resource> --user <AWS_ACCESS_KEY>:<AWS_SECRET_KEY> --aws-sigv4 "aws:amz:<region>:execute-api"
एक और तरीका है Postman के अंदर Authorization
प्रकार AWS Signature
का उपयोग करना।
.png)
जिस खाते का आप उपयोग करना चाहते हैं, उसके accessKey और SecretKey सेट करें और आप API endpoint के खिलाफ प्रमाणित कर सकते हैं।
दोनों विधियाँ एक Authorization header उत्पन्न करेंगी जैसे:
AWS4-HMAC-SHA256 Credential=AKIAYY7XU6ECUDOTWB7W/20220726/us-east-1/execute-api/aws4_request, SignedHeaders=host;x-amz-date, Signature=9f35579fa85c0d089c5a939e3d711362e92641e8c14cc571df8c71b4bc62a5c2
ध्यान दें कि अन्य मामलों में Authorizer को खराब कोडित किया गया हो सकता है और Authorization header के अंदर कुछ भी भेजने से छिपी हुई सामग्री को देखने की अनुमति मिल जाएगी।
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)
कस्टम लैम्ब्डा ऑथराइज़र
यह संभव है कि एक लैम्ब्डा का उपयोग किया जाए जो दिए गए टोकन के आधार पर IAM नीति लौटाएगा जो यह दर्शाती है कि उपयोगकर्ता API एंडपॉइंट को कॉल करने के लिए अधिकृत है।
आप प्रत्येक संसाधन विधि को सेट कर सकते हैं जो ऑथराइज़र का उपयोग करेगी।
लैम्ब्डा ऑथराइज़र कोड उदाहरण
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
इसे कुछ इस तरह कॉल करें:
curl "https://jhhqafgh6f.execute-api.eu-west-1.amazonaws.com/prod/custom_auth" -H 'Authorization: your-secret-token'
warning
Lambda कोड के आधार पर, यह प्राधिकरण कमजोर हो सकता है
ध्यान दें कि यदि एक deny policy उत्पन्न और लौटाई जाती है तो API Gateway द्वारा लौटाई गई त्रुटि है: {"Message":"User is not authorized to access this resource with an explicit deny"}
इस तरह आप इस प्राधिकरण की पहचान कर सकते हैं।
आवश्यक API कुंजी
यह संभव है कि API एंडपॉइंट सेट करें जो एक मान्य API कुंजी की आवश्यकता हो।
.png)
API Gateway पोर्टल में API कुंजी उत्पन्न करना संभव है और यहां तक कि यह भी सेट करना कि इसे कितनी बार उपयोग किया जा सकता है (प्रति सेकंड अनुरोधों और प्रति माह अनुरोधों के संदर्भ में)।
API कुंजी को काम करने के लिए, आपको इसे Usage Plan में जोड़ना होगा, यह उपयोग योजना API Stage में जोड़ी जानी चाहिए और संबंधित API स्टेज को endpoint के लिए एक method throttling कॉन्फ़िगर किया जाना चाहिए जो API कुंजी की आवश्यकता है:
.png)
अनधिकृत पहुंच
AWS - API Gateway Unauthenticated Enum
Privesc
Post Exploitation
AWS - API Gateway Post Exploitation
Persistence
tip
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
Azure हैकिंग सीखें और अभ्यास करें:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाओं की जांच करें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमें Twitter 🐦 @hacktricks_live** पर फॉलो करें।**
- हैकिंग ट्रिक्स साझा करें, PRs को HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में सबमिट करके।