相关概念
一、NTLM hash和Net-NTLM hash
1、NTLM hash是指Windows系统下Security Account Manager中保存的用户密码hash
该hash的生成方法:
- 将明文口令转换成十六进制的格式
- 转换成Unicode格式,即在每个字节之后添加0x00
- 对Unicode字符串作MD4加密,生成32位的十六进制数字串
在渗透测试中,通常可从Windows系统中的SAM文件和域控的NTDS.dit文件中获得所有用户的hash,通过Mimikatz读取lsass.exe进程能获得已登录用户的NTLM hash
2、Net-NTLM hash是指网络环境下NTLM认证中的hash
NTLM认证采用质询/应答(Challenge/Response)的消息交换模式,流程如下:
- 客户端向服务器发送一个请求,请求中包含明文的登录用户名。服务器会提前存储登录用户名和对应的密码hash
- 服务器接收到请求后,生成一个16位的随机数(这个随机数被称为Challenge),明文发送回客户端。使用存储的登录用户密码hash加密Challenge,获得Challenge1
- 客户端接收到Challenge后,使用登录用户的密码hash对Challenge加密,获得Challenge2(这个结果被称为response),将response发送给服务器
- 服务器接收客户端加密后的response,比较Challenge1和response,如果相同,验证成功
在以上流程中,登录用户的密码hash即 NTLM hash ,response中包含 Net-NTLM hash
在NTLM认证中,NTLM响应分为NTLMv1,NTLMv2,NTLM session v2三种协议,不同协议使用不同格式的Challenge和加密算法
所以也就存在不同协议的Net-NTLM hash,即Net-NTLMv1 hash,Net-NTLMv2 hash
从攻击角度来看
可以利用NTLM哈希值进行"哈希传递"攻击
无法利用Net-NTLM哈希值来进行"哈希传递"攻击
二、NTLM和SMB的关系
SMB的认证可以基于NTLM协议或者kerberos协议,前者使用了hash,后者使用了ticket,是构成SMB的 PtH 和 PtT攻击的基础。
NTLM 并没有定义它所依赖的传输层协议。NTLM 消息的传输完全依赖于使用 NTLM 的上层协议来决定,可以是SMB,也可以是TCP,亦或HTTP。
三、跨协议的 NTLM-Relay
前面说过,NTLM的上层协议基本可以是任何协议(如果上层是基于UDP的协议的话,可能会不一样),所以这引出了跨协议的NTLM-Relay技巧。无论NTLM的上层协议是什么,其携带的NTLM的三条消息都是由NTLM SSP 生成的,所以上层协议在 relay 的过程中,是可以被替换掉的。
比如从 http relay 至 smb,从 smb relay 至 ldap/mssql 等等。我们只需要将一个协议中的 NTLM 消息取出来,然后原样不动的地放入另一个协议,就完成了上层协议转换的过程。

浙公网安备 33010602011771号