The Big IAM Challenge 云安全 CTF 挑战赛

The Big IAM Challenge 云安全 CTF 挑战赛

今天,我们来做一下有关于云安全 的CTF 挑战赛 The Big IAM Challenge,旨在让白帽子识别和利用 IAM错误配置,并从现实场景中学习,从而更好的认识和了解IAM相关的风险。比赛包括6个场景,每个场景都专注于各种AWS服务中常见的IAM配置错误。

挑战赛地址:bigiamchallenge.com

Buckets of Fun

We all know that public buckets are risky. But can you find the flag?

我们进入题目主页后,第一题是叫 Buckets of Fun,我们点击 View IAM Policy 开始做题

在这里插入图片描述

第一题给出了一个 Bucket 的 Policy 内容, 查看提示获取本关的IAM策略如下:

在这里插入图片描述

{"Version": "2012-10-17","Statement": [{"Effect": "Allow", //Effect(效果)设置为Allow(允许)"Principal": "*",  //Principal(主体)是所有用户("*""Action": "s3:GetObject",  //获取对象"Resource": "arn:aws:s3:::thebigiamchallenge-storage-9979f4b/*"  //指定S3存储桶中的所有对象},{"Effect": "Allow","Principal": "*","Action": "s3:ListBucket",    //列出存储桶"Resource": "arn:aws:s3:::thebigiamchallenge-storage-9979f4b","Condition": {       //条件是通过前缀限制只能列出以"files/"为前缀的对象"StringLike": {"s3:prefix": "files/*"}}}]
}

该策略允许任何用户列出"thebigiamchallenge-storage-9979f4b"存储桶中符合前缀条件"files/"的对象。该策略存在如下安全风险:

1、允许任何用户对指定的S3存储桶执行GetObject操作以获取对象的内容。

2、允许任何用户对指定的S3存储桶执行ListBucket操作列出存储桶中符合指定前缀条件的对象

从给到的内容里可以看到,这个存储桶具有公开列对象和公开读取的权限,由于题目里已经给出了 Bucket 名称,针对s3存储桶权限校验不严格,列出桶资源对象并使用查看对象内容获取flag

aws s3 ls s3://thebigiamchallenge-storage-9979f4b/files/

在这里插入图片描述

此时,我们得知files目录下还存在着 flag1.txt 文件夹,由于题目里已经给出了 Bucket 名称,此时我们直接拼接下完整的 URL 为:https://thebigiamchallenge-storage-9979f4b.s3.amazonaws.com/files/flag1.txt

直接访问这个地址,就可以看到 FLAG 所对应的 Key

在这里插入图片描述

然后将这个flag复制,点击提交

在这里插入图片描述

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.

第二题叫做Google Analytics,我们继续点击 View IAM Policy

在这里插入图片描述

查看提示获取本关的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"}]
}

该IAM策略允许任何用户对特定的SQS队列执行SendMessage和ReceiveMessage操作,即发送和接收消息。该策略存在如下安全风险:

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

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

SQS (Simple Queue Service) 可以用来帮助不同的应用程序之间进行可靠的消息传递,它就像是一个消息中转站,可以把消息从一个地方发送到另一个地方,确保消息的安全送达和处理,让应用程序之间更好地进行通信和协作

题目的 Policy 中给出了 Account ID 和 Queue 的值,那么我们就可以构造这个 Queue URL 了,构造好后的 Queue URL 为:

https://queue.amazonaws.com/092297851374/wiz-tbic-analytics-sqs-queue-ca7a1b2

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

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

在这里插入图片描述

接着,我们在浏览器中输入URL的地址,获得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?

在这里插入图片描述

第 4 题的名字叫 “Admin only?”,查看提示并获取本关的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 相关的,思路还是和第一题一样,先找到 FLAG 的 Key,然后拼接访问 FLAG 的地址即可。

那么,现在的目标就是获取到这个 FLAG 的 Key,但是我们从 Policy 里可以看到这个存储桶只对 arn:aws:iam::133713371337:user/admin 主体授予了 ListBucket 权限,所以现在要解决的问题就是,怎么绕过这个限制。

查阅官方文档,我们可以得到这样的一条信息:对于 ForAllValues,如果请求中没有键或者键值解析为空数据集(如空字符串),则也会返回 true,不要使用带有 Allow 效果的 ForAllValues,因为这样可能会过于宽容。

也就是说,如果我们把请求中的 aws:PrincipalArn 至为空,这里就会返回 True,那么就可以绕过了。

此时我们先发送一条包含 aws:PrincipalArn 的请求。

aws s3api list-objects --bucket thebigiamchallenge-admin-storage-abf1321 --prefix 'files/' 

在这里插入图片描述

可以看到提示An error occurred (AccessDenied) when calling the ListObjects operation: Access Denied,显示拒绝访问,然后加上 --no-sign-request 试试。

aws s3api list-objects --bucket thebigiamchallenge-admin-storage-abf1321 --prefix 'files/' --no-sign-request

在这里插入图片描述

该参数可以用来执行无需身份验证的请求。使用该参数可以跳过对请求进行签名和身份验证的步骤,从而可以在某些情况下执行不需要验证的操作。

aws s3 ls s3://thebigiamchallenge-admin-storage-abf1321/files/ --no-sign-request
aws s3 cp s3://thebigiamchallenge-admin-storage-abf1321/files/flag-as-admin.txt /tmp/flag4.txt
cat /tmp/flag4.txt

在这里插入图片描述

获得此题的flag如下:

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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/193647.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 232.用栈实现队列

题目 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty): 实现 MyQueue 类: void push(int x) 将元素 x 推到队列的末尾 int pop() 从队列的开头移除并返回元素 int peek() 返回…

智跃人力资源管理系统GenerateEntityFromTable.aspx接口存在SQL注入漏洞 附POC

@[toc] 智跃人力资源管理系统GenerateEntityFromTable.aspx接口存在SQL注入漏洞 附POC 免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者…

别再争国漫一哥了,真正的王者回来了!

相信很多漫迷都知道,《斗罗大陆》动画在播出的五年期间一直稳稳占领国漫各榜单第一的位置。现在它已经完结了大半年,尽管《斗破苍穹》《完美世界》等动画都在争国漫一哥,但排名总是上下浮动,没有定论。 但就在今天,《斗…

用GPT4.0对csdn问答社区内容进行总结的对话记录(20231203号)

问题链接:微信小游戏开发2D碰撞检测问题 问题内容: 用户在开发微信小游戏的2D项目时遇到了碰撞检测无效的问题。他们尝试使用其他的碰撞类,但在2D中会报错。用户怀疑微信小游戏的框架可能不支持2D碰撞检测,或者需要自己计算和编…

flink获取kafka的key value timestamp header

参考: http://t.csdnimg.cn/FvqEn

JUC-AQS

如何利用CAS实现一个同步框架 state:共享标记位。利用CAS修改,达到同步管理等待队列:存储需要等待获取锁的线程 共享标记位state0 表示资源是空闲的;state1表示有1个线程获取到资源,如何独占模式,判断持有…

一款充电桩解决方案设计

一、基本的概述 项目由IP6536提供两路5V 1.5A 的USB充电口,IP6505提供一路最大24W的USB快充口支持QC3.0 / DCP / QC2.0 / MTK PE1.1 / PE2.0 / FCP / SCP / AFC / SFCP的快充协议,电池充电由type-C输入经过IP2326输出最高15W快充对电池进行充电&#xf…

C++:异常

文章目录 传统的处理错误的方式C异常C异常的使用抛异常的举例异常的重新抛出异常规范 自定义异常体系C标准库中的异常体系异常的优缺点 本篇总结的是C中关于异常的内容 传统的处理错误的方式 在C语言中,对于传统的错误方式有 终止程序:例如assert&…

上海市计算机学会竞赛2023年11月月赛丙组

1.刷题 #include<iostream> using namespace std; int main(){int n,m,a;cin>>n>>m;if(n%m!0){an/m1;}if(n%m0){an/m;}cout<<a; } 2.染色 #include<iostream> #include<algorithm> using namespace std; long long a[300010]; int main…

【STL】手撕 string类

目录 1&#xff0c;string类框架 2&#xff0c;string&#xff08;构造&#xff09; 3&#xff0c;~string&#xff08;析构&#xff09; 4&#xff0c;swap&#xff08;交换&#xff09; 5&#xff0c;string&#xff08;拷贝构造&#xff09; 1&#xff0c;常规法 2&a…

pythonanywhere 介绍

最近因为工作需要用到类似Azure Function App的服务&#xff0c;不过Azure Function App服务需要购买Azure VM&#xff0c;不是免费的。在stackoverflow上刚好看到有人提到pythonanywhere提供类似Azure Function App的服务&#xff0c;而且可以免费使用三个月。 首先申请一个免…

Cmkae外部依赖管理

文章目录 一、cmake依赖管理介绍二、源码依管理1. FetchContent与find_package进行集成 2. CPM3. git submodule附加&#xff1a; address_sanitizer 和 undefined sanitizer 一、cmake依赖管理介绍 CMake 是跨平台的构建系统&#xff0c;支持 C/C、Objective-C、Fortran 等多种…

Git Bash环境下用perl脚本获取uuid值

在Linux环境下&#xff0c;比如在ubuntu就直接有uuidgen命令直接获取uuid值。在Windows环境下常用的git bash中没有对应的命令&#xff0c;略有不便。这里用脚本写一个uuidgen&#xff0c;模拟Linux环境下的uuidgen命令。 #! /usr/bin/perl use v5.14; use Win32;sub uuidGen {…

6-13连接两个字符串

#include<stdio.h> int main(){int i0,j0;char s1[222],s2[333];printf("请输入第一个字符串&#xff1a;\n");gets(s1);//scanf("%s",s1);printf("请输入第二个字符串&#xff1a;\n");gets(s2);while(s1[i]!\0)i;while(s2[j]!\0)s1[i]s2…

1.1卷积的作用

上图解释了1∗1卷积如何适用于尺寸为H∗W∗D的输入层&#xff0c;滤波器大小为1∗1∗D&#xff0c;输出通道的尺寸为H∗W∗1。如果应用n个这样的滤波器&#xff0c;然后组合在一起&#xff0c;得到的输出层大小为H∗W∗n。 1.1∗1卷积的作用 调节通道数 由于 11 卷积并不会改…

webpack查找配置文件的策略

Webpack 在执行时会按照一定的策略来查找配置文件。以下是它查找配置文件的基本流程&#xff1a; 1.命令行指定&#xff1a; 如果在运行 Webpack 时通过 --config 或 -c 参数指定了配置文件的路径&#xff0c;那么 Webpack 将使用这个指定的配置文件。 2.默认查找顺序&…

Java研学-反射与内省

一 反射机制 1 含义 通过指定类的字节码文件获取对应的字节码对象;通过该对象调用类中的成员 2 获取类的真实类型的方式 ① 正射机制 – new关键字实例化对象 // Animal类 public class Animal{private String name;private int kg;...... }// 实例化对象 public class Tes…

程序员日常使用Shell命令:提高工作效率的实用技巧

作为程序员&#xff0c;我们每天都在与代码和工具打交道。其中&#xff0c;Shell是一个非常重要的工具&#xff0c;它可以帮助我们高效地完成各种任务。本文将列举一些程序员日常使用Shell提高效率的操作&#xff0c;帮助大家更好地利用Shell提高工作效率。 首先&#xff0c;让…

[递归] 平衡矩阵

平衡矩阵 题目描述 现在有一个n阶正整数方阵&#xff08;n<7&#xff09;&#xff0c;现在可以对矩阵的任意一行进行左移&#xff0c;具体操作为&#xff1a;每次对于某一行a_i1,a_i2,…,a_in进行一次左移&#xff0c;最左边的元素移动到这一行的末尾&#xff0c;其他元素…

LinuxBasicsForHackers笔记 --文本处理

查看文件 head <file name> – 如果只想查看文件的开头部分&#xff0c;可以使用 head 命令。默认情况下&#xff0c;此命令显示文件的前10行。如果您想查看多于或少于默认的 10 行的内容&#xff0c;请在 head 命令之后、文件名之前使用破折号 (-) 开关输入所需的数量。…