Skip to main content

哈希传递 Pass The Hash

Pass The Hash,即哈希传递,是一种可以让我们使用 NTLM 哈希对 Windows 服务进行认证,而无需明文密码的技术。在上一个小节,我们讨论了如果只有 NTLM 哈希,要实现用户模仿该怎么做的时候有提到 PTH,在这一小节我们继续延伸和补充一下。

我们之前讲过 NTLM 认证的步骤,让我们再来回顾一下:

image.png

哈希传递认证可以跳过上图中的第一步,通过使用例如 Mimikatz 之类的工具实现。需要注意的是,哈希传递攻击仅可以用于 NTLM 认证,而非 Kerberos 认证。一些安全工具,例如 Impacket, 不仅可以通过 PTH 认证,而且还可以实现代码执行,而这之后的原理则是攻击者通过 SMB 协议使用 NTLM 哈希连接目标服务器。大部分工具通过 Service Control Manager API 开启一个新的 Windows 服务并且通过命名管道来通信。这项技术需要与目标 SMB 服务的连通,并且可以访问目标主机的 ADMIN$ (在 ADMIN$ 中写入一个服务二进制文件),这意味着需要本地管理员权限。接下来,我们来看看常见的 PTH 用法。


接触 LSASS

Mimikatz 的 PTH

我们可以通过以下命令创建一个新的牺牲会话,并用我们提供的帐号NTLM 哈希域信息来替换占位符信息。

image.png

image.png

该方法需要本地管理员特权,并且该操作会与 LSASS 交互,而且如果 PPL 启用的话,也会失败。

 sekurlsa::pth /user:<用户名> /domain:<域> /ntlm:<ntlm> 

执行该命令需要本地管理员特权,但被认证的用户不需要有本地管理员权限。

image.png


不接触 LSASS

Impacket 之 psexec

如上文所说,psexec不仅可以通过 PTH 认证,还能实现远程代码执行。原理则是通过 SMB 服务进行认证,在目标的 ADMIN$ 上传服务二进制文件,再通过 SCM 创建新的服务并获得 shell。需要目标用户对目标主机具有本地管理员特权。

image.png

在 psexec 的日志信息中,我们可以窥探到中间的过程。


Impacket 之 mssqlclient

Impacket 不仅可以协助我们通过 PTH 认证获得远程代码执行,但是我们也可用于访问特定服务,例如 MSSQL。

image.png


Impacket 之 secretdump

除此之外,PTH 还可以通过 Impacket 来远程导出目标主机的凭证,包含 SAM 数据库、域缓存凭证、DPAPI、LSA 机密等内容。原理为在认证之后通过操纵远程注册表来进行凭证导出操作,需要认证用户具有本地管理员权限。

image.png


CrackMapExec 中各项功能

除了 Impacket 外,我们之前提到过 CME (https://github.com/Porchetta-Industries/CrackMapExec) 也是一款内网渗透瑞士军刀,其功能越发丰富和完整。CME 可以用于 AD 枚举与利用、密码喷洒、权限确认 (例如该用户对目标主机是否具有 WinRM 访问权)、代码执行等。

image.png


xfreerdp 的 PTH 认证

我们甚至可以通过 PTH 来访问远程主机的 RDP 服务,这里我们需要用到工具 xfreerdp。

xfreerdp /v:<IP> /u:<用户名> /d:<域名 FQDB> /pth:<哈希> /dynamic-resolution 

image.png

然而,我们会得到这样的报错:

image.png

因此,我们需要开启受限管理模式。受限管理模式,即 Restricted Admin,可以防止用户通过 RDP 访问目标主机后,在目标主机上留下凭证 (NTLM哈希)。在受限管理模式下,用户使用的是网络认证交互式认证。我们可以通过以下 Powershell 命令取消禁用受限管理模式 (即开启)。

New-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\Lsa" -Name DisableRestrictedAdmin -Value 0

 image.png

然后,我们就可以通过 xfreerfp 使用 PTH 访问 RDP 服务了。

image.png

当然,因为在受限管理模式下,RDP 是通过网络认证访问,我们也可以在 Mimikatz 中 直接进行 PTH 认证后通过网络认证访问 RDP 服务。

sekurlsa::pth /user:<用户> /domain:<域 FQDN> /ntlm:<NTLM 哈希> /run:"mstsc.exe /restrictedadmin"

image.png