持续更新中,本篇涉及云服务均为AWS
概念
云上的服务,部署在购买的云厂商的服务上
目前国内厂商:阿里云,腾讯云,华为云,天翼云,Ucloud,金山云
国外厂商:AWS(亚马逊),GCP(谷歌),Azure(微软)
一些云服务举例:
S3 (Simple Storage Service),类似网盘但有不同
EC2 (Elastic Compute Cloud),弹性计算服务,云上虚拟机
RDS (Relational Database Service),云数据库
IAM(Identity and Access Management),云上的身份管理服务,管理每个子账号权限
原本都在本地的服务全都上了云,相应的产生云端上的安全风险,那便有了云安全研究的意义。
下面内容均为亚马逊AWS
S3(Amazon S3)
如下一段定义:
对象存储(Object-Based Storage),也可以叫做面向对象的存储,现在也有不少厂商直接把它叫做云存储。
说到对象存储就不得不提 Amazon,Amazon S3 (Simple Storage Service) 简单存储服务,是 Amazon 的公开云存储服务,与之对应的协议被称为 S3 协议,目前 S3 协议已经被视为公认的行业标准协议,因此目前国内主流的对象存储厂商基本上都会支持 S3 协议。
阿里云的云存储叫OSS,只能说不同厂商存在差异吧
重点技术:bucket,Object,ACL
存储结构
在 Amazon S3 标准下中,对象存储中可以有多个桶(Bucket),然后把对象(Object)放在桶里,对象又包含了三个部分:Key、Data 和Metadata
key是桶中的一个唯一的标识符
例如一个 URL 为:https://teamssix.s3.ap-northeast-2.amazonaws.com/flag,这里的 teamssix 是存储桶 Bucket 的名称,/flag 就是 Key
Data就是数据本体咯
Metadata 元数据
简单理解为数据的标签、描述等信息用于方便,加快信息的排序分类查找
Bucket爆破
与传统安全的爆破目录等操作思路相同,只不过判断依据不在是状态码
当请求的Bucket不存在,有两种返回情况:
InvalidBucketName 和 NoSuchBucket
分别如下图


当请求的Bucket存在时,会返回两种,一种是列出Object,一种是AccessDenied
列出Object:

返回 AccessDenied:

Bucket接管
典型的Bucket接管漏洞的标志:
NoSuchBucket
先说说这个回显的成因,成因是不同于无效桶名称的
当一个cname指向一个S3存储桶,如果桶被删除了,但是域名的cname记录没有删除,访问时就会回显 NoSuchBucket。
此时,就可以利用这个“空位”来接管Bucket
S3存储桶的名称在AWS中是唯一的,当利用空位创建了一个桶后,该域名的解析就会定向到攻击者自己创建的桶

如上。
通过 cname 记录,可以判断出这是一个 Amazon 的 S3,而且页面显示 NoSuchBucket,说明这个 Bucket 可以接管的,同时 Bucket 的名称在页面中也告诉了我们,为 test.teamssix.com
那么就可以直接在AWS控制台中创建 test.teamssix.com 这个桶,直接就可以实现对这个桶的接管
创建完 Bucket 后,再次访问发现就显示 AccessDenied 了,说明该 Bucket 已经被我们接管(虽然权限不足报错,但说明已经成功创建并可以正常解析)
修改设置为公开,便可上传文件等操作,彻底接管
注:
在腾讯云的对象存储中,我们无法达成以上的操作,因为在腾讯云的对象存储域名中,有一个APPID,这个APPID来自我们的账户信息中
S3任意文件上传
如果设置为公共读写(不当配置)便可达成
利用示例如下↓

如果目标的对象存储支持html解析,就可以继续达成xss,钓鱼等攻击,利用姿势更多
加油