跳到主要内容

谷歌云 云数据库攻防

0x01 前期侦查

1、访问凭证泄露

在信息收集阶段,通过传统攻防下的信息收集方式,收集到目标的数据库账户密码、谷歌云平台账户密码,access token、服务账户凭证等

2、备份

谷歌云具有数据库实例导出功能,可以将整个实例或实例中的数据库导出到Cloud Storage中,其格式可以是csv或者sql。

11

当该存储桶公开访问或泄露了服务账户凭证即可造成数据库泄露

12

13

0x02 初始访问

1、访问凭证登录

如果在前期侦查阶段收集到了数据库的账户和密码,则可以通过其直接登录。或者在前期收集到了高权限的服务账户凭证,可以通过之前Compute Engine攻防中的方法去登录谷歌云控制台,就可以去操作Cloud SQL了。

2、弱口令

如果谷歌云数据库存在弱口令,我们可以通过爆破的方式,得到数据库的账户名和密码,进而直接访问数据库。

3、空密码

在Cloud SQL中,创建mysql数据库的时候,可以赋予数据库无root密码,如果没有 root 密码,此实例会允许任何人以完整管理权限进行连接。请设置 root 密码,以确保只有授权用户才能取得此类权限。

14

0x03 执行

1、云厂商命令行工具

使用gcloud来查看实例信息

gcloud sql instances describe 实例名

15

列出实例上的所有数据库

gcloud sql databases list --instance=实例名

16

2、数据库连接工具

当知道了数据库的账户和密码后,可以使用第三方数据库连接工具进行连接尝试。(谷歌云需要配置已授权网络才可以进行访问登录)

17

3、Cloud SQL代理

Cloud SQL Auth 代理可让您安全地访问自己的实例,而无需已获授权的网络或配置 SSL。

如需使用 Cloud SQL Auth 代理,必须满足以下要求:

必须启用 Cloud SQL Admin API。

必须向 Cloud SQL Auth 代理提供 Google Cloud 身份验证凭据。

必须向 Cloud SQL Auth 代理提供有效的数据库用户帐号和密码。

实例必须具有公共 IPv4 地址,或者配置为使用专用 IP。

该公共 IP 地址无需可供任何外部地址访问(无需添加为已获授权的网络地址)。

0x04 权限提升

1、低权限收集到高权限的凭证

当获取了数据库较低的权限后,访问数据库查找敏感信息,如用户存储的高权限账户密码、高权限凭证等信息,然后可以通过收集到的信息就可以登录控制台或命令行去操作数据库。

2、云平台数据库漏洞

通过云平台数据库自身问题去获取高权限。

0x05 权限维持

1、添加内置身份验证的用户

用户账户可以让用户和应用连接到实例,我们可以通过命令行或控制台去添加自己的用户账户,当前用户账户密码被改后,可以使用自己新建的账户密码去连接数据库。

18

2、修改密码

当拿到权限后,可以直接更改数据库实例下的用户密码。但实际渗透场景下不建议这么做,容易被发现。

3、添加基于Cloud IAM的用户账户

在通过这种方式添加后,即可以通过自己的谷歌云账户去管理数据库实例,使用 Cloud Console 将新的 IAM 用户添加到 Cloud SQL 实例时,Cloud SQL 会自动将 Cloud SQL Instance User 角色授予该用户用于项目中的所有实例和数据库。系统会自动为用户添加 IAM 政策绑定。

19

然后删除,移除经过 IAM 身份验证的用户帐号不会撤消关联主帐号在 IAM 中的权限。所以删除后还是有一定的权限。

20

21

4、添加IAM级别用户

通过IAM处添加Cloud SQL Admin的主账户权限,可以拥有Cloud SQL资源的完全控制权。

22

23

0x06 防御绕过

1、关闭产品通知

在用户偏好设置中关闭产品通知,当有改动时,将不会以电子邮件的方式通知用户

24

0x07 信息收集

1、服务账户信息

在Cloud SQL概览页面可以查看该数据库的服务账户

25

2、数据库信息

在Cloud SQL实例页面可以查看实例的ID、数据库版本、公共ip地址、存储空间等信息

26

3、用户信息

在Cloud SQL用户页面可以查看内置身份验证的用户信息、基于Cloud IAM的主账户信息(包括了IAM电子邮件)

27

0x08 影响

1、数据库备份可被公开访问

在公开访问的存储桶中存在数据库备份,造成了数据库数据泄露。

2、其他影响

当数据库被攻击者拿下后,可以获取数据库的敏感信息,对数据库进行恶意操作。

参考资料:

https://cloud.google.com/sql/docs/mysql/sql-proxy?authuser=1&_ga=2.213776404.-1838959337.1648105721

https://cloud.google.com/sql/docs/mysql/connect-overview?authuser=1#authentication_options

https://cloud.google.com/sdk/gcloud/reference/sql/