AWS - STS Post Exploitation

Tip

Aprende y practica AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Apoya a HackTricks

STS

Para más información:

AWS - IAM, Identity Center & SSO Enum

Desde IAM Creds a la consola

Si has conseguido obtener algunas credenciales IAM, quizá te interese acceder a la consola web usando las siguientes herramientas.
Ten en cuenta que el usuario/rol debe tener el permiso sts:GetFederationToken.

Script personalizado

El siguiente script usará el perfil por defecto y una ubicación AWS por defecto (no gov y no cn) para darte una URL firmada que puedes usar para iniciar sesión en la consola web:

# Get federated creds (you must indicate a policy or they won't have any perms)
## Even if you don't have Admin access you can indicate that policy to make sure you get all your privileges
## Don't forget to use [--profile <prof_name>] in the first line if you need to
output=$(aws sts get-federation-token --name consoler --policy-arns arn=arn:aws:iam::aws:policy/AdministratorAccess)

if [ $? -ne 0 ]; then
echo "The command 'aws sts get-federation-token --name consoler' failed with exit status $status"
exit $status
fi

# Parse the output
session_id=$(echo $output | jq -r '.Credentials.AccessKeyId')
session_key=$(echo $output | jq -r '.Credentials.SecretAccessKey')
session_token=$(echo $output | jq -r '.Credentials.SessionToken')

# Construct the JSON credentials string
json_creds=$(echo -n "{\"sessionId\":\"$session_id\",\"sessionKey\":\"$session_key\",\"sessionToken\":\"$session_token\"}")

# Define the AWS federation endpoint
federation_endpoint="https://signin.aws.amazon.com/federation"

# Make the HTTP request to get the sign-in token
resp=$(curl -s "$federation_endpoint" \
--get \
--data-urlencode "Action=getSigninToken" \
--data-urlencode "SessionDuration=43200" \
--data-urlencode "Session=$json_creds"
)
signin_token=$(echo -n $resp | jq -r '.SigninToken' | tr -d '\n' | jq -sRr @uri)


# Give the URL to login
echo -n "https://signin.aws.amazon.com/federation?Action=login&Issuer=example.com&Destination=https%3A%2F%2Fconsole.aws.amazon.com%2F&SigninToken=$signin_token"

aws_consoler

Puedes generar un enlace a la consola web con https://github.com/NetSPI/aws_consoler.

cd /tmp
python3 -m venv env
source ./env/bin/activate
pip install aws-consoler
aws_consoler [params...] #This will generate a link to login into the console

Warning

Asegúrate de que el usuario IAM tenga el permiso sts:GetFederationToken, o proporciona un rol para asumir.

aws-vault

aws-vault es una herramienta para almacenar y acceder de forma segura a las credenciales de AWS en un entorno de desarrollo.

aws-vault list
aws-vault exec jonsmith -- aws s3 ls # Execute aws cli with jonsmith creds
aws-vault login jonsmith # Open a browser logged as jonsmith

Note

También puedes usar aws-vault para obtener una sesión de consola del navegador

Desde la consola web a credenciales IAM

La extensión del navegador https://github.com/AI-redteam/clier es capaz de interceptar desde la red credenciales IAM antes de que sean protegidas en la memoria del navegador.

Evadir restricciones de User-Agent desde Python

Si existe una restricción para realizar ciertas acciones basada en el user agent usado (como restringir el uso de python boto3 library en función del user agent) es posible usar la técnica anterior para conectarse a la consola web vía un navegador, o se podría directamente modificar el boto3 user-agent haciendo:

# Shared by ex16x41
# Create a client
session = boto3.Session(profile_name="lab6")
client = session.client("secretsmanager", region_name="us-east-1")

# Change user agent of the client
client.meta.events.register( 'before-call.secretsmanager.GetSecretValue', lambda params, **kwargs: params['headers'].update({'User-Agent': 'my-custom-tool'}) )

# Perform the action
response = client.get_secret_value(SecretId="flag_secret") print(response['SecretString'])

sts:GetFederationToken

Con este permiso es posible crear una identidad federada para el usuario que la ejecuta, limitada a los permisos que tenga dicho usuario.

aws sts get-federation-token --name <username>

El token devuelto por sts:GetFederationToken pertenece a la identidad federada del usuario que realiza la llamada, pero con permisos restringidos. Incluso si el usuario tiene privilegios de administrador, ciertas acciones, como listar usuarios de IAM o adjuntar políticas, no se pueden realizar mediante el token federado.

Además, este método es algo más sigiloso, ya que el usuario federado no aparece en el AWS Portal; solo puede observarse a través de los logs de CloudTrail o de herramientas de monitorización.

Tip

Aprende y practica AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Apoya a HackTricks