文章首发于:前线Zone社区

作者:高鹏

高鹏,前线云平安实验室成员,明天分享的主题是《浅析云存储的攻打利用形式》。


本次的议题,对于云存储的一个攻打利用形式,在SRC破绽开掘,或在前线平安平台的众测我的项目中,咱们也会收到很多对于对象存储的一个劫持和权限配置的一些问题,对象存储在平安这一块也是一个不可疏忽的方向。

咱们总共把议题分为四个局部。

首先第一个局部是什么是对象存储,第二个局部对象存储利用形式,在这一环节中,咱们举例了大略有十种利用对象存储利用形式,而后最初咱们再对它进行一个总结,而后咱们在第二第三局部,咱们精心筛选了前线后盾平安众测我的项目中实在的几个破绽,并且奖金较高的,与对象存储无关的破绽进行举例,最初就是咱们的问答与探讨。

先看一下什么是对象存储。可能没有理解过的,对这个货色没有一个概念,就如同对象存储是把本人的对象存储在云上,把本人的女朋友存在云上?或者说跟开发一样,本人new一个对象,其实并不是。

咱们在国内常见,比拟大的对象存储提供商,还有包含国外的一些提供商,咱们首先看一下,第一个就是腾讯云,而后第二个就是华为云,第三个就是阿里云,到国外的话,第一个必定就是。亚马逊,而后就是微软的Azure,而后还有谷歌的Google cloud。

咱们首先来看一下这六大云的一个对象存储的一个利用形式。

1、Bucket公开拜访

首先第一个就是bucket的一个公开的一个拜访,管理员在创立bucket的时候,默认的是priavte的一个权限,如果在谬误的一个配置下,例如说给了一个ListObject的一个权限,会导致存储桶的遍历。

这是右边是aws的,而后左边是阿里云的。然而这里就存在两个问题1、如果首先第一个问题是,如果咱们只配置私有读或者私有读写的状况下,其实咱们是无奈失常的列出他所上面的一些Key,造成遍历存储桶的状况,咱们失常拜访一个咱们设置了私有读或私有读写的一个存储桶。然而这个存储桶咱们拜访的时候,他会通知咱们是Access Denied,然而咱们能够通过拜访它上面的一个key,或者对应就是咱们艰深点来讲,就是拜访它对应的一个文件,咱们就能下载到这个文件。

如果想列出Object,那么就须要在Bucket的受权策略中,咱们设置ListObject,咱们在左边的图片就能够看到,它能够把这个所有的货色给列出来。

2、Bucket桶爆破

Bucket桶的爆破,咱们在惯例的浸透中,扫描目录,是通过返回的状态码来进行判断,而这里是通过页面返回不同的报错信息来进行判断,如下图

不过值得注意的是,在微软的Azure中,如果咱们拜访一个存在的存储账户下的一个容器,首先会提醒咱们,InvalidQueryParameterValue,然而如果不存在的话,会显示无法访问该网站。

也能够通过CNAME,DNS解析的形式去获取域名的CNAME。

3、特定的Bucket策略配置

咱们拜访一个bucket,如果存在某种限度,例如,UserAgent,IP等,管理员谬误的配置了GetBucketPolicy的权限,咱们能够通过获取Bucket的策略配置来获取存储桶中的内容。

4、Bucket Object遍历

Bucket的遍历也就是如果设置了ListObject权限,而后咱们就能够看到它下面所存在的货色,其实是在SRC,或者说在众测我的项目中是十分多的,咱们能够通过curl get的形式去下载张图片。

5、任意文件上传与笼罩

将任意文件上传至存储桶,或者说也能够笼罩存储桶上曾经有的一个文件。这里次要关系到一个谬误的配置策略,PutObject。

6、AccessKeyId,SecretAccessKey泄露

能够通过反编译APK,小程序,查看JS代码中来获取泄露的AK等,稍后在第三个环节,咱们也会通过实战案例来看AK泄露的问题。


在JS代码中也能够找到泄露的Key

下图中提供了一款工具HaE

https://github.com/gh0stkey/HaE

这里咱们举荐一款Burp的插件,HaE,可能无效的在测试中帮忙测试人员疾速的发现存在泄露的AK,身份证,电话号码,邮箱等。

7、Bucket劫持与子域接管

这是比拟常见的,也是众测我的项目中比拟多的,原理也很简略,bucket的名称只能有一个,如果管理员将Bucket设置了自定义域名,比方在域名中增加DNS解析,CNAME指向存储桶的域名,然而有一天管理员将存储桶删掉,然而并没有删掉在域名中的DNS解析,这种状况就会导致咱们能够去注册同样的存储桶名称来劫持该域名,咱们只须要上传任意的文件,就能够让这个域名或者存储桶显示咱们想要的货色。

不过须要留神的是,在腾讯云的对象存储中,咱们无奈造成以上的操作,因为在腾讯云的对象存储域名中,有一个APPID,这个APPID来自咱们的账户信息中。

随后咱们再举例AWS下的存储桶劫持,原理同上。


而后aws下是有一个比拟有意思的中央,就是咱们来判断aws存储桶的域名地址的时候,其实咱们是能够间接很间接的来判断进去的,就比如说它的域名是http://huoxian.cn,那么前面加上.s3.地区.http://amazon.com就能够了,起因是因为,在AWS下,配置存储桶的时候,想应用自定义的域名,存储桶的名称必须跟域名的名称一样。

咱们再来看一下微软的Azure下的劫持,原理也同上。



8、存储桶的配置可写

存储桶的配置可写,咱们拜访一个存储桶时,如果提醒咱们Access Denied的话,如下图。

咱们发现,该存储桶谬误的配置了PutBucketPolicy和GetBucketPolicy,此时咱们就能够获取存储桶的配置,而后再批改写入配置即可。

9、批改Bucket策略为Deny使业务瘫痪

当策略可写的时候,除了以上的一些操作,例如网站引入了某个S3上的资源,图片,JS等,咱们能够通过批改Effect为Deny,导致网站无奈获取这些资源随之瘫痪。

10、批改网站援用的S3资源进行钓鱼

这里比拟好了解,咱们既然领有上传的权限了,咱们能够通过批改外面的资源,进行一个钓鱼或净化。

11、六大私有云攻击方式统计表

咱们总结了六大私有云的存储桶利用形式。

12、Lambda函数执行命令

首先咱们先创立一个Lambda函数,而后在抉择触发器的时候抉择咱们创立的存储桶,并且触发事件,咱们抉择所有事件都会触发。

咱们应用Python编写函数,首先咱们应用print将event中的信息输入到Cloud Watch咱们须要留神Object中的Key,假如一种状况,这里的KEY来自存储桶的文件名,如果管理员在编写代码时将文件夹当成命令或其余的形式进行解决,是否造成命令执行。

很显然,是能够的,并且咱们能够应用curl命令将信息外带进去。

在本环节中,咱们筛选了,在前线平安众测我的项目中,破绽奖金比拟高的一些破绽进行举例。

1、反编译小程序泄露AccessKey

该破绽的奖金为6500,咱们在图片中的IDEA中能够看到,这里通过ABD获取小程序的包反编译后在JS代码中找到的存储桶的KEY,随后连贯下来,在存储桶中获取到了大量的敏感数据。

2、JS文件中存在的AccessKey泄露

该破绽的奖金为7000,在上图中能够看到,在JS代码中,找到了泄露的KEY,随后应用OSS浏览器连贯下来,发现了大量的用户身份证图片等。

3、阿里云存储桶劫持

该破绽的奖金为2500,在第二张图咱们能够看到,拜访域名显示NoSuckBucket,在HostID中咱们能够看到存储桶的域名,随后创立了一个跟这个名称一样的存储桶,并上传一个1.txt中蕴含test by huoxian,再次拜访该域名能够发现胜利劫持了该域名。

4、GitHubAccessKey泄露

在上图中咱们能够看到,通过关键字的搜寻,能够在github中发现上传的AK,导致泄露敏感信息。