ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

从零到通关:EntraGoat 部署全流程与高频故障自救

从零到通关:EntraGoat 部署全流程与高频故障自救

从零到通关:EntraGoat 部署全流程与高频故障自救

【免费下载链接】EntraGoatA deliberately vulnerable Microsoft Entra ID environment. Learn identity security through hands-on, realistic attack challenges.项目地址: https://gitcode.com/GitHub_Trending/en/EntraGoat

EntraGoat 部署最容易卡住的环节,往往不是代码,而是环境:它要在你的 Entra ID 测试租户里注入真实的身份配置错误和提权路径,租户、权限、Graph SDK 任何一环没对齐,脚本都会在第一步就报错。这篇文章写给第一次接触 EntraGoat 的安全新手,按环境体检、三步上线、验证交付、故障自救的顺序,带你把 6 个挑战场景完整跑通。

🩺 出发前:环境体检清单

这一步解决"明明照着做却连不上"的问题——EntraGoat 安装失败九成是前置条件没对齐,花五分钟把下表过完,后面能少走很多弯路。

检查项要求快速确认方式
租户专用 Entra ID 测试/试用租户,绝不用生产登录租户后确认里面没有业务用户
权限当前账号是 Global AdministratorEntra 管理中心 → 角色分配里能看到 GA 角色
Graph SDKMicrosoft.Graph PowerShell 模块下面这条命令有版本输出即可
系统与运行时Windows + PowerShell 5.1 或 7+(GUI 路线必需);Web 路线另需 Node.js 和 npmnode -v、npm -v能打印版本号
网络浏览器可达 Entra 管理中心和 Graph 端点能正常打开并登录管理中心
Get-Module -ListAvailable Microsoft.Graph | Select-Object Name, Version

更细的前置说明可以对照 docs/getting-started.md。

🚀 第一公里:三步把部署走通

这一步解决"东西装在哪、从哪个文件开始跑"的问题。整个 EntraGoat 部署就是三步:拿代码、装 SDK、选一条路线启动界面。

步骤 1:克隆仓库,认准入口文件

git clone https://gitcode.com/GitHub_Trending/en/EntraGoat cd EntraGoat

入口文件是根目录的Start-EntraGoat.ps1;走纯手动路线的话,脚本都在scenarios/目录里。

步骤 2:安装 Microsoft Graph PowerShell SDK

Install-Module Microsoft.Graph -Scope CurrentUser -Force

装过但版本较旧的话,用Update-Module Microsoft.Graph升到最新即可,不需要卸载重装。

步骤 3:挑一条路线启动界面

路线 A:PowerShell GUI(推荐,无需 Node.js)

.\Start-EntraGoat.ps1

窗口打开后,6 个挑战按难度排列成卡片,每张卡片可以直接运行 setup 和 cleanup 脚本,提示词默认折叠,不会剧透。界面支持Ctrl+Plus/Ctrl+Minus/Ctrl+0缩放。

路线 B:Web UI

cd frontend npm install npm start

浏览器打开http://localhost:3000,点挑战卡看详情,具体脚本仍需在终端执行。

✅ 交作业:验证部署可用

这一步解决"到底算不算装好了"的问题——部署没有报错不等于环境就绪,用下面三个检查点确认闭环成立。

  1. 界面层:GUI 首页能看到 6 张挑战卡片和 0/6 的进度;或 Web 版在localhost:3000正常出仪表盘。
  2. 脚本层:在挑战页点 Run Setup,终端里没有红色[-]报错、横幅流程走完;到 Entra 管理中心里能看到脚本新建的用户和应用(以场景 1 为例,会建出Finance Analytics Dashboard应用和一组测试账号)。
  3. 可玩层:挑战页给出起始低权限账号,用它登录,沿攻击链一路提权到 Global Admin,最后把 flag 提交回 GUI。flag 就藏在管理员用户的extensionAttribute1里,找不到就去翻这个字段。

每个场景都配有攻击路径图,以场景 5 为例:

验证通过的标志一句话:setup 干净跑完、租户对象就位、能完整走一遍 setup → 提权 → flag → cleanup。

🔧 翻车自救:高频故障按症状排查

这一步把 EntraGoat 排障拆成"症状 → 原因 → 处置"三段,不靠猜,按对号入座的方式处理。

认证卡在 Connect-MgGraph

  • 症状:脚本在连接 Graph 阶段报认证错误,或浏览器弹窗登录后依然失败。
  • 原因:当前 PowerShell 会话没有有效的登录上下文,或弹窗里误选了别的租户。
  • 处置:先手动执行Connect-MgGraph -Scopes "Directory.ReadWrite.All" -TenantId "你的租户ID",确认登录时选中的是测试租户,再重跑脚本。

SDK 装不上(Install-Module 报错)

  • 症状:Install-Module Microsoft.Graph提示权限不足或无法安装。
  • 原因:没加-Scope CurrentUser时系统要求管理员身份;或网络策略拦了 PowerShell Gallery。
  • 处置:以管理员身份重开 PowerShell 再装,或保留-Scope CurrentUser普通身份安装;仍失败就先解决到 Gallery 的网络连通性。

setup 中途报"对象已存在"

  • 症状:脚本跑到一半提示重名对象已存在,直接中断,租户里残留了半个场景。
  • 原因:上次 setup 没跑完或没清理,同名用户、应用还留在租户里。
  • 处置:先执行cleanups/目录里对应的 cleanup 脚本清场,再重跑 setup;两个目录按场景编号一一对应。

GUI 在 macOS / Linux 上起不来

  • 症状:执行Start-EntraGoat.ps1报 WPF 相关类型找不到的错误。
  • 原因:PowerShell GUI 基于 WPF 构建,只支持 Windows。
  • 处置:换 Web UI(npm start)或纯手动脚本路线,功能完全等价。

提示缺少 Microsoft.Graph.* 模块

  • 症状:脚本报Microsoft.Graph.Users等子模块不存在。
  • 原因:只装了主包但子模块没拉全,或整体版本太旧。
  • 处置:脚本会询问是否从 PowerShell Gallery 自动补装,选 Y 即可;也可以手动Update-Module Microsoft.Graph后重跑。

加分项:让环境更稳的进阶习惯

  • 手动精细部署:跳过界面直接跑单场景,cd scenarios后执行.\EntraGoat-Scenario1-Setup.ps1 -TenantId "你的租户ID",适合需要精确控制或排查的场景,脚本清单见 scenarios/。
  • 进度重置:完成状态存在%APPDATA%\EntraGoat\state.json,执行.\Start-EntraGoat.ps1 -Reset可一键清零。
  • 配额与节奏:别并行跑多个场景;setup 脚本内有 5~10 秒的对象复制等待,属正常现象,别中途掐掉。
  • 清理习惯:每打完一个场景就跑对应 cleanup,租户保持干净,下次 setup 就不会撞重名对象。

🚧 红线:合规三条底线

  • 仅用于教育和授权测试,不是生产环境的诊断工具。
  • 只在专用测试租户里跑,任何情况下远离生产数据。
  • 在授权范围内使用并遵守当地法规,完整条款见LICENSE。

跑通第一遍之后,重点不是把 6 个 flag 全交掉,而是回头看 setup 脚本里每一处配置错误是如何被利用起来的,那才是这套环境最值钱的部分。挑战详情在 docs/challenges.md,遇到问题回上面"翻车自救"一节对照处理即可。

【免费下载链接】EntraGoatA deliberately vulnerable Microsoft Entra ID environment. Learn identity security through hands-on, realistic attack challenges.项目地址: https://gitcode.com/GitHub_Trending/en/EntraGoat

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进