其他分享
首页 > 其他分享> > Kerberos双跳变通办法

Kerberos双跳变通办法

作者:互联网

Kerberos双跳变通办法

这篇文章将介绍一些快速而邪恶的解决方法,以克服在Windows环境中进行红队活动时可怕的两次跳跃问题。这篇文章中介绍的方法也涉及到一般的Windows横向移动技术-而不仅仅是双跳解决方案。

如果您必须横向移动或在Windows环境中进行常规系统管理,那么您可能会遇到这个障碍-特别是Powershell Remoting / WinRM。如果您不确定什么是两次跳转问题,下面将对其进行简要介绍。否则,请查阅此Microsoft文章以获得更好的主意。

当您的攻击方具有内部网络访问权限,但未加入域时,此帖子将关注一个场景(从红色团队成员的角度出发)。还假设您作为攻击者仅具有CLI访问权限,并且具有“本地管理员”资格-而且在整个域中都启用了WinRM。

笔记
列出的方法并不全面。通常,这些方法将取决于环境配置,权限,收获的凭据等。

WinRM双跳蓝调*

这是问题的经典示例。左侧是从攻击者框到第一个目标跃点(bizintel)的PowerShell远程会话。右侧是直接终端到teltel。两者都在远程目标secdev上运行dir命令。
Kerberos双跳
下面是另一个示例,显示了teltel上的PS远程会话,然后尝试将另一个PS远程会话插入secdev。类似于跳箱情况。
PS远程双跳
如果PS远程处理的功能与Linux上通过SSH跳来跳去的功能相同,那会很好吗?不,这不容易!

Microsoft解决方案

此问题是设计使然(Kerberos),Microsoft提供了解决此问题的解决方案。尽管从某种意义上说,人们可能无权或无权进行某些更改,尤其是基于资源的委派的最安全的解决方案。

相对于此博客文章,这是MS提供解决方案的最新文章。提到的建议的更高安全性方法是“基于资源的约束委派”。由于这是一个红色的团队职位,并且我们还没有Domain Admin,因此我们将避免涉及此内容。此外,此处不会介绍CredSSP技术。

调用命令

这种方法有点像“双跳”问题,“不一定”可以解决。它不依赖任何配置,您只需在攻击框中运行它即可。它基本上是一个嵌套的Invoke-Command。

这将在第三个服务器secdev上运行主机名。

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

笨拙的,但是可以照本宣科。
PS远程调用命令
您还可以使用bizintel建立PS-Session,然后从那里直接运行带有$ cred的Invoke-Command。虽然,从攻击框中运行它可以集中执行任务。

端口代理

由于我们在中间目标teltel: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

因此,bizintel正在侦听端口5446,并将转发5446的请求转发到secdev端口5985(又名WinRM)。

然后在Windows防火墙上打一个洞,这也可以使用快速的netsh单行程序完成。

netsh advfirewall firewall add rule name=fwd dir=in action=allow protocol=TCP localport=5446

现在建立会话,它将把我们转发到secdev。
PS远程调用命令

winrs.exe

使用winrs.exe时,Portforwarding WinRM请求似乎也可以工作。如果您知道正在监视PowerShell,那么这可能是一个更好的选择。下面的命令将“ secdev”作为主机名的结果。

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

像Invoke-Command一样,它可以很容易地编写脚本,因此攻击者可以简单地将系统命令作为参数发出。通用批处理脚本示例winrm.bat:
PS远程调用命令

笔记
如果您正在阅读TheSprawl实验室范围内的此书并杀死他们,则用户redsuit的密码不是2600leet,如上所示le

OpenSSH

此方法需要在中介盒(也称为bizintel)上安装OpenSSH。可以完全通过CLI完成Windows版OpenSSH的安装,完全不需要花费很多时间,而且它也不会标记为恶意软件!

当然,在某些情况下,这可能不可行,太麻烦或可能是OpSec的一般风险。

此方法在跳箱设置中特别有用-可以访问否则无法访问的网络。建立SSH连接后,用户/攻击者可以根据需要针对分段网络触发尽可能多的New-PSSession,而不会引发双跳问题。

当配置为在OpenSSH中使用密码身份验证(不是密钥或Kerberos)时,登录类型为8,即网络明文登录。这并不意味着您的密码是明文发送的,实际上是通过SSH加密的。到达后,它会通过其身份验证包将其加密为未加密的明文,以供您会话,以便进一步请求多汁的TGT!

这使中间服务器可以代表您请求并获取TGT,以将其本地存储在中间服务器上。然后,您的会话可以使用此TGT对其他服务器进行身份验证(PS远程)。

OpenSSH安装方案

从github下载最新的OpenSSH Release zip到您的攻击框中,然后将其移到上方(或直接将其下载到跳转框中)。

将zip解压缩到您想要的位置。然后,运行安装脚本-Install-sshd.ps1
PS远程调用命令

最后,只需添加防火墙规则以打开端口22。验证已安装SSH服务,然后启动它们。这两个服务都需要运行才能使SSH正常工作。
PS远程调用命令
如果收到连接重置错误,请更新权限以允许“所有人:在OpenSSH根目录上读取并执行”。

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

现在将它们放在一起。
PS远程调用命令

检测恶意使用

除了拥有一个用于监视Powershell活动的系统之外,您还可以在本地或远程检查一些配置,这些配置可能指向恶意的双跳用法(或其他安全问题)。

检测端口转发

使用netsh.exe进行快速本地检查以列出所有转发的端口。默认情况下,不应转发任何端口。

netsh interface portproxy show all

否则,请通过PS远程处理进行远程检查-也可以编写脚本以涵盖整个域。

Invoke-Command -ComputerName bizintel -Credential ta\redsuit -ScriptBlock {
    netsh interface portproxy show all
}

如果整个域都禁用了WinRM,但是您仍然想远程检查转发的端口,则可以使用wmic.exe

wmic /node:bizintel /user:ta\redsuit /password:2600leet process call create 'cmd.exe /c netsh interface portproxy show all'

CredSSP

凭据安全支持提供程序是另一种明显不安全的方法。多年来,启用CredSSP一直是各种论坛上提到的解决方案。从Microsoft:

“ CredSSP身份验证将用户凭据从本地计算机委派给远程计算机。这种做法增加了远程操作的安全风险。如果远程计算机受到威胁,则在将凭据传递给它时,可以使用凭据来控制网络会话。”

如果发现在生产系统,敏感网络等上启用了CredSSP,建议将其禁用。快速检查CredSSP状态的方法是运行Get-WSManCredSSP。如果启用了WinRM,则可以远程执行。

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

检测服务器委派

另一个值得检查的配置是Kerberos委派。如前所述,配置受约束/不受约束的委托是Microsoft提供的解决双跳问题的解决方案。

攻击者不仅需要本地管理员来配置kerberos计算机委派,因此,如果发现恶意委派设置,则可能会遇到更大的问题。

您可以使用PowerView模块快速发现不受约束(坏!)或受约束的委托的主机。

Get-DomainComputer -Unconstrained
Get-DomainComputer -TrustedToAuth

*笔记
了解您的网络。仅仅因为这些命令和模块可能会拉回许多结果,并不意味着它们已被恶意配置。

概括*

请记住,如果您管理Windows网络,请确保遵循MS最佳实践指导,而不要遵循此帖子。

如果您发现这篇文章很有用,并且希望获得一些远程实验室动手操作,请确保签出可用范围。如果您特别想练习WinRM / PS远程处理,则可以在TheSprawl实验室范围的最终域中启用它-包括本文中讨论的teltel和secev。尽管有所建议,但不建议初学者使用TheSprawl。

标签:secdev,netsh,变通办法,Kerberos,WinRM,bizintel,OpenSSH,远程,双跳
来源: https://blog.csdn.net/weixin_51387754/article/details/116227477