외로운 Nova의 작업실

aws IAM Challenge write up(1~6) 본문

Cloud Pentesting/aws

aws IAM Challenge write up(1~6)

Nova_ 2023. 9. 6. 21:01

링크 : https://bigiamchallenge.com/challenge/1

 

The Big IAM Challenge

Put yourself to the test with our unique CTF challenge and boost your AWS IAM knowledge. Do you have what it takes to win The Big IAM Challenge?

bigiamchallenge.com

- Level 1

버킷 정책을 한번 보겠습니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::thebigiamchallenge-storage-9979f4b/*"
        },
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::thebigiamchallenge-storage-9979f4b",
            "Condition": {
                "StringLike": {
                    "s3:prefix": "files/*"
                }
            }
        }
    ]
}

이 버킷 정책은 모든 사용자 또는 역할에게 "thebigiamchallenge-storage-9979f4b" 버킷 내의 "files/" 접두사로 시작하는 모든 객체를 읽을 수 있는 권한을 부여합니다. 따라서 해당 버킷에 files/ 부분을 list 해보겠습니다. 아래에 awscli를 사용하면됩니다.

flag1.txt 파일이 보입니다. 이 파일명을 가지고 내용을 봐보겠습니다.

플래그가 나왔습니다. 

 

- Level 2

IAM Policy를 한번 보겠습니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": [
                "sqs:SendMessage",
                "sqs:ReceiveMessage"
            ],
            "Resource": "arn:aws:sqs:us-east-1:092297851374:wiz-tbic-analytics-sqs-queue-ca7a1b2"
        }
    ]
}

Amazon SQS (Simple Queue Service)는 메시지 대기열을 관리하는 서비스입니다. SQS에 있는 메시지를 가져올 수 있고, SQS로 메시지를 보낼 수 있습니다. 이러한 SQS 서비스에 대한 권한을 모두 허용하고 있는 것을 볼 수 있습니다. 한번 SQS에 있는 메시지를 가져와 보겠습니다.

Body 부분에 있는 URL로 접속해보겠습니다.

플래그를 찾을 수 있습니다.

 

 - Level 3

 

IAM Policy를 한번 보겠습니다.

{
    "Version": "2008-10-17",
    "Id": "Statement1",
    "Statement": [
        {
            "Sid": "Statement1",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": "SNS:Subscribe",
            "Resource": "arn:aws:sns:us-east-1:092297851374:TBICWizPushNotifications",
            "Condition": {
                "StringLike": {
                    "sns:Endpoint": "*@tbic.wiz.io"
                }
            }
        }
    ]
}

Amazon SNS 는 SQS와 비슷한 메시지 전달 서비스입니다. 하지만 SQS는 큐에 메시지를 저장하고 어플리케이션이 요청할때 메시지를 받아가지만 SNS의 경우 메시지가 전달되면 브로드캐스트로 뿌려주는 특징을 갖고있습니다. 

또한, 정책에서 이메일 도메인이 @tbic.wiz.io만이 구독할 수 있게 되어 있기에 이를 활용해서 구독해주겠습니다.

드림핵으로 구독을 한번 받아보겠습니다.

명령어로 구독을 해주면

POST 방식으로 요청을 받게됩니다. 이제 Subscribe URL로 접속하여 구독을 확인합니다.

그러면 아래와 같이 플래그를 받을 수 있습니다.

 

- Level 4

 

IAM 정책을 보겠습니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::thebigiamchallenge-admin-storage-abf1321/*"
        },
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::thebigiamchallenge-admin-storage-abf1321",
            "Condition": {
                "StringLike": {
                    "s3:prefix": "files/*"
                },
                "ForAllValues:StringLike": {
                    "aws:PrincipalArn": "arn:aws:iam::133713371337:user/admin"
                }
            }
        }
    ]
}

보면 getobject는 아무나 할 수 있지만 /files에대한 list는 admin만이 가능하게 되어 있습니다. 하지만 이는 --no-sign-request로 우회할 수 있습니다.

플래그를 확인할 수 있습니다.

 

- Level 5

 

IAM 정책을 보겠습니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "mobileanalytics:PutEvents",
                "cognito-sync:*"
            ],
            "Resource": "*"
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::wiz-privatefiles",
                "arn:aws:s3:::wiz-privatefiles/*"
            ]
        }
    ]
}

visualeditor1 작업 그룹은 s3에대한 접근 권한을 가지고 있습니다. 또한 문제에서 congnito를 잘못구성했다고 합니다. congnito를 한번 살펴보겠습니다.

이미지를 새탭에서 열어보겠습니다.

그러면 AccessKey가 보입니다. 이는 visualeditor1작업그룹에 속한 accessKey임을 알 수 있습니다. secretkey까지 얻어보겠습니다.

개발자 도구를 활용해보겠습니다.

이미지에 들어있는 엑세스 키를 얻을 수 있습니다. 이를 이용해서 플래그를 획득해보겠습니다.

플래그를 획득할 수 있습니다.

 

- Level 6

 

IAM 정책을 보겠습니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Federated": "cognito-identity.amazonaws.com"
            },
            "Action": "sts:AssumeRoleWithWebIdentity",
            "Condition": {
                "StringEquals": {
                    "cognito-identity.amazonaws.com:aud": "us-east-1:b73cb2d2-0d00-4e77-8e80-f99d9c13da3b"
                }
            }
        }
    ]
}

정책을 보면 특정 cognito identity pool에서 발급받은 토큰만이 role에 assume할 수 있게되어있습니다. 토큰을 발급받고 assume해보겠습니다.

먼저 id를 얻습니다.

이제 토큰을 받아냅니다.

이제 assumrole 합니다.

이제 이 자격증명으로 IAM을 설정합니다,

이제 flag를 찾아줍니다.

 

- 자격증

'Cloud Pentesting > aws' 카테고리의 다른 글

aws - S3Game(1~11) Write up  (0) 2023.09.02
Comments