1️⃣ PKINIT & Pass-the-Certificate 概念
- PKINIT:Public 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
(强制计算机账户对任意主机进行认证)
- 示例流程:
- 启动 ntlmrelayx,指定目标 Web Enrollment。
- 等待受害者机器认证,或通过 Printer Spooler 强制触发。
- 成功中继后,获取证书并保存为 PFX 文件。
3️⃣ 从证书获取 TGT(Pass-the-Certificate)
- 工具:
PKINITtools
(Linux) - 流程:
- 克隆仓库并安装依赖:
git clone https://github.com/dirkjanm/PKINITtools.git python3 -m venv .venv source .venv/bin/activate pip3 install -r requirements.txt
如果遇到libcrypto
错误,安装oscrypto
。 - 使用证书生成 TGT:
python3 gettgtpkinit.py -cert-pfx DC01$.pfx -dc-ip <DC_IP> INLANEFREIGHT.LOCAL/DC01$ /tmp/dc.ccache
- 设置环境变量并验证:
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 认证并执行操作。
💡 总结逻辑链:
- 触发认证 / 获取证书 → 2. 生成 TGT(Pass-the-Certificate) → 3. Pass-the-Ticket 横向移动或 DCSync → 4. 影子凭据扩展攻击 → 5. 进一步横向移动 / 提权