hacktricks/windows-hardening/active-directory-methodology/kerberos-double-hop-problem.md

7.9 KiB
Raw Blame History

Kerberos双跳问题

从零开始学习AWS黑客技术成为专家 htARTEHackTricks AWS红队专家

{% embed url="https://websec.nl/" %}

简介

当攻击者尝试在两个跳跃之间使用Kerberos身份验证就会出现Kerberos“双跳”问题例如使用PowerShell/WinRM

当通过Kerberos进行身份验证时,凭据不会被缓存在内存中。因此即使用户正在运行进程如果您运行mimikatz您也找不到用户在计算机上的凭据

这是因为连接Kerberos时会执行以下步骤

  1. User1提供凭据域控制器返回一个Kerberos TGT给User1。
  2. User1使用TGT请求一个服务票证连接到Server1。
  3. User1连接Server1并提供服务票证
  4. Server1没有缓存User1的凭据或User1的TGT。因此当来自Server1的User1尝试登录到第二个服务器时无法进行身份验证

无限制委派

如果PC上启用了无限制委派,则不会发生这种情况,因为服务器将获得访问它的每个用户的TGT。此外,如果使用无限制委派,您可能可以从中妥协域控制器
在无限制委派页面了解更多信息

CredSSP

另一种避免此问题的方式是明显不安全的凭据安全支持提供程序。来自Microsoft的说法

CredSSP身份验证将用户凭据从本地计算机委派到远程计算机。这种做法增加了远程操作的安全风险。如果远程计算机受到损害当凭据传递给它时这些凭据可以用于控制网络会话。

强烈建议在生产系统、敏感网络和类似环境中禁用CredSSP,因为存在安全风险。要确定CredSSP是否已启用,可以运行Get-WSManCredSSP命令。此命令允许检查CredSSP状态,甚至可以在启用WinRM的情况下远程执行。

Invoke-Command -ComputerName bizintel -Credential ta\redsuit -ScriptBlock {
Get-WSManCredSSP
}

解决方法

调用命令

为了解决双跳问题,提出了一种涉及嵌套Invoke-Command的方法。这并不能直接解决问题但提供了一种无需特殊配置的解决方法。该方法允许通过从初始攻击机器执行的PowerShell命令或通过与第一台服务器先前建立的PS-Session在第二台服务器上执行一个命令hostname)。以下是操作步骤:

$cred = Get-Credential ta\redsuit
Invoke-Command -ComputerName bizintel -Credential $cred -ScriptBlock {
Invoke-Command -ComputerName secdev -Credential $cred -ScriptBlock {hostname}
}

注册 PSSession 配置

绕过双跳问题的解决方案涉及使用 Register-PSSessionConfigurationEnter-PSSession。这种方法需要与 evil-winrm 不同的方法,并允许创建一个不受双跳限制影响的会话。

Register-PSSessionConfiguration -Name doublehopsess -RunAsCredential domain_name\username
Restart-Service WinRM
Enter-PSSession -ConfigurationName doublehopsess -ComputerName <pc_name> -Credential domain_name\username
klist

端口转发

对于中间目标上的本地管理员,端口转发允许将请求发送到最终服务器。使用 netsh可以添加一个端口转发规则同时还需要添加一个Windows防火墙规则来允许转发的端口。

netsh interface portproxy add v4tov4 listenport=5446 listenaddress=10.35.8.17 connectport=5985 connectaddress=10.35.8.23
netsh advfirewall firewall add rule name=fwd dir=in action=allow protocol=TCP localport=5446

winrs.exe

winrs.exe可以用于转发WinRM请求如果担心PowerShell监控这可能是一个不太容易被检测到的选项。下面的命令演示了它的用法

winrs -r:http://bizintel:5446 -u:ta\redsuit -p:2600leet hostname

OpenSSH

在第一个服务器上安装 OpenSSH 可以解决双跳问题,特别适用于跳板机场景。此方法需要在 Windows 上进行 CLI 安装和设置 OpenSSH。当配置为密码认证时这允许中间服务器代表用户获取 TGT。

OpenSSH 安装步骤

  1. 下载并将最新的 OpenSSH 发行版 zip 移动到目标服务器。
  2. 解压缩并运行 Install-sshd.ps1 脚本。
  3. 添加防火墙规则以打开端口 22 并验证 SSH 服务正在运行。

要解决 Connection reset 错误,可能需要更新权限以允许每个人在 OpenSSH 目录上具有读取和执行访问权限。

icacls.exe "C:\Users\redsuit\Documents\ssh\OpenSSH-Win64" /grant Everyone:RX /T

参考资料

{% embed url="https://websec.nl/" %}

从零开始学习AWS黑客技术成为专家 htARTE (HackTricks AWS Red Team Expert)!