云服务篇-云服务器

云服务器基本概念

用户、用户组、角色的概念

像我们个人使用阿里云控制台时一般都会直接访问阿里云官网去进行操作,但是像大型企业那种可能会对用户进行权限区分,不同用户可以访问不同的区域。
在阿里云中有一个RAM访问控制功能,可新建用户、用户组、角色等不同身份,在里面可以对其用户的权限进行控制,如只允许其访问OSS服务、ECS服务等。

RAM用户


我们在RAM访问控制中创建了用户之后,可以在RAM用户登录站点上使用我们刚刚创建的RAM用户去进行登录,登录网站:https://signin.aliyun.com/login.htm#/main

在这里我们输入刚刚创建的用户和所提供的密码就可以登录到RAM用户视图中。

同时,我们也可以对其该用户的权限进行划分,比如只允许用户A访问ECS服务器权限,用户B访问OSS存储桶权限,在RAM访问控制中是都可以设置的

我们授予的权限也可以在授权中收回

RAM角色

刚刚我们介绍了在RAM访问控制中用户的使用,那在阿里云中RAM角色的用处是什么呢?
RAM角色是一种虚拟用户,可以被授予一组权限策略。与RAM用户不同,RAM角色没有永久身份凭证(登录密码或访问密钥),需要被一个可信实体扮演。扮演成功后,可信实体将获得RAM角色的临时身份凭证,即安全令牌(STS Token),使用该安全令牌就能以RAM角色身份访问被授权的资源。
比较适用于我们的临时授权访问,由服务端下发临时安全令牌(STS Token),客户端通过临时安全令牌(STS Token)进行资源直传。或跨服务访问,比如同时需要获得ECS、OSS等的访问控制权限等。

在这里我们选择创建角色,类型为阿里云服务,守信服务选择云服务器。


我们可以给其赋予权限。


同样的RAM角色解除权限也是在授权中解除授权

在创建完RAM角色后,我们可以把实例授予或收回RAM角色管理

元数据

首先了解下什么是元数据,以下为阿里云介绍为例
元数据解释:实例元数据(metadata)包含了弹性计算云服务器实例在阿里云系统中的信息,您可以在运行中的实例内方便地查看实例元数据,并基于实例元数据配置或管理实例。(基本信息:实例ID、IP地址、网卡MAC地址、操作系统类型等信息,实例标识包括实例标识文档和实例标识签名,所有信息均实时生成,常用于快速辨别实例身份。)

以下为各大云厂商的元数据地址:

阿里云元数据地址: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/

以阿里云为例,我们在阿里云的vps中使用curl访问http://100.100.100.200/ 就会访问到元数据服务
具体命令如下:

mac    实例 MAC 地址
hostname    实例主机名
iam/info    获取角色名称
local-ipv4    实例本地 IP
public-ipv4    实例公网 IP
instance-id    实例 ID
public-hostname    接口的公有 DNS (IPv4)
placement/region    实例的 AWS 区域
public-keys/0/openssh-key    公有密钥
/iam/security-credentials/<rolename>    获取角色的临时凭证
curl http://100.100.100.200/latest/meta-data/


在其中我们可以查看到这个VPS的IP地址、MAC地址、主机名等信息,如

curl http://100.100.100.200/latest/meta-data/mac

curl http://100.100.100.200/latest/meta-data/hostname

云服务器所存在的风险

凭证泄露

通过元数据获取临时凭证

前提条件

-SSRF漏洞或已取得某云服务器权限(webshell或漏洞rce可以访问触发url)
获取这个服务器的权限(并不一定要是最高权限),只要能够利用服务器去访问元数据的权限就可以了
-弹性计算配置访问控制角色
首先为什么前提需要SSRF漏洞或云服务器的权限才可以进行下一步操作,相信大家对此不难理解,因为我们需要访问到元数据地址并返回信息。
那么为什么还要求必须配置访问控制角色呢?刚刚我们在介绍RAM角色的时候也提到过,实例在绑定RAM角色后,会获得RAM角色的STS token,那我们在翻阅产品文档的时候发现,实例可以通过访问元数据的方式获得STS token,在这里我们可以在绑定RAM角色时和不绑定RAM角色时都访问该元数据URL,看其返回的内容分别是什么。

未绑定RAM角色

首先我们先访问到security-credentials目录,尝试获取RAM角色的名称,可以看到直接无法访问

curl http://100.100.100.200/latest/meta-data/ram/security-credentials/

绑定RAM角色

首先我们先访问到security-credentials目录,尝试获取RAM角色的名称

curl http://100.100.100.200/latest/meta-data/ram/security-credentials/


得知RAM角色用户之后我们拼接RAM用户之后继续访问元数据URL,即可获得该RAM角色的STS Token

curl http://100.100.100.200/latest/meta-data/ram/security-credentials/test

通过服务器获得临时凭证

假设我们当前已经获得了一台云vps的权限,这时我们需要先要确定该vps属于哪个云厂商,这里一般在ip138中搜索这个IP地址就可得知该vps的云厂商。

此时我们得知该vps的厂商为阿里云之后,直接根据所提供的元数据地址去尝试获取RAM角色名

curl http://100.100.100.200/latest/meta-data/ram/security-credentials/

curl http://100.100.100.200/latest/meta-data/ram/security-credentials/test


获得的STS Token后就可以使用CF云环境利用框架进行攻击,输入刚刚所获得的临时AK

cf config


然后通过列出阿里云的凭证权限,发现其和我们之前设置的RAM角色权限一致

通过SSRF漏洞获得临时凭证

最后修改:2023 年 12 月 05 日
如果觉得我的文章对你有用,请随意赞赏