12 KiB
Kerberos双跳问题
☁️ HackTricks云 ☁️ -🐦 推特 🐦 - 🎙️ Twitch 🎙️ - 🎥 YouTube 🎥
- 你在一家网络安全公司工作吗?你想在HackTricks中看到你的公司广告吗?或者你想获得PEASS的最新版本或下载PDF格式的HackTricks吗?请查看订阅计划!
- 发现我们的独家NFTs收藏品The PEASS Family
- 获取官方PEASS和HackTricks周边产品
- 加入💬 Discord群组或电报群组,或关注我在Twitter上的🐦@carlospolopm。
- 通过向hacktricks repo 和hacktricks-cloud repo 提交PR来分享你的黑客技巧。
简介
当攻击者尝试在两个跳跃中使用Kerberos身份验证时,就会出现Kerberos“双跳”问题,例如使用PowerShell/WinRM。
当通过Kerberos进行身份验证时,凭据不会被缓存在内存中。因此,即使用户正在运行进程,如果你运行mimikatz,你也找不到用户的凭据。
这是因为当使用Kerberos连接时,以下是步骤:
- 用户1提供凭据,域控制器返回一个Kerberos TGT给用户1。
- 用户1使用TGT请求一个服务票据以连接到Server1。
- 用户1连接到Server1并提供服务票据。
- Server1没有缓存用户1的凭据或用户1的TGT。因此,当来自Server1的用户1尝试登录到第二个服务器时,他无法进行身份验证。
无限制委派
如果PC上启用了无限制委派,则不会发生这种情况,因为服务器将获取每个访问它的用户的TGT。此外,如果使用无限制委派,你可能可以从中妥协域控制器。
在无限制委派页面上获取更多信息。
CredSSP
另一个建议的选项是系统管理员避免这个问题的方法是明显不安全的凭证安全支持提供程序(CredSSP)。启用CredSSP是多年来各种论坛上提到的解决方案。来自Microsoft的说法:
“CredSSP身份验证将用户凭据从本地计算机委派给远程计算机。这种做法增加了远程操作的安全风险。如果远程计算机受到攻击,当凭据传递给它时,凭据可以用于控制网络会话。”
如果在生产系统、敏感网络等地方发现启用了CredSSP,建议将其禁用。可以通过运行Get-WSManCredSSP
快速检查CredSSP状态。如果启用了WinRM,还可以远程执行该命令。
Invoke-Command -ComputerName bizintel -Credential ta\redsuit -ScriptBlock {
Get-WSManCredSSP
}
解决方法
调用命令
这种方法可以说是在处理双跳问题时的一种“合作方式”,并不是真正解决问题的方法。它不依赖于任何配置,你可以直接从攻击者的机器上运行它。它基本上是一个嵌套的Invoke-Command
。
这将在第二台服务器上运行 hostname
:
$cred = Get-Credential ta\redsuit
Invoke-Command -ComputerName bizintel -Credential $cred -ScriptBlock {
Invoke-Command -ComputerName secdev -Credential $cred -ScriptBlock {hostname}
}
您还可以与第一个服务器建立一个PS-Session,然后直接从那里使用Invoke-Command
和$cred
运行命令,而不是嵌套执行。尽管如此,从攻击者的机器上运行可以集中任务:
# From the WinRM connection
$pwd = ConvertTo-SecureString 'uiefgyvef$/E3' -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential('DOMAIN\username', $pwd)
# Use "-Credential $cred" option in Powerview commands
注册 PSSession 配置
如果不使用 evil-winrm
,而是使用 Enter-PSSession
命令,您可以使用 Register-PSSessionConfiguration
并重新连接以绕过双跳问题:
# Register a new PS Session configuration
Register-PSSessionConfiguration -Name doublehopsess -RunAsCredential domain_name\username
# Restar WinRM
Restart-Service WinRM
# Get a PSSession
Enter-PSSession -ConfigurationName doublehopsess -ComputerName <pc_name> -Credential domain_name\username
# Check that in this case the TGT was sent and is in memory of the PSSession
klist
# In this session you won't have the double hop problem anymore
端口转发
由于我们在中间目标 bizintel: 10.35.8.17 上拥有本地管理员权限,您可以添加一个端口转发规则,将您的请求发送到最终/第三个服务器 secdev: 10.35.8.23。
可以使用 netsh 快速提取一个一行命令并添加规则。
netsh interface portproxy add v4tov4 listenport=5446 listenaddress=10.35.8.17 connectport=5985 connectaddress=10.35.8.23
所以第一个服务器正在监听端口5446,并将命中5446端口的请求转发到第二个服务器的5985端口(也称为WinRM)。
然后,在Windows防火墙中打开一个洞,这也可以通过一个简洁的netsh命令完成。
netsh advfirewall firewall add rule name=fwd dir=in action=allow protocol=TCP localport=5446
现在建立会话,它将把我们转发到第一个服务器。
winrs.exe
当使用**winrs.exe
**时,端口转发 WinRM 请求似乎也可以工作。如果你意识到 PowerShell 正在被监视,这可能是一个更好的选择。下面的命令将返回hostname
的结果为“secdev”。
winrs -r:http://bizintel:5446 -u:ta\redsuit -p:2600leet hostname
就像Invoke-Command
一样,这可以很容易地通过脚本化来实现,以便攻击者可以将系统命令作为参数发出。一个通用的批处理脚本示例_winrm.bat_:
OpenSSH
这种方法需要在第一个服务器上安装OpenSSH。在Windows上安装OpenSSH可以完全通过CLI完成,而且不需要太多时间 - 而且它不会被标记为恶意软件!
当然,在某些情况下,这可能不可行,过于繁琐,或者可能是一种一般的OpSec风险。
这种方法在跳板机设置上可能特别有用 - 可以访问一个否则无法访问的网络。一旦建立了SSH连接,用户/攻击者可以根据需要发起多个New-PSSession
来针对分段网络进行操作,而不会遇到双跳问题。
当配置OpenSSH使用密码身份验证(而不是密钥或Kerberos)时,登录类型为8,也就是_网络明文登录_。这并不意味着您的密码以明文形式发送 - 实际上它是通过SSH加密的。到达目的地后,它通过其身份验证包解密为明文,以便为您的会话进一步请求有价值的TGT!
这允许中间服务器代表您请求和获取一个TGT,并在中间服务器上本地存储。然后,您的会话可以使用此TGT对其他服务器进行身份验证(PS远程)。
OpenSSH安装场景
从github下载最新的OpenSSH发布zip到您的攻击机,并将其移动到(或直接下载到)跳板机。
将zip文件解压到您想要的位置。然后,运行安装脚本 - Install-sshd.ps1
最后,只需添加一个防火墙规则来打开端口22。验证SSH服务是否已安装,并启动它们。这两个服务都需要运行才能使SSH工作。
如果收到Connection reset
错误,请更新权限以允许根OpenSSH目录上的Everyone: Read & Execute。
icacls.exe "C:\Users\redsuit\Documents\ssh\OpenSSH-Win64" /grant Everyone:RX /T
参考资料
- https://techcommunity.microsoft.com/t5/ask-the-directory-services-team/understanding-kerberos-double-hop/ba-p/395463?lightbox-message-images-395463=102145i720503211E78AC20
- https://posts.slayerlabs.com/double-hop/
- https://learn.microsoft.com/en-gb/archive/blogs/sergey_babkins_blog/another-solution-to-multi-hop-powershell-remoting
- https://4sysops.com/archives/solve-the-powershell-multi-hop-problem-without-using-credssp/
☁️ HackTricks 云 ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- 你在一家网络安全公司工作吗?想要在 HackTricks 中宣传你的公司吗?或者想要获取 PEASS 的最新版本或下载 HackTricks 的 PDF吗?请查看订阅计划!
- 发现我们的独家NFTs收藏品——The PEASS Family
- 获得官方 PEASS & HackTricks 商品
- 加入💬 Discord 群组 或 Telegram 群组,或者关注我在Twitter上的🐦@carlospolopm。
- 通过向hacktricks 仓库 和hacktricks-cloud 仓库 提交 PR 来分享你的黑客技巧。