외로운 Nova의 작업실
aws IAM Challenge write up(1~6) 본문
링크 : https://bigiamchallenge.com/challenge/1
- 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 |
---|