只读的 Azure DevOps 枚举工具,通过查询 REST API 在授权的安全评估期间展示项目、仓库、服务连接、构建、管道机密、权限和分支策略。
一个使用个人访问令牌(PAT)枚举 Azure DevOps 组织的命令行工具。它通过查询 Azure DevOps REST API 来呈现项目、仓库、服务连接、构建、构建产物和安全设置 — 在对 ADO 环境进行授权安全评估时非常有用。
功能范围与 ADOKit 类似。主要区别:采用 Python 实现,因此更具可移植性;该工具专注于只读枚举,并且能够枚举权限。
Azure DevOps enumeration tool — projects, repositories, service connections, and more.
positional arguments:
{projects,repos,service-endpoints,builds,build-logs,search-code,enumerate,permissions,whoami,pipeline-vars,pipeline-secrets,variable-groups,secure-files,approvals-checks,branch-policies,build-artifacts}
projects 列出组织中的项目。
repos 列出组织中的 Git 仓库。
service-endpoints 枚举服务连接。
builds 列出项目的构建。
build-logs 下载构建日志。
search-code 跨仓库搜索代码。
enumerate 枚举当前登录用户、仓库、服务连接和项目。
permissions 列出组、安全命名空间和 ACL 权限。
whoami 识别已认证的用户并列出其组成员资格。
pipeline-vars 列出构建管道中定义的所有变量。
pipeline-secrets 列出构建管道中定义的秘密变量名称。
variable-groups 列出变量组中定义的变量。
secure-files 列出项目中注册的安全文件。
approvals-checks 枚举受保护管道资源的审批和检查。
branch-policies 枚举仓库的分支策略。
build-artifacts 列出并下载构建产物。
options:
-h, --help 显示此帮助信息并退出
--org ORG Azure DevOps 组织名称(例如 myorg)
--pat PAT 个人访问令牌。如果省略,则读取 AZURE_DEVOPS_PAT 或 ADO_PAT 环境变量。
-k, --insecure 禁用 TLS 验证(使用拦截代理时有用)。
pip install git+https://github.com/ReversecLabs/azuredevops-enum.git
安装后,ado-enum 命令将位于您的 PATH 中。
git clone https://github.com/ReversecLabs/azuredevops-enum.git
cd ado-enum
pip install .
或者不安装直接运行:
pip install -r requirements.txt
python ado_enum.py --help
通过 --pat 标志或环境变量提供您的 PAT:
export AZURE_DEVOPS_PAT=<your-pat>
# 或
export ADO_PAT=<your-pat>
ado-enum --org <ORG> [--pat <PAT>] [-k] <command> [options]
projects — 列出项目ado-enum --org myorg projects
ado-enum --org myorg projects --json
repos — 列出仓库ado-enum --org myorg repos
ado-enum --org myorg repos --json
service-endpoints — 枚举服务连接ado-enum --org myorg service-endpoints
ado-enum --org myorg service-endpoints --project "MyProject"
ado-enum --org myorg service-endpoints --json
builds — 列出构建ado-enum --org myorg builds
ado-enum --org myorg builds --project "MyProject"
build-logs — 下载构建日志# 下载所有项目中所有构建的日志
ado-enum --org myorg build-logs --output-dir ./logs
# 下载特定构建的日志
ado-enum --org myorg build-logs --project "MyProject" --build-id 42 --output-dir ./logs
search-code — 跨仓库搜索代码需要在组织中安装 Code Search 扩展(ms.vss-code-search)。
ado-enum --org myorg search-code "password"
ado-enum --org myorg search-code "connectionString"
输出为 JSON,包含匹配的文件 URL 及匹配的行。
enumerate — 枚举分支策略、检查和权限ado-enum --org myorg enumerate
ado-enum --org myorg enumerate --project "MyProject"
输出以下方面的表格:
permissions — 列出组、安全命名空间和 ACL 权限# 列出所有组和 ACL 权限
ado-enum --org myorg permissions
# 列出限定到特定项目的组
ado-enum --org myorg permissions --project "MyProject"
# 仅列出组织级别组
ado-enum --org myorg permissions --org-level
# 显示特定用户的组和权限
ado-enum --org myorg permissions --user "[email protected]"
# 显示特定组的权限
ado-enum --org myorg permissions --group "Project Administrators"
要求 PAT 具有 Graph(读取) 和 Identity(读取) 作用域,以完全解析组成员资格和 ACL 条目。
whoami — 识别已认证用户ado-enum --org myorg whoami
读取 x-vss-userdata 头部以识别 PAT 所有者,然后查询 Graph API 以解析其显示名称、目录别名和组成员资格。
要求 PAT 具有 Graph(读取) 作用域以解析组成员资格。
pipeline-vars — 列出管道变量ado-enum --org myorg pipeline-vars
ado-enum --org myorg pipeline-vars --project "MyProject"
ado-enum --org myorg pipeline-vars --json
列出构建管道定义中定义的所有非秘密变量。秘密变量被排除;使用 pipeline-secrets 来枚举它们。
pipeline-secrets — 列出管道秘密变量名称ado-enum --org myorg pipeline-secrets
ado-enum --org myorg pipeline-secrets --project "MyProject"
ado-enum --org myorg pipeline-secrets --json
列出构建管道定义中标记为 isSecret 的变量。API 不会暴露值,因此显示为 [HIDDEN];该命令显示它们的名称、所属管道以及所在项目。
variable-groups — 列出变量组内容ado-enum --org myorg variable-groups
ado-enum --org myorg variable-groups --project "MyProject"
ado-enum --org myorg variable-groups --json
列出跨项目变量组中存储的所有变量。组内的秘密变量会显示其名称和 [HIDDEN] 值。
secure-files — 列出安全文件ado-enum --org myorg secure-files
ado-enum --org myorg secure-files --project "MyProject"
ado-enum --org myorg secure-files --json
列出 ADO Pipelines 库中注册的安全文件。不会下载文件内容;命令返回元数据:文件名、ID、创建者及创建时间。
approvals-checks — 枚举受保护资源的审批和检查# 枚举所有项目中所有资源类型
ado-enum --org myorg approvals-checks
# 枚举特定资源类型
ado-enum --org myorg approvals-checks repositories
ado-enum --org myorg approvals-checks service-connections
# 限定到特定项目
ado-enum --org myorg approvals-checks --project "MyProject"
ado-enum --org myorg approvals-checks environments --project "MyProject"
# JSON 输出
ado-enum --org myorg approvals-checks --json
支持的资源类型:agent-pools、environments、repositories、secure-files、service-connections、variable-groups。如果未指定资源类型,则枚举所有类型。
branch-policies — 枚举仓库的分支策略# 列出仓库的所有分支策略
ado-enum --org myorg branch-policies --project "MyProject" --repository "MyRepo"
# 过滤到特定分支
ado-enum --org myorg branch-policies --project "MyProject" --repository "MyRepo" --branch main
# JSON 输出
ado-enum --org myorg branch-policies --project "MyProject" --repository "MyRepo" --json
--project 和 --repository 是必需的。--branch 是可选的;若不指定,则返回仓库的所有策略。
build-artifacts — 列出并下载构建产物# 列出所有产物
ado-enum --org myorg build-artifacts
# 下载所有产物
ado-enum --org myorg build-artifacts --download
# 下载特定构建的所有产物
ado-enum --org myorg build-artifacts --project "MyProject" --build-id 42 --download
# 下载指定名称的产物
ado-enum --org myorg build-artifacts --project "MyProject" --build-id 42 \
--download --artifact-name "drop" --output-dir ./artefacts
当通过拦截代理路由时,使用 -k 禁用 TLS 验证:
proxychains ado-enum --org myorg -k projects
或者设置 HTTPS_PROXY / HTTP_PROXY 环境变量 — requests 库会自动使用它们。
| 标志 | 描述 |
|---|
--org | 组织名称(例如来自 https://dev.azure.com/myorg 的 myorg) |
--pat | PAT 令牌(或设置 AZURE_DEVOPS_PAT / ADO_PAT) |
-k / --insecure | 禁用 TLS 验证(使用拦截代理时有用) |