NTLM

NTLM

SSPI 和 SSP

SSPI

SSPI(Security Support Provider Interface),即 安全服务提供接口,这是 Windows 定义的一套接口,该接口定义了与安全有关的功能函数,包含但不限于:

  • 身份验证机制
  • 信息完整性
  • 为其他协议提供的会话安全机制

SSP

SSP(Security Service Provider),即 安全服务提供,它是 SSPI 的实现者,是对 SSPI 相关功能函数的具体实现。微软自己实现了如下的 SSP,用于提供安全功能:

  • NTLM SSP
  • Kerberos
  • Digest SSP
  • Cred SSP

​ 在系统层面,SSP 就是一个 dll,来实现身份验证等安全功能,实现的身份验证机制是不一样的。比如 NTLM SSP 实现的就是一种Challenge/Response 验证机制。而 Kerberos SSP 实现的就是基于 ticket 的身份验证机制。

​ DLL(Dynamic Link Library)文件为动态链接库文件,又称“应用程序拓展”,是软件文件类型。在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件,放置于系统中。当我们执行某一个程序时,相应的DLL文件就会被调用。

Windows 认证

​ 通过网络访问一个受保护的资源,服务器需要认证自己的身份。双方通过加密对话进行身份验证的过程。Windows常见的两种认证体系NTLM 认证和 Kerberos 认证。

LM Hash加密算法

LM Hash的加密流程如下,我们以口令P@ss1234为例演示:

1)将用户的明文口令转换为大写,并转换为16进制字符串。

P@ss1234->大写 = P@SS1234->转为十六进制= 5040535331323334

2)如果转换后的16进制字符串的长度不足14字节(长度28),用0来补全。

5040535331323334-> 用0 补全为14字节(长度28) = 5040535331323334000000000000

3)将14字节分为两组,每组7字节转换为二进制数据,每组二进制数据长度为56比特位。如图所示

4)将每组二进制数据按7比特位为一组,分为8组,每组未尾加0,再转换成16进制,这样每组也就成了8字节长度的16进制数据了。如图所示。

5)将上面生成的两组16进制数据,分别作为DES加密密钥对字符串“KGS!@#$%"进行加密。然后将DES加密后的两组密文进行拼接,得到最终的LM HASH值。如图所示。

KGS!@#$%转为16进制为: 4B47532140232425

NTLM Hash

从Windows Vista 和 Windows Server 2008开始,默认情况下只存储 NTLM Hash,LM Hash 将不再存在。如果空密码或者不储蓄 LM Hash 的话,我们抓到的LM Hash是AAD3B435B51404EEAAD3B435B51404EE。

NTLM Hash是由明文密码经过三步加密而成:

NTLM Hash = md4(unicode(hex(password)))

NTLM Hash的加密流程分为三步,具体如下
1)先将用户密码转换为16进制格式。

2)再将16进制格式的字符串进行ASCII转Unicode编码。

3)最后对Unicode编码的16进制字符串进行标准MD4单向哈希加密。
如下可以看到P@ss1234通过NTLM Hash的加密流程-步步加密成为NTLM Hash: 74520a4ec2626e3638066146a0d5ceae。

P@ss1234->转为十六进制 = 5040737331323334
5040737331323334->ASCII转Uncode编码=50004000730073003100320033003400
50004000730073003100320033003400 ->MD4加密= 7520a4ec2626e3638066146a0d5ceae

NTLM

(1)NTLM认证过程与NET-NTLM v1\v2

NTLM认证采用质询/应答(Challenge/Response) 的消息交互模式,流程如下:

​ 1.客户端向服务器发送一个请求,请求中包含明文的登陆用户名。在服务器中已经存储了登陆用户名和对应的密码hash

​ 2.服务器接收到请求后,NTLMv2协议下会生成一个16位的随机数(这个随机数称为Challenge),明文发送回客户端。使用存储的登录用户名密码hash加密Challenge,获得challenge1

​ 3.客户端接收到Challenge后,使用当前账户密码的hash(NTLM Hash)对Challenge加密,获得response,将response发送给服务器

​ 4.服务器接收到客户端加密后的response,比较response和Challenge,如果相同,验证成功

?哈希传递攻击?SMB认证?Responder

参考链接:NTLM认证相关攻击技巧(较全) - 先知社区 (aliyun.com)

纯干货-内网渗透系列教程——NTLM 与 NTLM 身份认证 - 知乎 (zhihu.com)

posted @ 2023-09-21 22:16  飞越三万尺  阅读(39)  评论(0编辑  收藏  举报