Windows协议 NTLM篇
阅读原文时间:2022年04月02日阅读:5

NTLM 基础 介绍

Windows本身是不会存储明文密码的,只保存密码的hash

其中本机用户的密码hash是放在本地的SAM文件里面,域内用户的密码hash是存在域控的NTDS.DIT文件里面的

Administrator:500:aad3b435b51404eeaad3b435b51404ee:520126a03f5d5a8d836f1c4f34ede7ce:::

其中aad3b435b51404eeaad3b435b51404ee是LM Hash;520126a03f5d5a8d836f1c4f34ede7ce是NTLM Hash

LM Hash

全称为LAN Manager Hash

讲下LM Hash的加密过程

  1. 先将用户的密码全部转换为大写,然后再转换为16进制的字符串,要是不足14字节就用0来补全
  2. 密码的16进制字符串,拆分为两个7byte的部分;每部分转为比特流,也就是长度位为56bit。长度不足用0补齐
  3. 再分7bit为一组,每组末尾加0,再组成一组,也就是组成了两大组(一大组里有8小组)
  4. 两大组分别作为key为"KGS!@#$%"进行DES加密
  5. 将加密后的两组值拼接在一起,得到最终的LM Hash

LM加密算法的固有漏洞

  1. 密码长度最大只能为14个字符
  2. Des的密码强度不高(KGS!@#$%)
  3. 密码不区分大小写(加密过程中最终都会转换成大写)
  4. 如果密码强度小于7位,第二个分组加密后的结果肯定为aad3b435b51404ee

NTLM Hash

为了解决LM加密和身份验证方案中固有的安全弱点,Microsoft 于1993年在Windows NT 3.1中引入了NTLM协议。

以下是各个版本对LM和NTLM的支持。

所以从Windows Vista和Windows Server 2008以后,不再存储LM Hash,只存储NTLM Hash

所以高版本我们抓到的LM Hash都是AAD3B435B51404EEAAD3B435B51404EE,没用的

但是有些工具的参数需要填写固定格式LM hash:NT hash,比如wmiexec-hashes,我上篇也用到了

我们就可以用00000000000000000000000000000000来填写LM Hash

讲下NTLM Hash的加密过程

就比较简便了

  1. 先将用户密码转换为十六进制格式
  2. 上面转换过来的然后进行Unicode编码
  3. 再进行MD4加密

NTLM验证是一种Challenge/Response 验证机制

由三种消息组成:通常称为

  1. 协商:client协商server使用NTLM的版本是多少

  1. 质询:

  1. 验证:server在收到client发来的Response与内存中的Challenge1进行比较,如果相等则认证通过、

在type3验证中的相应 一共有六种

  1. LM(LAN Manager)响应 - 由大多数较早的客户端发送,这是“原始”响应类型。
  2. NTLM v1响应 - 这是由基于NT的客户端发送的,包括Windows 2000和XP。
  3. NTLM v2响应 - 在Windows NT Service Pack 4中引入的一种较新的响应类型。它替换启用了 NTLM版本2的系统上的NTLM响应。
  4. LM v2响应 - 替代NTLM版本2系统上的LM响应。
  5. NTLM2会话响应 - 用于在没有NTLMv2身份验证的情况下协商NTLM2会话安全性时,此方案会更改LM NTLM响应的语义。
  6. 匿名响应 - 当匿名上下文正在建立时使用; 没有提供实际的证书,也没有真正的身份验证。“存 根”字段显示在类型3消息中。

这六种使用的加密流程一样,都是前面我们说的Challenge/Response 验证机制,区别在Challenge和加密算法不同。

这里 我主要重点记录下NTLM v1和 NTLM v2响应

  1. v2是16位的Challenge,而v1是8位的Challenge(但是我测试的都是16位的challenge)

  2. 加密算法也不同

v1: 将16字节的NTLM hash空填充为21个字节,然后分成三组,每组7比特,作为3DES加密算法的三组密钥,加密Server发来的Challenge。 将这三个密文值连接起来得到response。(DES加密算法)

v2:

至于选择哪个版本的响应由LmCompatibilityLevel决定。

Challenge/Response验证机制里面type3 response里面包含Net-ntlm hash,NTLM v1响应和NTLMv2响应对应的就是Net-ntlm hash分为Net-ntlm hash v1和Net-ntlm hash v2

Net-ntlm hash v1的格式为:

username::hostname:LM response:NTLM response:challenge

Net-ntlm hash v2的格式为:

username::domain:challenge:HMAC-MD5:blob

响应大部分是抄的360文章的,因为响应我就觉得他们写的比较清楚

发起NTLM请求

这玩意方法有很多,详情看下面文章吧..

https://osandamalith.com/2017/03/24/places-of-interest-in-stealing-netntlm-hashes/

Net-NTLM 利用

Net—NTLM v1破解

只要获取到Net-NTLM v1,都能破解为NTLM hash。与密码强度无;但是大部分都是v2,v2就relay

使用Responder

https://github.com/lgandx/Responder/

具体操作要修改Responder.conf,所以我先备份出来一份

  1. Challenge改为1122334455667788; (默认为random)

  2. 获取到Net—NTLM v1

    sudo -E python3 Responder.py -wrfv -I eth0 -i 192.168.0.109 --lm

  3. 然后使用下面这个工具转换出来 然后解密就可以了

    https://github.com/evilmog/ntlmv1-multi

    然后去https://crack.sh/解密

    然后对key解密

Net—NTLM v2破解

一般就是利用hashcat 离线爆破明文密码

在Net-NTLM Hash的破解里面,如果是v1的话,拿到Net-NTLM就相当于拿NTLM HASH.这个时候就没有Relay的必要性了;

但是在实际中遇到的例子往往不会是v1,而是v2。

这个时候密码强度高一点,基本就跑不出来了,这种情况下 就relay。

RelaySMB

对域环境好一点,因为workgroup里的机器没有信任关系,自己机子的hash都存在sam里

impacket下的smbrelayx.py

impacket下的ntlmrelayx.py

Responder底下的`MultiRelay.pyv

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器