Skip to content

Pentesting APIs & Lambdas

#aws #lambdas #api

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

bash
aws lambda list-functions --endpoint-url http://cloud.amzcorp.local

Listar una en específico

bash
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):

bash
wget -O lambda-function.zip URL

Opción 2:

bash
awscurl --service lambda \
        --region us-east-1 \
        http://cloud.amzcorp.local/2015-03-31/functions/tracking_api/code --no-verify-ssl

Opción 3:

bash
aws configure --profile user
python
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

bash
aws lambda get-policy \                        
    --function-name tracking_api \
    --region us-east-2 \
    --endpoint-url http://cloud.amzcorp.local
bash
aws apigateway get-rest-apis \
    --region us-east-2 \
    --endpoint-url http://cloud.amzcorp.local

Invocar una lambda

bash
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

Notas personales de seguridad ofensiva.