OSS
权限配置
oss存储桶有三种情况,一种是私有,需要id和key才能访问存储桶内的文件。另一种是公共读,即访问无限制,任何人可以访问。最后一种是公共读写,即任何人可以读和写,使用PUT方法即可上传任意文件
公共读还存在一个安全问题,即如果开启了ListObject,那么任何人都可以看到存储桶内的文件,以文件列表形式展示,类似目录遍历
域名接管
一般来说存储桶不会解析像html这种文件,但是如果配置了域名绑定,也就是配置了CNAME,那么html就可以解析了,可以导致xss
域名接管就是基于域名绑定CNAME的配置没有删除,只删除了存储桶
举个例,比如你的oss地址是xxx.oss-cn-shenzhen.aliyuncs.com,此时你将images.aaa.com的域名绑定在了xxx.oss-cn-shenzhen.aliyuncs.com,也就是一条CNAME记录。之后你不想要这个存储桶了,于是删除了xxx.oss-cn-shenzhen.aliyuncs.com这个存储桶,但是你忘记删除CNAME记录了,也就是说此时images.aaa.com的域名还存在一条CNAME记录指向xxx.oss-cn-shenzhen.aliyuncs.com。
此时攻击者就可以自己创建一个xxx.oss-cn-shenzhen.aliyuncs.com,名称相同的存储桶,此时他对该存储桶是有读写权限的,而你的域名images.aaa.com又恰好指向xxx.oss-cn-shenzhen.aliyuncs.com,这就造成了images.aaa.com子域名接管
攻击场景
像如果你发现一个oss存储桶出现NosuchBucket提示,说明可能会存在域名接管。
ECS
元数据
元数据服务是一种提供查询运行中的实例内元数据的服务,简单来说就是云服务器可以通过访问元数据服务,来得到本机上的属性信息,同时,如果此时该实例存在RAM访问控制设置,也就是某个角色授权了该实例,那么就可以获得与该实例绑定角色的临时凭证,并通过该临时凭证获得云服务器的控制台权限,进而横向到其他机器。
阿里云元数据地址: http://100.100.100.200/
腾讯云元数据地址: http://metadata.tencentyun.com/
华为云元数据地址: http://169.254.169.254/
亚马云元数据地址: http://169.254.169.254/
微软云元数据地址: http://169.254.169.254/
谷歌云元数据地址: http://metadata.google.internal/
通过访问元数据的 /iam/security-credentials/<rolename>
路径可以获得目标的临时凭证,进而接管目标服务器控制台账号权限,前提是目标需要配置 IAM 角色才行,不然访问会 404
curl http://169.254.169.254/latest/meta-data/iam/security-credentials
因此接管整个云服务只需获得到aksk即可
那么如何获取呢,第一种方法就是寻找代码中有没有泄露aksk。第二种方法是使用实例去访问元数据服务,获取临时凭证。
那么第二种方法很显然需要shell,能够执行curl命令,访问元数据。那么还有没有方法可以获取到呢?
我们要注意的是这里的请求是http请求,那么联系其他漏洞,是否可以使用ssrf去访问到元数据呢?答案是肯定的,不过需要有回显的ssrf,获取到aksk。再用cf接管整个云服务。
参考文章: