一款 Python 侦察工具,旨在发现 Azure 服务并基于其响应信息归因租户所有权。
该工具帮助安全研究人员、渗透测试人员和 Azure 管理员发现与特定租户 ID 关联的 Azure 资源。
对资源名称测试 6 种不同的 Azure 服务及其子域:
.azurewebsites.net 和 .scm.azurewebsites.net)dev.azure.com).vault.azure.net).blob.core.windows.net).sharepoint.com).azuredatabricks.net)克隆或下载工具:
git clone https://github.com/NetSPI/ATEAM.git
cd ATEAM
安装所需依赖:
pip install -r requirements.txt
或手动安装:
pip install requests dnspython urllib3
验证安装:
python ateam.py --help
扫描单个资源:
python ateam.py -r "myapp"
扫描多个资源:
python ateam.py -r "app1" "app2" "app3"
从文本文件读取资源列表进行扫描:
python ateam.py -f resources.txt
详细输出,使用 20 个工作者线程:
python ateam.py -f resources.txt -v -w 20
生成排列并扫描:
python ateam.py -f resources.txt -p
使用更小的批次大小生成排列(推荐用于大规模扫描):
python ateam.py -f resources.txt -p -b 100
导出结果为 HTML:
python ateam.py -e html
清空数据库并重新开始:
python ateam.py -f resources.txt --clear
ATEAM/
├── ateam.py # 主脚本
├── requirements.txt # Python 依赖
├── permutations.txt # 资源名称排列文件
└── README.md # 本文件
permutations.txt 文件包含常见的前缀和后缀,用于生成资源名称的变体:
dev
prod
test
staging
api
web
...
这将生成如下组合:
devmyappmyappdevprodmyappmyapp-prod结果存储在 azure_tenants.db(SQLite)中,表结构如下:
resource_uri:发现的资源 URLresource_type:Azure 服务类型tenant_id:提取的租户 IDdiscovered_at:发现时间戳2025-06-27 14:37:39 - INFO - Found Storage Account tenant ID 72f988bf-86f1-41af-91ab-2d7cd011db47 for mars
2025-06-27 14:37:40 - INFO - Found App Service SCM tenant ID 'common' for notarealapplication
2025-06-27 14:37:47 - INFO - Found Key Vault tenant ID 72f988bf-86f1-41af-91ab-2d7cd011db47 for mdo
Resource URI Type Tenant ID Discovered At
-----------------------------------------------------------------------------------------------------------------
hanover.scm.azurewebsites.net AppServices-SCM 72f988bf-86f1-41af-91ab-2d7cd011db47 2025-06-27 21:37:41
dev.azure.com/microsoft DevOps 72f988bf-86f1-41af-91ab-2d7cd011db47 2025-06-27 21:37:12
mdo.vault.azure.net KeyVault 72f988bf-86f1-41af-91ab-2d7cd011db47 2025-06-27 21:37:47
mars.blob.core.windows.net StorageAccount 72f988bf-86f1-41af-91ab-2d7cd011db47 2025-06-27 21:37:46
⚠️ 重要提示:在扫描任何资源前,请确保您拥有适当的授权。未经授权的扫描可能违反服务条款或适用法律。
您可以启用详细日志以获取详细信息,但可能会产生大量输出:
python ateam.py -f resources.txt -v
如果在使用排列时遇到“killed”消息,请尝试减小批次大小:
python ateam.py -f resources.txt -p -b 100 -w 5
这将使用更少的并发工作者线程,以更小的批次处理资源,防止内存耗尽。
欢迎贡献!请随时提交:
| 选项 | 描述 | 示例 |
|---|
-f, --file | 包含资源的文件(每行一个) | -f resources.txt |
-r, --resources | 空格分隔的资源列表 | -r "app1" "app2" |
-w, --workers | 并发工作者线程数(默认:10) | -w 20 |
-b, --batch-size | 每批处理的资源数量(默认:1000) | -b 100 |
-v, --verbose | 启用详细日志输出 | -v |
-l, --list | 列出所有数据库条目 | -l |
-e, --export | 导出结果(csv、json、html) | -e html |
--clear | 扫描前清空数据库 | --clear |
-t, --tenant | 按租户 ID 过滤结果 | -t "tenant-id" |
-p, --permutations | 生成资源名称排列 | -p |