谷歌云可造成数据库备份公开访问

2022-04-23 17:32:58 wenhui

文章首发:

火线Zone社区(https://zone.huoxian.cn/)


<svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg>

0x01 前期侦查

<svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg>


1、泄露访问凭证

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


2、备份

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



存储桶公开访问或泄露服务账户凭证会导致数据库泄露。




<svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg>

0x02 初始访问

<svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg>


1、登录访问凭证

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


2、弱口令

如果谷歌云数据库存在弱密码,我们可以通过爆破获得数据库的账户名和密码,然后直接访问数据库。


3、空密码

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



<svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg>

0x03 执行

<svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg>


1、云厂家命令行工具

使用gcloud来查看实例信息


gcloud sql instances describe 实例名



所有数据库例中的数据库


gcloud sql databases list --instance=实例名



2、数据库连接工具

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



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 地址不需要访问任何外部地址(不需要添加授权的网络地址)。


<svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg>

0x04 权限提升

<svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg>


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

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


2、云平台数据库漏洞

通过云平台数据库本身的问题获得高权限。


<svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg>

0x05 权限维持

<svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg>


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

用户账户可以将用户与应用程序连接到实例中。我们可以通过命令银行或控制台添加我们自己的用户账户。当前用户账户密码更改后,我们可以使用新的账户密码连接数据库。



2、修改密码

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


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

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



然后删除,去除 IAM 身份验证的用户账户不会取消 IAM 权限。因此,删除后仍有一定的权限。




4、添加IAM级别用户

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




<svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg>

0x06 防御绕过

<svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg>


1、关闭产品通知

关闭用户偏好设置中的产品通知,当有变更时,不会通过电子邮件通知用户。



<svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg>

0x07 信息收集

<svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg><svg viewbox='0 0 1 1' ></svg>


1、服务账户信息

在Cloud SQL可以查看数据库的服务账户。



2、数据库信息

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


</谷歌云可造成数据库备份公开访问

}