# 哈希传递 Pass The Hash

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

我们之前讲过 **NTLM 认证**的步骤，让我们再来回顾一下：

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-05/scaled-1680-/DWcjlqWIdXXrcPrU-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-05/DWcjlqWIdXXrcPrU-image.png)

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

### **接触 LSASS**

##### **Mimikatz 的 PTH**

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

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-05/scaled-1680-/i6hTx0IYDyzuSxST-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-05/i6hTx0IYDyzuSxST-image.png)

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-05/scaled-1680-/HdhTjSG8zvFf0a0f-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-05/HdhTjSG8zvFf0a0f-image.png)

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

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

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

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-05/scaled-1680-/Pa8fWvsdfmyowkOI-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-05/Pa8fWvsdfmyowkOI-image.png)

#####   


### **不接触 LSASS**

##### **Impacket 之 psexec**

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

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-05/scaled-1680-/i7z4queQBSFOWhzu-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-05/i7z4queQBSFOWhzu-image.png)

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

##### **Impacket 之 mssqlclient**

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

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-05/scaled-1680-/Jgnxs6LMlUYPVQsq-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-05/Jgnxs6LMlUYPVQsq-image.png)

##### **Impacket 之 secretdump**

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

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-05/scaled-1680-/NhmmReZLIq9v7ChD-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-05/NhmmReZLIq9v7ChD-image.png)

##### **CrackMapExec 中各项功能**

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

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-05/scaled-1680-/n6njyctkdRQyouNB-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-05/n6njyctkdRQyouNB-image.png)

##### **xfreerdp 的 PTH 认证**

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

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

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-05/scaled-1680-/1Aga8XjY78KHtuYa-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-05/1Aga8XjY78KHtuYa-image.png)

然而，我们会得到这样的报错：

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-05/scaled-1680-/uhtY6g6oMlmWQ3dK-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-05/uhtY6g6oMlmWQ3dK-image.png)

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

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

 [![image.png](https://raven-medicine.com/uploads/images/gallery/2023-05/scaled-1680-/3Hq4gG7EN6sx3O3s-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-05/3Hq4gG7EN6sx3O3s-image.png)

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

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-05/scaled-1680-/NJMUhNZJd8ZURmIt-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-05/NJMUhNZJd8ZURmIt-image.png)

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

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

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-05/scaled-1680-/S67E1w5sh1DN8EgI-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-05/S67E1w5sh1DN8EgI-image.png)