Pass the Certificate

1️⃣ PKINIT & Pass-the-Certificate 概念

  • PKINITPublic Key Cryptography for Initial Authentication,Kerberos 的扩展,允许在初始身份验证(AS 请求)期间使用公钥加密。
  • 典型用途:智能卡登录或基于证书的身份验证。
  • 攻击利用
    • 成功获取目标用户或计算机的 TGT(Ticket Granting Ticket)
    • 配合 AD CS(Active Directory Certificate Services)攻击和 **Shadow Credentials(影子凭据)**使用。

2️⃣ AD CS NTLM 中继攻击(ESC8)

  • ESC8:针对 ADCS HTTP 端点的 NTLM 中继攻击。
  • 适用场景:
    • ADCS 配置允许 Web 注册(Web Enrollment/CertSrv)。
    • 攻击者可中继入站认证请求,颁发证书。
  • 常用工具
    • impacket-ntlmrelayx(中继认证到 Web 注册服务)
    • printerbug.py(强制计算机账户对任意主机进行认证)
  • 示例流程
    1. 启动 ntlmrelayx,指定目标 Web Enrollment。
    2. 等待受害者机器认证,或通过 Printer Spooler 强制触发。
    3. 成功中继后,获取证书并保存为 PFX 文件。

3️⃣ 从证书获取 TGT(Pass-the-Certificate)

  • 工具:PKINITtools(Linux)
  • 流程:
    1. 克隆仓库并安装依赖: git clone https://github.com/dirkjanm/PKINITtools.git python3 -m venv .venv source .venv/bin/activate pip3 install -r requirements.txt 如果遇到 libcrypto 错误,安装 oscrypto
    2. 使用证书生成 TGT: python3 gettgtpkinit.py -cert-pfx DC01$.pfx -dc-ip <DC_IP> INLANEFREIGHT.LOCAL/DC01$ /tmp/dc.ccache
    3. 设置环境变量并验证: export KRB5CCNAME=/tmp/dc.ccache klist
  • 成功后,可执行 Pass-the-Ticket(PtT) 攻击,如 DCSync 获取 NTLM 哈希。

4️⃣ Shadow Credentials(影子凭据)

  • msDS-KeyCredentialLink 属性存储可用于 PKINIT 的公钥。
  • 攻击方法:
    • 利用拥有写权限的用户写入目标用户的 msDS-KeyCredentialLink
    • 工具:pywhisker
    • 流程: pywhisker --dc-ip <DC_IP> -d INLANEFREIGHT.LOCAL -u wwhite -p '<password>' --target jpinkman --action add
    • 生成 PFX 文件,使用 gettgtpkinit.py 获取 TGT。
    • 成功后依然可以 PtT 横向移动。

5️⃣ 横向移动与远程利用

  • 使用获得的 TGT,可以:
    • Kerberos 认证到目标机器(Evil-WinRM)
    • 执行 DCSync / Lateral Movement / 高权限操作
  • 注意:某些环境中证书可能无法直接用于 PKINIT,此时可使用 PassTheCert 工具对 LDAPS 认证并执行操作。

💡 总结逻辑链

  1. 触发认证 / 获取证书 → 2. 生成 TGT(Pass-the-Certificate) → 3. Pass-the-Ticket 横向移动或 DCSync → 4. 影子凭据扩展攻击 → 5. 进一步横向移动 / 提权
上一篇