Kerberos Double Hop Problem
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Kerberos "双跳" 问题出现在攻击者试图在两个跳跃之间使用 Kerberos 认证 时,例如使用 PowerShell/WinRM。
当通过 Kerberos 进行 认证 时,凭据 不会 被缓存到 内存 中。因此,即使用户正在运行进程,运行 mimikatz 时也 找不到凭据。
这是因为连接 Kerberos 时的步骤如下:
用户1提供凭据,域控制器 返回一个 Kerberos TGT 给用户1。
用户1使用 TGT 请求一个 服务票据 以 连接 到服务器1。
用户1 连接 到 服务器1 并提供 服务票据。
服务器1 没有 缓存用户1的 凭据 或用户1的 TGT。因此,当用户1从服务器1尝试登录到第二台服务器时,他 无法进行认证。
如果在 PC 上启用了 不受限制的委派,则不会发生这种情况,因为 服务器 将 获取 每个访问它的用户的 TGT。此外,如果使用不受限制的委派,您可能可以 从中妥协域控制器。 更多信息请参见不受限制的委派页面。
另一种避免此问题的方法是 显著不安全 的 凭据安全支持提供程序。来自微软的说明:
CredSSP 认证将用户凭据从本地计算机委派到远程计算机。这种做法增加了远程操作的安全风险。如果远程计算机被攻陷,当凭据被传递给它时,这些凭据可以用来控制网络会话。
由于安全问题,强烈建议在生产系统、敏感网络和类似环境中禁用 CredSSP。要确定 CredSSP 是否启用,可以运行 Get-WSManCredSSP
命令。此命令允许 检查 CredSSP 状态,并且可以在启用 WinRM 的情况下远程执行。
为了解决双跳问题,提出了一种涉及嵌套 Invoke-Command
的方法。这并没有直接解决问题,但提供了一种无需特殊配置的变通方法。该方法允许通过从初始攻击机器执行的 PowerShell 命令或通过与第一服务器之前建立的 PS-Session,在第二台服务器上执行命令(hostname
)。以下是具体操作步骤:
另外,建议与第一个服务器建立 PS-Session,并使用 $cred
运行 Invoke-Command
来集中任务。
绕过双跳问题的解决方案涉及使用 Register-PSSessionConfiguration
和 Enter-PSSession
。这种方法需要与 evil-winrm
不同的方式,并允许一个不受双跳限制的会话。
对于中介目标上的本地管理员,端口转发允许请求发送到最终服务器。使用 netsh
,可以添加一个端口转发规则,以及一个 Windows 防火墙规则以允许转发的端口。
winrs.exe
可用于转发 WinRM 请求,如果 PowerShell 监控是一个问题,它可能是一个不太容易被检测到的选项。下面的命令演示了它的用法:
在第一台服务器上安装 OpenSSH 可以为双跳问题提供解决方法,特别适用于跳板机场景。此方法需要在 Windows 上通过 CLI 安装和设置 OpenSSH。当配置为密码认证时,这允许中介服务器代表用户获取 TGT。
下载并将最新的 OpenSSH 发布 zip 移动到目标服务器。
解压并运行 Install-sshd.ps1
脚本。
添加防火墙规则以打开 22 端口,并验证 SSH 服务是否正在运行。
为了解决 Connection reset
错误,可能需要更新权限,以允许所有人对 OpenSSH 目录的读取和执行访问。
学习与实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE) 学习与实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)